2017-07-05 1 views
-4

bekommen Ich bekomme diese Java-Laufzeit Ausnahme und ich habe meine Abfrage auch überprüft. Alle scheinen recht zu haben. Ich verstehe nur nicht, wo ich falsch liege Ich habe es überprüft und finde nichts falsch. Bitte helfen Sie mir Das ist mein logcatAndroid Fehler in Sqlite Datenbank Klasse

07-05 10:59:38.204 12209-12209/com.example.user.easytodolist E/AndroidRuntime: FATAL EXCEPTION: main 
                        Process: com.example.user.easytodolist, PID: 12209 
                        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.user.easytodolist/com.example.user.easytodolist.MainActivity}: android.database.sqlite.SQLiteException: near "TABLEtasks": syntax error (code 1): , while compiling: CREATE TABLEtasks(_idINTEGER PRIMARY KEY AUTOINCREMENT, titleTEXT NOT NULL); 
                        ################################################################# 
                        Error Code : 1 (SQLITE_ERROR) 
                        Caused By : SQL(query) error or missing database. 
                        (near "TABLEtasks": syntax error (code 1): , while compiling: CREATE TABLEtasks(_idINTEGER PRIMARY KEY AUTOINCREMENT, titleTEXT NOT NULL);) 
                        ################################################################# 
                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3319) 
                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415) 
                         at android.app.ActivityThread.access$1100(ActivityThread.java:229) 
                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821) 
                         at android.os.Handler.dispatchMessage(Handler.java:102) 
                         at android.os.Looper.loop(Looper.java:148) 
                         at android.app.ActivityThread.main(ActivityThread.java:7331) 
                         at java.lang.reflect.Method.invoke(Native Method) 
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
                        Caused by: android.database.sqlite.SQLiteException: near "TABLEtasks": syntax error (code 1): , while compiling: CREATE TABLEtasks(_idINTEGER PRIMARY KEY AUTOINCREMENT, titleTEXT NOT NULL); 
                        ################################################################# 
                        Error Code : 1 (SQLITE_ERROR) 
                        Caused By : SQL(query) error or missing database. 
                        (near "TABLEtasks": syntax error (code 1): , while compiling: CREATE TABLEtasks(_idINTEGER PRIMARY KEY AUTOINCREMENT, titleTEXT NOT NULL);) 
                        ################################################################# 
                         at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
                         at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1000) 
                         at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:565) 
                         at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
                         at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:59) 
                         at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31) 
                         at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1838) 
                         at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1769) 
                         at com.example.user.easytodolist.db.TaskHelper.onCreate(TaskHelper.java:17) 
                         at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:251) 
                         at android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:187) 
                         at com.example.user.easytodolist.MainActivity.updateUI(MainActivity.java:84) 
                         at com.example.user.easytodolist.MainActivity.onCreate(MainActivity.java:38) 
                         at android.app.Activity.performCreate(Activity.java:6904) 
                         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1136) 
                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3266) 
                         ... 9 more 

Das ist mein MainActivity.

import android.content.ContentValues; 
import android.content.DialogInterface; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.preference.DialogPreference; 
import android.support.v7.app.AlertDialog; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.TextView; 

import com.example.user.easytodolist.db.Task; 
import com.example.user.easytodolist.db.TaskHelper; 

import java.util.ArrayList; 

public class MainActivity extends AppCompatActivity { 

