我一直在尝试在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)
您的一列(电话号码)的名称中有一个空白:
“插入联系人(电话号码,姓名)值(?,?)”
中出错
在不使用空白的情况下重命名它