1

データベースで選択した列を更新する必要がありますが、更新されたデータを取得できません。ユーザーが次のボタンをクリックするとすぐに、データが更新されます。テーブルには合計 12 のフィールドがあり、更新が必要です。

シナリオは少し異なります。主に 5 つのフィールドが挿入されているかどうかを示す 1 つのアクティビティが既にあり、2 つ目のアクティビティでは、同じテーブルの 5 つのフィールドを更新する必要があります。

前もって感謝します

注: 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{

                    myDB = DBAdapter.openDatabase(Newform_Screen2.this,DBAdapter.DATABASE_TABLE);




                    String updatequery = "UPDATE"+ DBAdapter.DATABASE_TABLE+ " SET ";       

                    updatequery = updatequery + " KEY_MESSAGE_1 = '" + b1 + "',";
                    updatequery = updatequery + " KEY_MESSAGE_2 = '" + b2 + "',";
                    updatequery = updatequery + " KEY_MESSAGE_3 = '" + b3 + "',";
                    updatequery = updatequery + " KEY_MESSAGE_4 = '" + b4 + "',";
                    updatequery = updatequery + " KEY_MESSAGE_5 = '" + b5 + "',";
                    updatequery = updatequery + " KEY_MESSAGE_6 = '" + b6 + "',";
                    updatequery = updatequery + " KEY_YOUR_CURRENT_WEBSITE_1 = '" + b7 + "',";
                    updatequery = updatequery + " KEY_YOUR_CURRENT_WEBSITE_2 = '" + b8 + "',";
                    updatequery = updatequery + " KEY_YOUR_CURRENT_WEBSITE_3 = '" + b9 + "',";
                    updatequery = updatequery + " KEY_YOUR_CURRENT_WEBSITE_TYPE = '" + b10 + "',";
                    updatequery = updatequery + " KEY_YOUR_CURRENT_WEBSITE_NEED = '" + b11 + "',";
                    updatequery = updatequery + " KEY_YOUR_CURRENT_WEBSITE_OTHER = '" + b12 + ",";

                    updatequery = updatequery +  "WHERE" + DBAdapter.KEY_ROWID + "=" + mRowId +"';";

                    try{
                        myDB.execSQL(updatequery);
                    }catch(Exception e){
                        //Log("Caught while writing response" + e.getLocalizedMessage());
                    }finally{
                        if(myDB != null)myDB.close();
                        showDialog(DIALOG_ID);
                    }

                }
            }
          });

そしてDBAdapterクラスで

public static SQLiteDatabase openDatabase(Context context, String DBname){
    SQLiteDatabase myDB;
    myDB = context.openOrCreateDatabase(DBname,Context.MODE_PRIVATE, null);
    Cursor rs = null;
    boolean tableExists;
    try{
        rs = myDB.rawQuery("SELECT * FROM " + DATABASE_TABLE + " WHERE 1=0", null );
        tableExists = true;
    }catch(Exception ex){
        tableExists = false;
    }finally{
        if (rs != null) rs.close();
    }
    if(!tableExists) {
        myDB.execSQL(DATABASE_CREATE);
    }

    return myDB;
}

public static void executeQuery(SQLiteDatabase db,String query){

    if(db != null){
        db.execSQL(query);
    }

}

public static Cursor selectQuery(SQLiteDatabase db,String query){

    if(db != null)
    {
        Cursor c = db.rawQuery(query,null);
        return c;
    }
    else
    return null;

}

public static void closeDatabase(SQLiteDatabase db){
    if (db != null)
    {
        //Log("Closing Database conn");
        db.close();
    }
}

変更を加えた後、まだ更新できません..他に変更を加える必要がありますか??

