提问者:小点点

android studio中的“无法创建sql表错误”


我一直在尝试在android studio中创建一个表并动态地为它添加值,并且使用日志;我试图查看是否插入了值。。但这是我得到的错误。下面是我的代码

public class DatabaseHandler extends SQLiteOpenHelper {

public DatabaseHandler( Context context) {
    super(context, util.DATABASE_NAME,null,util.DATABASE_VERSION );
}

@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {

    //creating all the field values of table

    String CREATE_CONTACT_TABLE = "CREATE TABLE " + util.TABLE_NAME + "("
            + util.KEY_ID + " INTEGER PRIMARY KEY," + util.KEY_NAME + " TEXT,"
            + util.KEY_PHONE_NUMER + "TEXT " + ")";

    sqLiteDatabase.execSQL(CREATE_CONTACT_TABLE); //creating contact table
}

@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

    String DROP_TABLE = String.valueOf(R.string.resource);
    sqLiteDatabase.execSQL(DROP_TABLE, new String[]{util.DATABASE_NAME});

    //creating new table

    onCreate(sqLiteDatabase);


}

public void CRUD(contact c){

    SQLiteDatabase sqLiteDatabase= this.getWritableDatabase();
    ContentValues values= new ContentValues();
    values.put(util.KEY_NAME,c.getName());
    values.put(util.KEY_PHONE_NUMER,c.getPhonenumber());

    sqLiteDatabase.insert(util.TABLE_NAME,null,values);
    sqLiteDatabase.close();
}

public contact getcontact(int id){

    SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();
    Cursor cursor= sqLiteDatabase.query(util.TABLE_NAME,new String[]{util.KEY_ID,util.KEY_NAME,util.KEY_PHONE_NUMER},util.KEY_ID + "?",new String[]{String.valueOf(id)},null,null,null);

    if (cursor!=null)
        cursor.moveToFirst();

    contact c =new contact();

    c.setId(Integer.parseInt(cursor.getString(0)));
    c.setName(cursor.getString(1));
    c.setPhonenumber(cursor.getString(2));
    cursor.close();
    return c;
}

public List<contact> getallcontact(){
     List<contact> contactList=new ArrayList<>();
    SQLiteDatabase sqLiteDatabase = this.getWritableDatabase();

     String selectall = "SELECT * FROM " + util.TABLE_NAME;
     Cursor cursor= sqLiteDatabase.rawQuery(selectall ,null);

     if(cursor.moveToFirst()){
             do{
                 contact c =new contact();

                 c.setId(Integer.parseInt(cursor.getString(0)));
                 c.setName(cursor.getString(1));
                 c.setPhonenumber(cursor.getString(2));
                 contactList.add(c);

             }while (cursor.moveToNext());
     }
        cursor.close();
        return contactList;
}

}

这就是我得到的错误。。。虽然我用正确的SQL语句创建了表,但我不能找出我做错了什么。

    2020-08-14 21:07:48.391 11340-11340/com.example.contact_list E/SQLiteLog: (1) near "number": syntax                error in "INSERT INTO  CONTACT (phone number,name) VALUES (?,?)"
  2020-08-14 21:07:48.393 11340-11340/com.example.contact_list E/SQLiteDatabase: Error inserting     phone number=9086548393 name=jeremy
     android.database.sqlite.SQLiteException: near "number": syntax error (code 1 SQLITE_ERROR): , while compiling: INSERT INTO  CONTACT (phone number,name) VALUES (?,?)
             at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
             at    android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1045)
         at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:652)
         at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:590)
         at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:61)
         at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:33)
         at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1699)
         at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1570)
         at com.example.contact_list.data.DatabaseHandler.CRUD(DatabaseHandler.java:60)
         at com.example.contact_list.MainActivity.onCreate(MainActivity.java:26)
         at android.app.Activity.performCreate(Activity.java:7995)
         at android.app.Activity.performCreate(Activity.java:7979)
         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
         at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
              at    android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
         at android.os.Handler.dispatchMessage(Handler.java:106)
         at android.os.Looper.loop(Looper.java:223)
         at android.app.ActivityThread.main(ActivityThread.java:7656)
           at java.lang.reflect.Method.invoke(Native Method)
         at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
      2020-08-14 21:07:48.396 11340-11340/com.example.contact_list E/SQLiteLog: (1) no such table:   CONTACT in "SELECT * FROM  CONTACT"
     2020-08-14 21:07:48.397 11340-11340/com.example.contact_list D/AndroidRuntime: Shutting down VM
2020-08-14 21:07:48.399 11340-11340/com.example.contact_list E/AndroidRuntime: FATAL EXCEPTION: main
     Process: com.example.contact_list, PID: 11340
      java.lang.RuntimeException: Unable to start activity       ComponentInfo{com.example.contact_list/com.example.contact_list.MainActivity}:  android.database.sqlite.SQLiteException: no such table: CONTACT (code 1 SQLITE_ERROR): , while  compiling: SELECT * FROM  CONTACT
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3449)
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601)
         at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
         at  android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
         at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
        at android.os.Handler.dispatchMessage(Handler.java:106)
       at android.os.Looper.loop(Looper.java:223)
        at android.app.ActivityThread.main(ActivityThread.java:7656)
         at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
           Caused by: android.database.sqlite.SQLiteException: no such table: CONTACT (code 1  SQLITE_ERROR): , while compiling: SELECT * FROM  CONTACT
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
         at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1045)
          at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:652)
          at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:590)
          at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:61)
          at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
          at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:46)
          at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1545)
           at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1484)
          at com.example.contact_list.data.DatabaseHandler.getallcontact(DatabaseHandler.java:86)
           at com.example.contact_list.MainActivity.onCreate(MainActivity.java:28)
         at android.app.Activity.performCreate(Activity.java:7995)
          at android.app.Activity.performCreate(Activity.java:7979)
           at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3422)
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3601) 
               at    android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) 
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
           at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066) 
          at android.os.Handler.dispatchMessage(Handler.java:106) 
              at android.os.Looper.loop(Looper.java:223) 
           at android.app.ActivityThread.main(ActivityThread.java:7656) 
           at java.lang.reflect.Method.invoke(Native Method) 
             at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947) 

共1个答案

匿名用户

您的一列(电话号码)的名称中有一个空白:

“插入联系人(电话号码,姓名)值(?,?)”中出错

在不使用空白的情况下重命名它