Я новичок в Android и работаю над Android-приложением. К сожалению, я получаю сообщение об ошибке при попытке вставить данные из намерений в базу данных SQlite
. Я хочу вставить результаты сканирования в базу данных, но я получаю сообщения об ошибках. Я хочу вставить в базу данных два результата сканирования от Intents - SCAN RESULT и SCAN RESULT FORMAT.Ошибка в заявлении SQlite INSERT INTO
Это Logcat:
08-22 12:27:11.141 27724-27724/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: de.die_web_agenten.www.runinstant, PID: 27724
java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=0, result=-1, data=Intent { act=com.google.zxing.client.android.SCAN flg=0x80000 (has extras) }} to activity {de.die_web_agenten.www.runinstant/de.die_web_agenten.www.runinstant.AndroidBarcodeQrExample}: android.database.sqlite.SQLiteException: near "SCANDATA": syntax error (code 1): , while compiling: INSERT INTO SCANDATA SCANDATA SCAN_RESULT_FORMAT
#################################################################
Error Code : 1 (SQLITE_ERROR)
Caused By : SQL(query) error or missing database.
(near "SCANDATA": syntax error (code 1): , while compiling: INSERT INTO SCANDATA SCANDATA SCAN_RESULT_FORMAT)
#################################################################
at android.app.ActivityThread.deliverResults(ActivityThread.java:4005)
at android.app.ActivityThread.handleSendResult(ActivityThread.java:4048)
at android.app.ActivityThread.access$1400(ActivityThread.java:177)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1479)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5910)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
Caused by: android.database.sqlite.SQLiteException: near "SCANDATA": syntax error (code 1): , while compiling: INSERT INTO SCANDATA SCANDATA SCAN_RESULT_FORMAT
#################################################################
Error Code : 1 (SQLITE_ERROR)
Caused By : SQL(query) error or missing database.
(near "SCANDATA": syntax error (code 1): , while compiling: INSERT INTO SCANDATA SCANDATA SCAN_RESULT_FORMAT)
#################################################################
at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1093)
at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:670)
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:1812)
at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1743)
at de.die_web_agenten.www.runinstant.AndroidBarcodeQrExample.onActivityResult(AndroidBarcodeQrExample.java:119)
at android.app.Activity.dispatchActivityResult(Activity.java:6441)
at android.app.ActivityThread.deliverResults(ActivityThread.java:4001)
... 10 more
Это код с заявлением SQLite:
private void updateUI() {
helper = new TaskDBHelper(AndroidBarcodeQrExample.this);
SQLiteDatabase sqlDB = helper.getReadableDatabase();
Cursor cursor = sqlDB.query(TaskContract.TABLE,
new String[]{ TaskContract.Columns.SCAN_RESULT, TaskContract.Columns.SCAN_RESULT_FORMAT},
null, null, null, null, null
);
listAdapter = new SimpleCursorAdapter(
this,
R.layout.task_view,
cursor,
new String[]{TaskContract.Columns.SCAN_RESULT_FORMAT, TaskContract.Columns.SCAN_RESULT},
new int[]{R.id.ScanFormatView, R.id.ScanResultView, R.id.ScanIdView},
0
);
this.setListAdapter(listAdapter);
}
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contents = intent.getStringExtra("SCAN_RESULT");
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
helper = new TaskDBHelper(AndroidBarcodeQrExample.this);
SQLiteDatabase sqlDB = helper.getWritableDatabase();
String sql = String.format("INSERT INTO SCANDATA %s %s ",
TaskContract.TABLE,
TaskContract.Columns.SCAN_RESULT_FORMAT,
TaskContract.Columns.SCAN_RESULT
);
sqlDB.execSQL(sql);
updateUI();
Toast toast = Toast.makeText(this, "Content:" + contents + " Format:" + format, Toast.LENGTH_LONG);
toast.show();
Log.d("ADebugTag", "Value: " + (contents));
Log.d("BDebugTag", "Value: " + (format));
updateUI();
Context context = getApplicationContext();
CharSequence text = "Informationen erfolgreich gespeichert!";
int duration = Toast.LENGTH_SHORT;
//Toast toast = Toast.makeText(context, text, duration);
}
}
}
public void setListAdapter(ListAdapter listAdapter) {
this.listAdapter = listAdapter;
}
Где ошибка в коде? Любые подсказки и помощь были бы очень оценены, спасибо!
Попробуйте отладить код. – RAAAAM
ваш запрос неверен, это просто печать 'INSERT INTO SCANDATA SCANDATA SCAN_RESULT_FORMAT' –
Если вам сложно работать с необработанным SQL, для него есть Java-обертки, такие как' SQLiteDatabase # insert() 'и' ContentValues'. – laalto