dba.open();
                        ContentValues args = new ContentValues();
                        args.put(DBAdapter.KEY_MESSAGE_1, b2);
                        args.put(DBAdapter.KEY_MESSAGE_2, b3);
                        args.put(DBAdapter.KEY_MESSAGE_3, b4);
                        args.put(DBAdapter.KEY_MESSAGE_4, b5);
                        args.put(DBAdapter.KEY_MESSAGE_5, b6);
                        args.put(DBAdapter.KEY_MESSAGE_6, b7);
                        args.put(DBAdapter.KEY_YOUR_CURRENT_WEBSITE_1, b8);
                        args.put(DBAdapter.KEY_YOUR_CURRENT_WEBSITE_2, b9);
                        args.put(DBAdapter.KEY_YOUR_CURRENT_WEBSITE_3, b10);
                        args.put(DBAdapter.KEY_YOUR_CURRENT_WEBSITE_TYPE, b11);
                        args.put(DBAdapter.KEY_YOUR_CURRENT_WEBSITE_NEED, b12);
                        args.put(DBAdapter.KEY_YOUR_CURRENT_WEBSITE_OTHER, b13);

                        String where = "_id = " + mRowId.toString();

                myDB.update(DBAdapter.DATABASE_TABLE, args,where, null);    
                            dba.close();
                            showDialog(DIALOG_ID);
                    }


                }

              });

try/catch を追加した後

try{
                        myDB.beginTransaction();
                dba.open();
                ContentValues args = new ContentValues();
                args.put(DBAdapter.KEY_MESSAGE_1, b2);
                args.put(DBAdapter.KEY_MESSAGE_2, b3);
                args.put(DBAdapter.KEY_MESSAGE_3, b4);
                args.put(DBAdapter.KEY_MESSAGE_4, b5);
                args.put(DBAdapter.KEY_MESSAGE_5, b6);
                args.put(DBAdapter.KEY_MESSAGE_6, b7);
                args.put(DBAdapter.KEY_YOUR_CURRENT_WEBSITE_1, b8);
                args.put(DBAdapter.KEY_YOUR_CURRENT_WEBSITE_2, b9);
                args.put(DBAdapter.KEY_YOUR_CURRENT_WEBSITE_3, b10);
                args.put(DBAdapter.KEY_YOUR_CURRENT_WEBSITE_TYPE, b11);
                args.put(DBAdapter.KEY_YOUR_CURRENT_WEBSITE_NEED, b12);
                args.put(DBAdapter.KEY_YOUR_CURRENT_WEBSITE_OTHER, b13);

                String where =DBAdapter.KEY_ROWID +"=" + mRowId.toString();


                myDB.update(DBAdapter.DATABASE_TABLE, args,where, null);
                myDB.setTransactionSuccessful();
                    dba.close();

                    showDialog(DIALOG_ID);
                    }
                    catch(Exception e){
                        e.printStackTrace();
                    }
                     finally {
                        myDB.endTransaction();
                       }
                }


            }

          });

今、私はこのエラーが発生しています

01-29 17:52:38.874: W/System.err(9257): java.lang.NullPointerException
01-29 17:52:38.874: W/System.err(9257):     at com.example.sales.Newform_Screen2$3.onClick(Newform_Screen2.java:150)
01-29 17:52:38.874: W/System.err(9257):     at android.view.View.performClick(View.java:4084)
01-29 17:52:38.883: W/System.err(9257):     at android.view.View$PerformClick.run(View.java:16966)
01-29 17:52:38.883: W/System.err(9257):     at android.os.Handler.handleCallback(Handler.java:615)
01-29 17:52:38.883: W/System.err(9257):     at android.os.Handler.dispatchMessage(Handler.java:92)
01-29 17:52:38.893: W/System.err(9257):     at android.os.Looper.loop(Looper.java:137)
01-29 17:52:38.893: W/System.err(9257):     at android.app.ActivityThread.main(ActivityThread.java:4745)
01-29 17:52:38.893: W/System.err(9257):     at java.lang.reflect.Method.invokeNative(Native Method)
01-29 17:52:38.893: W/System.err(9257):     at java.lang.reflect.Method.invoke(Method.java:511)
01-29 17:52:38.893: W/System.err(9257):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
01-29 17:52:38.893: W/System.err(9257):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
4

3 に答える 3

0

クエリの代わりに更新メソッドを使用しますmyDB.update(mTableName, values, sWhereClause, null);。値は ContentValues オブジェクトであり、すべてのフィールドと値をこのオブジェクトに入れます。

于 2013-01-29T08:24:41.500 に答える
0

更新メソッドを使用します。

public int update (String table, ContentValues values, String whereClause, String[] whereArgs)

データベース内の行を更新する便利な方法。詳細については、 http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#update
から 入手できます。

于 2013-01-29T08:25:04.723 に答える