我需要更新数据库中的选定列,但是我无法获取更新的数据。只要用户点击下一步按钮,数据就会更新。有12个字段需要更新。桌子。
注意:dba是DBAdapter,即数据库和myDB是SQLiteDatabase
nxt = (Button)findViewById(R.id.btn_nxt);
nxt.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
String b1=t1.getText().toString();
String b2=goal_website_trying_to_achieve_edttxt.getText().toString();
String b3=communicate_edttxt.getText().toString();
String b4=success_look_like_edttxt.getText().toString();
String b5=usp_insights_edttxt.getText().toString();
String b6=act_edttxt.getText().toString();
String b7=market_edttxt.getText().toString();
String b8=your_current_website_www_edttxt.getText().toString();
String b9=your_current_website_good_edttxt.getText().toString();
String b10=your_current_website_bad_edttxt.getText().toString();
String b11=your_current_website_type_edttxt.getText().toString();
String b12=your_current_website_update_edttxt.getText().toString();
String b13=your_current_website_supporting_edttxt.getText().toString();
if(!validatescreen2()){
return;
}
else{
dba.open();
String updatequery = "UPDATE "+ DBAdapter.DATABASE_TABLE+ " SET ";
updatequery = updatequery + " KEY_MESSAGE_1 = " + b1 +"WHERE" +"_id"+mRowId +",";
updatequery = updatequery + " KEY_MESSAGE_2 = " + b2 +"WHERE" +"_id"+mRowId + ",";
updatequery = updatequery + " KEY_MESSAGE_3 = " + b3 +"WHERE" +"_id"+mRowId + ",";
updatequery = updatequery + " KEY_MESSAGE_4 = " + b4 +"WHERE" +"_id"+mRowId + ",";
updatequery = updatequery + " KEY_MESSAGE_5 = " + b5 +"WHERE" +"_id"+mRowId + ",";
updatequery = updatequery + " KEY_MESSAGE_6 = " + b6 + "WHERE" +"_id"+mRowId +"',";
updatequery = updatequery + " KEY_YOUR_CURRENT_WEBSITE_1 = " + b7 + "WHERE" +"_id"+mRowId +",";
updatequery = updatequery + " KEY_YOUR_CURRENT_WEBSITE_2 = " + b8 +"WHERE" +"_id"+mRowId + ",";
updatequery = updatequery + " KEY_YOUR_CURRENT_WEBSITE_3 = " + b9 +"WHERE" +"_id"+mRowId + ",";
updatequery = updatequery + " KEY_YOUR_CURRENT_WEBSITE_TYPE = " + b10 + "WHERE" +"_id"+mRowId +",";
updatequery = updatequery + " KEY_YOUR_CURRENT_WEBSITE_NEED = " + b11 + "WHERE" +"_id"+mRowId +",";
updatequery = updatequery + " KEY_YOUR_CURRENT_WEBSITE_OTHER = " + b12 + "WHERE" +"_id"+mRowId ;
try{
myDB.execSQL(updatequery);
}catch(Exception e){
Log("Caught while writing response" + e.getLocalizedMessage());
}finally{
if(myDB != null)myDB.close();
}
showDialog(DIALOG_ID);
dba.close();
}
}
});
所做的更改
String updatequery = "UPDATE"+ DBAdapter.DATABASE_TABLE+ " SET "+ DBAdapter.KEY_MESSAGE_1 +"= "+ b1 +
DBAdapter.KEY_MESSAGE_2 +"= "+ b2 +
DBAdapter.KEY_MESSAGE_3 +"= "+ b3 +
DBAdapter.KEY_MESSAGE_4 +"= "+ b4 +
DBAdapter.KEY_MESSAGE_5 +"= "+ b5 +
DBAdapter.KEY_MESSAGE_6 +"= "+ b6+
DBAdapter.KEY_YOUR_CURRENT_WEBSITE_1 +"= "+ b7 +
DBAdapter.KEY_YOUR_CURRENT_WEBSITE_2 +"= "+ b8 +
DBAdapter.KEY_YOUR_CURRENT_WEBSITE_3 +"= "+ b9+
DBAdapter.KEY_YOUR_CURRENT_WEBSITE_TYPE +"= "+ b10 +
DBAdapter.KEY_YOUR_CURRENT_WEBSITE_NEED +"= "+ b11 +
DBAdapter.KEY_YOUR_CURRENT_WEBSITE_OTHER +"= " + b12 + "WHERE" + DBAdapter.KEY_ROWID + "=" + mRowId ;
logcat error file
01-30 12:02:24.136: W/System.err(2645): java.lang.NullPointerException
01-30 12:02:24.136: W/System.err(2645): at com.example.sales.Newform_Screen2$3.onClick(Newform_Screen2.java:165)
01-30 12:02:24.136: W/System.err(2645): at android.view.View.performClick(View.java:4084)
01-30 12:02:24.136: W/System.err(2645): at android.view.View$PerformClick.run(View.java:16966)
01-30 12:02:24.136: W/System.err(2645): at android.os.Handler.handleCallback(Handler.java:615)
01-30 12:02:24.136: W/System.err(2645): at android.os.Handler.dispatchMessage(Handler.java:92)
01-30 12:02:24.136: W/System.err(2645): at android.os.Looper.loop(Looper.java:137)
01-30 12:02:24.136: W/System.err(2645): at android.app.ActivityThread.main(ActivityThread.java:4745)
01-30 12:02:24.136: W/System.err(2645): at java.lang.reflect.Method.invokeNative(Native Method)
答案 0 :(得分:3)
您的SQL查询不正确。它应该是 -
的形式UPDATE <table>
SET <field1> = <value1>,
<field2> = <value2> ...
WHERE <indexfield> = <id>
此外,您需要转义值,所以它是 SET FieldName ='value'
您最好不要使用update
方法。
如下:
String updatequery = "UPDATE"+ DBAdapter.DATABASE_TABLE+ " SET "+ DBAdapter.KEY_MESSAGE_1 +"= '"+ b1 + "'," +
DBAdapter.KEY_MESSAGE_2 +"= '"+ b2 + "'," +
DBAdapter.KEY_MESSAGE_3 +"= '"+ b3 + "'," +
DBAdapter.KEY_MESSAGE_4 +"= '"+ b4 + "'," +
DBAdapter.KEY_MESSAGE_5 +"= '"+ b5 + "'," +
DBAdapter.KEY_MESSAGE_6 +"= '"+ b6 + "'," +
DBAdapter.KEY_YOUR_CURRENT_WEBSITE_1 +"= '"+ b7 + "'," +
DBAdapter.KEY_YOUR_CURRENT_WEBSITE_2 +"= '"+ b8 + "'," +
DBAdapter.KEY_YOUR_CURRENT_WEBSITE_3 +"= '"+ b9 + "'," +
DBAdapter.KEY_YOUR_CURRENT_WEBSITE_TYPE +"= '"+ b10 + "'," +
DBAdapter.KEY_YOUR_CURRENT_WEBSITE_NEED +"= '"+ b11 + "'," +
DBAdapter.KEY_YOUR_CURRENT_WEBSITE_OTHER +"= '" + b12 + "' " + "WHERE" + DBAdapter.KEY_ROWID + "=" + mRowId ;
访问数据库仍然是一种可怕的方式。你真正应该做的是这个 -
ContentValues values = new ContentValues();
values.put( DBAdapter.KEY_MESSAGE_1, b1 );
values.put( DBAdapter.KEY_MESSAGE_2, b2 );
....
String filter = String.format( "%s = '%s'", DBAdapter.KEY_ROWID, mRowId );
myDB.update( DBAdapter.DATABASE_TABLE, values, filter, null );