    private static final String TAG = "MainActivity"; 
    private TaskHelper mHelper; 
    private ListView mTaskListView; 
    private ArrayAdapter<String> mAdapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     mHelper = new TaskHelper(this); 
     mTaskListView = (ListView) findViewById(R.id.list_todo); 
     updateUI(); 
    } 



    @Override 
    public boolean onCreateOptionsMenu(Menu menu){ 
     getMenuInflater().inflate(R.menu.main_menu,menu); 
     return super.onCreateOptionsMenu(menu); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item){ 
      switch(item.getItemId()){ 
       case R.id.action_add_task: 
        final EditText taskEditTask = new EditText(this); 
        AlertDialog dialog = new AlertDialog.Builder(this) 
        .setTitle("New Task") 
        .setMessage("Add a New Task") 
        .setView(taskEditTask) 
        .setPositiveButton("Add", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          String task = String.valueOf(taskEditTask.getText()); 
          SQLiteDatabase db = mHelper.getWritableDatabase(); 
          ContentValues values = new ContentValues(); 
          values.put(com.example.user.easytodolist.db.Task.TaskEntry.COL_TASK_TITLE,task); 
          db.insertWithOnConflict(Task.TaskEntry.TABLE,null,values,SQLiteDatabase.CONFLICT_REPLACE); 
          db.close(); 
          updateUI(); 
         } 
        }) 
          .setNegativeButton("Cancel", null) 
          .create(); 
        dialog.show(); 
        return true; 
       default: 
        return super.onOptionsItemSelected(item); 



      } 
    } 

    private void updateUI() { 
     ArrayList<String> taskList = new ArrayList<>(); 
       SQLiteDatabase db = mHelper.getReadableDatabase(); 
     Cursor cursor = db.query(Task.TaskEntry.TABLE, 
       new String[]{Task.TaskEntry._ID, Task.TaskEntry.COL_TASK_TITLE} ,null,null,null,null,null); 
     while (cursor.moveToNext()){ 
      int index = cursor.getColumnIndex(Task.TaskEntry.COL_TASK_TITLE); 
      taskList.add(cursor.getString(index)); 
     } 

     if(mAdapter == null){ 
      mAdapter = new ArrayAdapter<String>(this, R.layout.item_todo,R.id.task_title,taskList); 
      mTaskListView.setAdapter(mAdapter); 
     } else{ 
      mAdapter.clear(); 
      mAdapter.addAll(taskList); 
      mAdapter.notifyDataSetChanged(); 
     } 

     cursor.close(); 
     db.close(); 
    } 


    public void deleteTask(View view){ 
     View parent = (View) view.getParent(); 
     TextView taskTextView = (TextView) parent.findViewById(R.id.task_title); 
     String task = String.valueOf(taskTextView.getText()); 
     SQLiteDatabase db = mHelper.getWritableDatabase(); 
     db.delete(Task.TaskEntry.TABLE, Task.TaskEntry.COL_TASK_TITLE + "= ?", new String[] {task}); 
     db.close(); 
     updateUI(); 

    } 
} 

Mein TaskHelperclass

package com.example.user.easytodolist.db; 

import android.content.Context; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 

public class TaskHelper extends SQLiteOpenHelper { 
    public TaskHelper(Context context) { 
     super(context,Task.DB_NAME,null,Task.DB_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     String createTable = "CREATE TABLE " + Task.TaskEntry.TABLE + " (" + 
               Task.TaskEntry._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
               Task.TaskEntry.COL_TASK_TITLE + " TEXT NOT NULL);"; 
     db.execSQL(createTable); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     db.execSQL("DROP TABLE IF EXISTS " + Task.TaskEntry.TABLE); 
     onCreate(db); 
    } 
} 

und Task-Klasse

package com.example.user.easytodolist.db; 

import android.provider.BaseColumns; 

public class Task { 

    public static final String DB_NAME = "com.example.user.easytodolist.db"; 
    public static final int DB_VERSION = 1; 

    public class TaskEntry implements BaseColumns{ 
     public static final String TABLE= "tasks"; 
     public static final String COL_TASK_TITLE = "title"; 
    } 
} 
+1

verpasst 'ich habe meine Abfrage auch überprüft' sieht aus wie Sie nicht sorgfältig genug überprüft haben. Ihnen fehlt Platz in Ihrem SQL –

+0

Einfach App aus Emulator oder Gerät deinstallieren und dann erneut versuchen, mit Run-Anwendung zu installieren. –

+0

@NitinPatel die App zu deinstallieren und neu zu starten funktioniert !! .. Danke, Alter! –

Antwort

3
CREATE TABLEtasks(_idINTEGER PRIMARY KEY AUTOINCREMENT, titleTEXT NOT NULL); 

Diese Abfrage sollte

sein
CREATE TABLE tasks(id INTEGER PRIMARY KEY, title TEXT NOT NULL); 

Sie haben die Leerzeichen

+0

im Taskhelper @Abdullah? –

+0

Was meinst du in der Aufgabenhilfe? Sie sollten dies in der onCreate-Methode innerhalb der Klasse verwenden, die SQLiteOpenHelper erweitert –

+0

Danke für die Hilfe @Abdullah Tellioglu! Es funktionierte. Meine Abfrage war korrekt, ich musste sie einfach deinstallieren und erneut ausführen! Danke noch einmal –