2017-07-05 69 views
-4

我得到這個java運行時異常,我也檢查了我的查詢。似乎都是正確的。我只是不明白我去哪裏錯了 我已經檢查過它並發現任何錯誤。請幫我 這是我的logcatandroid在sqlite數據庫類中出錯

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 

這是我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(); 

    } 
} 

我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); 
    } 
} 

而且任務類

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

'我檢查了我的查詢以及'看起來你沒有仔細檢查。您缺少SQL中的空間 –

+0

只需從模擬器或設備卸載應用程序,然後再次嘗試使用運行應用程序進行安裝。 –

+0

@NitinPatel卸載應用程序,並再次運行它工作!! ..謝謝老兄! –

回答

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

這個查詢應該是

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

你錯過了空間

+0

在任務幫助@Abdullah? –

+0

你在任務助手中的含義是什麼?你應該在擴展SQLiteOpenHelper的類中使用onCreate方法 –

+0

感謝@Abdullah Tellioglu的幫助!有效。我的查詢是正確的,我只需要卸載並再次運行它!再次感謝 –