无法更新SQLite数据库中的选定列 - Android

时间:2013-01-29 06:20:10

标签: android android-sqlite

我需要更新数据库中的选定列,但是我无法获取更新的数据。只要用户点击下一步按钮,数据就会更新。有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)

1 个答案:

答案 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 );