私は、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)
もう一度、CapDroidをよろしくお願いします。出来た!あなたが気にしないなら、これら2つの後方スラッシュが問題をどのように修正したか教えてくれますか? – June
実際には値は二重反転コーマ( ")でなければならず、javaで直接使用することはできません。その前にスラッシュ(\)を入れてください。 –
ありがとうございました、CapDroid!私はたくさんのことを学んだ – June