我想研究並做一個簡單的數據庫,只創建一個表只有一行。我首先看到它在我使用SQLiteHelper的'update()'方法時起作用。但是,當我嘗試使用SQL命令'UPDATE ... SET'時,它會拋出'沒有這樣的列'的錯誤Android:SQLiteDatabase - 沒有這樣的列
我不知道爲什麼我不能使用'UPDATE ... SET'命令'更新'方法沒有問題。如果有人知道android SQL很好,你能幫我嗎?以下是我的代碼和錯誤消息。
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。有效!如果你不介意,你會教我怎樣才能解決這個問題? – June
實際上它的值必須是雙倒數的,我們不能直接在java中使用它(「),所以在它之前需要斜槓(\)(」)我希望你得到所有的.. –
謝謝你的其他幫助,CapDroid!我學到了很多! – June