2017-05-15 262 views
-2

美好的一天先生/女士,每当我按下保存项目名称,项目价格和项目描述,我的应用程序会自动崩溃并导向主屏幕。这是错误。你介意帮我吗?条码扫描器Android Sqlite

E/AndroidRuntime:致命异常:主 工艺:app.num.barcodescannerproject,PID:15141 android.database.sqlite.SQLiteException:无法识别的令牌: “8850007011743jumel50wew”(码1):,而 编译:INSERT INTO scanresults VALUES(8850007011743jumel50wew); 在android.database.sqlite.SQLiteConnection.nativePrepareStatement(母语 方法) 在android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:906) 在android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java: 517) 在android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 在android.database.sqlite.SQLiteProgram。(SQLiteProgram.java:58) 在android.database.sqlite.SQLiteStatement(SQLiteStatement。 java:31) at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1704) at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1635) at app。 num.barcodescannerproject.popupDialouge $ 1.onClick(popupDialouge.java:36) at android.view.View.performClick(View.java:4909) at android.view.View $ PerformClick.run(View.java:20390) at android.os.Handler.handleCallback(Handler.java:815) at android.os.Handler.dispatchMessage(Handler.java:104) at android.os.Looper.loop(Looper.java:194) at android .app.ActivityThread.main(ActivityThread.java:5877) 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:1020) at com.android.internal.os.ZygoteInit.mai n(ZygoteInit.java:815) I /过程:发送信号。 PID:15141 SIG:9应用程序已终止。

这是我的代码

save.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      SQLiteDatabase db = openOrCreateDatabase("barcodescan",MODE_PRIVATE,null); 
      db.execSQL("CREATE TABLE IF NOT EXISTS scanresults(barcode VARCHAR,item VARCHAR,price VARCHAR ,note VARCHAR);"); 
      db.execSQL("INSERT INTO scanresults VALUES("+Barcode+item.getText().toString()+itemPrice.getText().toString()+itemNote.getText().toString()+");"); 
      Toast.makeText(popupDialouge.this, "Item Saved", Toast.LENGTH_SHORT).show(); 
      finish(); 
     } 
    }); 
    cancel.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      finish(); 
     } 
    }); 
+0

任何更新???? –

回答

1

我怕你正在使用插入错误的方法methods.Add按钮点击里面方法,然后按照下面的例子。

public void InsertScanResult(String barcodeItem,String itemPrice,String itemNote) 
{ 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues cv=new ContentValues(); 
    cv.put("BarCodeColumnNamed", barcodeItem); 
    cv.put("PriceColumnName",itemPrice); 
    cv.put("ItemColumnName", itemNote); 
    db.insert("YourTableNamed", null, cv); 
} 

您可以从Android SQLite Database Tutorial

+1

@Jumel Hermoso这对于您开始使用SQLite非常有用。 –

0

获得的例子,我想你忘了逗号:

db.execSQL("INSERT INTO scanresults VALUES('"Barcode+ "', '" +item.getText().toString()+"', '" + itemPrice.getText().toString()+"', '" +itemNote.getText().toString()+"');");

0

我认为你需要引用您的SQL语句中的字符串

见:this answer

0

而不是使用db.execSQL()执行原始语句,它更好地使用最优选的内置方法db.insert()insert数据通过ContentValues

更新您的onClick()如下方法:

@Override 
public void onClick(View v) { 
    SQLiteDatabase db = openOrCreateDatabase("barcodescan",MODE_PRIVATE,null); 

    db.execSQL("CREATE TABLE IF NOT EXISTS scanresults(barcode VARCHAR, item VARCHAR, price VARCHAR , note VARCHAR);"); 

    // Data to be inserted 
    ContentValues values = new ContentValues(); 
    values.put("barcode", Barcode); 
    values.put("item", item.getText().toString()); 
    values.put("price", itemPrice.getText().toString()); 
    values.put("note", itemNote.getText().toString()); 

    // Insert data 
    db.insert("scanresults", null, values); 

    Toast.makeText(popupDialouge.this, "Item Saved", Toast.LENGTH_SHORT).show(); 
    finish(); 
} 

希望这将有助于〜