2011-07-20 5 views
2

私は、1行しかない1つのテーブルを作成する簡単なデータベースを作って作りたいと考えています。まず、SQLiteHelperのupdate()メソッドを使用したときに動作することを確認します。しかし、SQLコマンド 'UPDATE ... SET'を試してみると、 'no such column'というエラーが発生します。 'update'メソッドは問題ありません。誰もがSQLをうまくアンドロイドを知っていれば、私を助けてくれますか?以下は私のコードとエラーメッセージです。Android:SQLiteDatabase - そのような列はありません

CODE:

public class TestDBMain extends Activity { 
private final String SETTINGS_TABLE_NAME = "settings"; 

// Columns 
private final String DEV_ID = "dev_id"; 
private final String SERVER_NAME = "server_name"; 
private final String SERVER_PORT = "server_port"; 
private final String SERVER_SUBFOLDER = "server_subfolder"; 
private final String USERNAME = "username"; 
private final String PASSWORD = "password"; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    DB_Settings db_s = new DB_Settings(this); 
    db_s.deleteDBSettings(); 
    db_s.addDBSettings(SERVER_NAME, "test_server_01"); 
    // ERROR occurs here 
    db_s.addDBSettingsWithSQLCommand(SERVER_NAME, "test_server_22"); 
} 

public class DB_Settings extends SQLiteOpenHelper { 
    private static final String DB_NAME = "settings.db"; 
    private static final int DATABASE_VERSION = 1; 
    private String[] Settings_FROM = { _ID, DEV_ID, SERVER_NAME, SERVER_PORT, SERVER_SUBFOLDER, 
      USERNAME, PASSWORD}; 

    private Context mContext; 

    public DB_Settings(Context context) { 
     super(context, DB_NAME, null, DATABASE_VERSION); 
     mContext = context; 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL("CREATE TABLE IF NOT EXISTS "+SETTINGS_TABLE_NAME+"("+_ID+" INTEGER PRIMARY KEY AUTOINCREMENT, " 
       +DEV_ID+" VARCHAR," 
       +SERVER_NAME+" VARCHAR," 
       +SERVER_PORT+" INTEGER," 
       +SERVER_SUBFOLDER+" VARCHAR," 
       +USERNAME+" VARCHAR," 
       +PASSWORD+" VARCHAR);");   

     initialize(db); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 

    } 

    public void deleteDBSettings(){ 
     mContext.deleteDatabase(DB_NAME); 
    } 

    private void initialize(SQLiteDatabase db){ 
     ContentValues values = new ContentValues(); 

     values.put(DEV_ID, "1"); 
     values.put(SERVER_NAME, "1"); 
     values.put(SERVER_PORT, 443); 
     values.put(SERVER_SUBFOLDER, "1"); 
     values.put(USERNAME, "1"); 
     values.put(PASSWORD, "1"); 

     db.insertOrThrow(SETTINGS_TABLE_NAME, null, values); 
    } 

    public void addDBSettings(String key, Object value){ 
     // Insert a new record 
     SQLiteDatabase db = getWritableDatabase(); 
     ContentValues table_value = new ContentValues(); 

     if(value.getClass().equals(String.class)){ 
      table_value.put(key, value.toString()); 
     } 
     else if (value.getClass().equals(Integer.class)){ 
      table_value.put(key, (Integer)value); 
     } 

     // add to database 
     db.update(SETTINGS_TABLE_NAME, table_value, "_id=1", null); 
    } 

    public void addDBSettingsWithSQLCommand(String key, Object value){ 
     SQLiteDatabase db = getWritableDatabase(); 
     db.execSQL("UPDATE "+SETTINGS_TABLE_NAME 
       +" set "+key+" = "+value.toString() 
       +" where _id = 1;"); 
    } 
} 

エラーログ:

07-20 01:00:53.516: ERROR/AndroidRuntime(6066): Caused by: android.database.sqlite.SQLiteException: no such column: test_server_22: UPDATE settings set server_name = test_server_22 where _id = 1; 
07-20 01:00:53.516: ERROR/AndroidRuntime(6066):  at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method) 
07-20 01:00:53.516: ERROR/AndroidRuntime(6066):  at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1727) 
07-20 01:00:53.516: ERROR/AndroidRuntime(6066):  at android.test.db.TestDBMain$DB_Settings.addDBSettingsWithSQLCommand(TestDBMain.java:109) 
07-20 01:00:53.516: ERROR/AndroidRuntime(6066):  at android.test.db.TestDBMain.onCreate(TestDBMain.java:35) 
07-20 01:00:53.516: ERROR/AndroidRuntime(6066):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
07-20 01:00:53.516: ERROR/AndroidRuntime(6066):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627) 

答えて

1

更新のため、このクエリを試してみてください。..

db.execSQL("UPDATE "+SETTINGS_TABLE_NAME 
       +" set "+key+" = \""+value.toString() 
       +"\" where _id = 1;"); 
+0

もう一度、CapDroidをよろしくお願いします。出来た!あなたが気にしないなら、これら2つの後方スラッシュが問題をどのように修正したか教えてくれますか? – June

+0

実際には値は二重反転コーマ( ")でなければならず、javaで直接使用することはできません。その前にスラッシュ(\)を入れてください。 –

+0

ありがとうございました、CapDroid!私はたくさんのことを学んだ – June

4

文字列を照会するために、あなたが配置する必要があります 'と'。試してください。

db.execSQL("UPDATE "+SETTINGS_TABLE_NAME 
       +" set "+key+" = '"+value.toString() 
       +"' where _id = 1;"); 
+0

この1つもうまくいきます!あなたの答えと説明をありがとうございましたCapdroidが私を助けてくれたので私は彼の答えを選びます。投票ありがとうございました! – June

+0

私から+1投票... –

+0

おかげです。 – Rasel

関連する問題