我正在使用android studio,需要将一些数据插入数据库中。有时,它可以工作,但有时,我会收到此错误。我真的无法弄清楚工作时间与无效时间之间的区别。
CHECK_MASTER=...
VAR=$($CHECK_MASTER 2>&1)
我的数据库助手类中的相关代码如下:
2019-11-09 11:38:34.912 4369-4369/com.example.android.fresh
D/DatabaseHelper: addData: Adding John Smith to people_table
2019-11-09 11:38:34.913 4369-4369/com.example.android.fresh E/SQLiteLog:
(20) statement aborts at 5: [INSERT INTO
people_table(name,amount,contact_no) VALUES (?,?,?)] datatype mismatch
2019-11-09 11:38:34.916 4369-4369/com.example.android.fresh
E/SQLiteDatabase: Error inserting name=John Smith amount=255.0 contact_no= 1234567890 from {P:4369;U:10178}
android.database.sqlite.SQLiteDatatypeMismatchException: datatype mismatch (code 20 SQLITE_MISMATCH)
at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:796)
at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
at android.database.sqlite.SQLiteDatabase.insertWithOnconflict(SQLiteDatabase.java:1613)
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1482)
at com.example.android.fresh.DatabaseHelper.addData(DatabaseHelper.java:51)
at com.example.android.fresh.createPerson.AddData(createPerson.java:94)
at com.example.android.fresh.createPerson$1.onClick(createPerson.java:58)
at android.view.View.performClick(View.java:6669)
at android.view.View.performClickinternal(View.java:6638)
at android.view.View.access$3100(View.java:789)
at android.view.View$PerformClick.run(View.java:26145)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:193)
at android.app.activityThread.main(activityThread.java:6898)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:537)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
这是createPerson类中的代码:
private static final String COL1 = "contact_no";
private static final String COL2 = "name";
private static final String COL3 = "amount";
@Override
public void onCreate(SQLiteDatabase db) {
String createtable = "CREATE TABLE " + TABLE_NAME + " (ID INTEGER PRIMARY KEY AUTOINCREMENT,"
+ COL1 + " TEXT NOT NULL," +
COL2 + " TEXT NOT NULL,"
+ COL3 + " REAL)" ;
db.execSQL(createtable);
public boolean addData(String contactNo,String contactName,double amount) {
SQLiteDatabase db = this.getwritabledatabase();
Contentvalues contentvalues = new Contentvalues();
contentvalues.put(COL1,contactNo);
contentvalues.put(COL2,contactName);
contentvalues.put(COL3,amount);
Log.d(TAG,"addData: Adding " + contactName + " to " + TABLE_NAME);
long result = db.insert(TABLE_NAME,null,contentvalues);
if (result == -1) {
return false;
} else {
return true;
}
}
这是方法调用语句:
public void AddData(String contactNo,double amount) {
boolean insertData = mDatabaseHelper.addData(contactNo,contactName,amount);
if (insertData) {
check =1;
toastMessage("Contact Inserted");
} else {
toastMessage("Something went wrong");
}
}
这些中的每一个都按contactNumber,contactName和amount的顺序排列,但是我遇到的sqlite错误是按contactName,amount和contactNumber的顺序插入它。我真的不明白这是怎么回事。