我想從edittext插入數據到數據庫,但我得到這些錯誤,並不能解決它。我創建了DBHelper,代碼如下,就像在DB中添加數據的類一樣。也是構造函數和getters和setter。我真的需要一些幫助。ANDROID:引起:java.lang.reflect.InvocationTargetException
02-01 22:22:07.180 23428-23428/? E/SQLiteLog: (1) AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY
02-01 22:22:07.200 23428-23428/? W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x42020540)
02-01 22:22:07.380 23428-23428/? E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.IllegalStateException: Could not execute method for android:onClick
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:275)
at android.view.View.performClick(View.java:4102)
at android.view.View$PerformClick.run(View.java:17085)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:155)
at android.app.ActivityThread.main(ActivityThread.java:5520)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:270)
at android.view.View.performClick(View.java:4102)
at android.view.View$PerformClick.run(View.java:17085)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:155)
at android.app.ActivityThread.main(ActivityThread.java:5520)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.database.sqlite.SQLiteException: AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY (code 1): , while compiling: CREATE TABLE Logs(_idINTEGER PRIMARY KEY AUTOINCREMENT,titleTEXT,plate_numberTEXT,sort_idTEXT,gradeTEXT,diameterTEXT,lengthTEXT,survey_idINTEGER AUTOINCREMENT);
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:909)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:520)
at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31)
at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1719)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1650)
at com.example.matija.ams.LogsDBHandler.onCreate(LogsDBHandler.java:51)
at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252)
at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164)
at com.example.matija.ams.LogsDBHandler.addLogs(LogsDBHandler.java:62)
at com.example.matija.ams.AddLogs.saveButtonClicked(AddLogs.java:55)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:270)
at android.view.View.performClick(View.java:4102)
at android.view.View$PerformClick.run(View.java:17085)
at android.os.Handler.handleCallback(Handler.java:615)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:155)
at android.app.ActivityThread.main(ActivityThread.java:5520)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796)
at dalvik.system.NativeStart.main(Native Method)
02-01 22:22:09.240 23428-23428/? D/Process: killProcess, pid=23428
02-01 22:22:09.270 23428-23428/? D/Process: dalvik.system.VMStack.getThreadStackTrace(Native Method)
02-01 22:22:09.270 23428-23428/? D/Process: java.lang.Thread.getStackTrace(Thread.java:599)
02-01 22:22:09.270 23428-23428/? D/Process: android.os.Process.killProcess(Process.java:956)
02-01 22:22:09.270 23428-23428/? D/Process: com.android.internal.os.RuntimeInit$UncaughtHandler.uncaughtException(RuntimeInit.java:108)
02-01 22:22:09.270 23428-23428/? D/Process: java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:693)
02-01 22:22:09.270 23428-23428/? D/Process: java.lang.ThreadGroup.uncaughtException(ThreadGroup.java:690)
02-01 22:22:09.270 23428-23428/? D/Process: dalvik.system.NativeStart.main(Native Method)
這是我DbHandler與add方法
public class LogsDBHandler extends SQLiteOpenHelper {
//DB version
private static final int DATABASE_VERSION = 11;
// DB name
private static final String DATABASE_NAME = "Log";
//table name
public static final String TABLE_LOGS = "Logs";
public static final String TABLE_SURVEY = "SURVEY";
//TableLogs column names
public static final String KEY_ID = "_id";
public static final String KEY_TITLE = "title";
public static final String KEY_PLATE_NUMBER = "plate_number";
public static final String KEY_SORTID = "sort_id";
public static final String KEY_GRADE = "grade";
public static final String KEY_DIAMETER = "diameter";
public static final String KEY_LENGTH = "length";
public static final String KEY_SURVEYID = "survey_id";
//TableSurvey column names
public static final String KEY_CREATEDAT = "created_at";
public static final String KEY_SURVEY_TITLE = "survey_title";
public static final String KEY_STATE = "state";
public LogsDBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, DATABASE_NAME, factory, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_LOGS_TABLE = "CREATE TABLE " + TABLE_LOGS + "(" +
KEY_ID + "INTEGER PRIMARY KEY AUTOINCREMENT," +
KEY_TITLE + "TEXT," + KEY_PLATE_NUMBER + "TEXT," +
KEY_SORTID + "TEXT," + KEY_GRADE + "TEXT," +
KEY_DIAMETER + "TEXT," + KEY_LENGTH + "TEXT," +
KEY_SURVEYID + "INTEGER AUTOINCREMENT" +");";
db.execSQL(CREATE_LOGS_TABLE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_LOGS);
onCreate(db);
}
//add new row
public void addLogs(Logs log) {
SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_TITLE, log.get_title());
values.put(KEY_PLATE_NUMBER, log.get_plate_number());
values.put(KEY_SORTID, log.get_sort_id());
values.put(KEY_GRADE, log.get_grade());
values.put(KEY_DIAMETER, log.get_diameter());
values.put(KEY_LENGTH, log.get_length());
db.insert(TABLE_LOGS, null, values);
db.close();
}
}
所以下面的代碼是從的EditText將數據添加到數據庫中。如果有什麼不對,請告訴我。所以這是所有的代碼(我沒有把代碼與構造函數,getters和setter)。所以我有人知道什麼是問題請說寫。謝謝。
當讀取logcat時,錯誤是由「最低」錯誤引起的,所以'SQLiteException:AUTOINCREMENT只允許在INTEGER PRIMARY KEY' –
謝謝,那就是問題所在,現在它可以工作。 – RubyDigger19
儘管如此,您仍然需要在列名稱周圍留出空隙。 –