我已經做了一個名爲DatabaseHelper.java的單獨的類,並且想製作一個名爲傳感器的簡單表。無法更新我的SQLite數據庫中的現有記錄
我希望用名稱作爲where來更新表格。但我似乎無法讓它工作。請檢查我的代碼:
public class DBHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "Readings.db";
public static final String SENSORS_TABLE_NAME = "sensors";
public static final String SENSORS_COLUMN_ID = "Id";
public static final String SENSORS_COLUMN_NAME = "Name";
public static final String SENSORS_COLUMN_1 = "Reading1";
public static final String SENSORS_COLUMN_2 = "Reading2";
public static final String SENSORS_COLUMN_3 = "Reading3";
public static final String SENSORS_COLUMN_4 = "Reading4";
public static final String SENSORS_COLUMN_STATUS = "Status";
public DBHelper(Context context){
super(context, DATABASE_NAME, null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("CREATE TABLE" + SENSORS_TABLE_NAME + "(" + SENSORS_COLUMN_ID + "INTEGER PRIMARY KEY AUTO INCREMENT," + SENSORS_COLUMN_NAME + "STRING" +
SENSORS_COLUMN_1 + "STRING," + SENSORS_COLUMN_2 + "FLOAT," +
SENSORS_COLUMN_3 + "FLOAT," + SENSORS_COLUMN_4 + "FLOAT," + SENSORS_COLUMN_STATUS + "BOOLEAN)"
);
db.setLocale(Locale.getDefault());
db.setVersion(1);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS" + SENSORS_TABLE_NAME);
onCreate(db);
}
public boolean insertSensor(String name, boolean status)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("Name", name);
contentValues.put("Reading1", 0);
contentValues.put("Reading2", 0);
contentValues.put("Reading3", 0);
contentValues.put("Reading4", 0);
contentValues.put("Status", status);
db.insert("sensors", null, contentValues);
return true;
}
public Cursor getData(String Name){
SQLiteDatabase db = this.getReadableDatabase();
Cursor res = db.rawQuery("select * from contacts where Name="+Name+"", null);
return res;
}
public boolean updateSensor (String Name, float Reading1, float Reading2, float Reading3, float Reading4, boolean Status)
{
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("Reading1", 0);
contentValues.put("Reading2", 0);
contentValues.put("Reading3", 0);
contentValues.put("Reading4", 0);
contentValues.put("Status", Status);
db.update("sensors", contentValues, "Name="+Name, new String[]{Name});
return true;
}
}
[編輯]
public boolean updateSensor(String Name, float Reading1, float Reading2, float Reading3, float Reading4, boolean Status) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("Reading1", Reading1);
contentValues.put("Reading2", Reading2);
contentValues.put("Reading3", Reading3);
contentValues.put("Reading4", Reading4);
contentValues.put("Status", Status);
db.update("sensors", contentValues, " = ?", new String[]{Name});
return true;
}
android.database.sqlite.SQLiteException:鄰近 「=」:語法錯誤(碼1):在編譯:UPDATE傳感器SET Reading3 = ?, Status =?,Reading2 =?,Reading1 = ?, Reading4 =? WHERE =
仍然沒有工作-.-膩
卸載應用程序,並多次重新安裝它。
[編輯]
代碼仍然不工作:
public boolean updateSensor(String Name, float Reading1, float Reading2, float Reading3, float Reading4, boolean Status) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(SENSORS_COLUMN_1, Reading1);
contentValues.put(SENSORS_COLUMN_2, Reading2);
contentValues.put(SENSORS_COLUMN_3, Reading3);
contentValues.put(SENSORS_COLUMN_4, Reading4);
contentValues.put(SENSORS_COLUMN_STATUS, Status);
db.update("sensors", contentValues, "Name = ?", new String[]{Name});
return true;
}
錯誤這個時間是:
android.database.sqlite.SQLiteException:沒有這樣的柱:Reading1(代碼1):,編譯時:UPDATE傳感器SET Reading3 =?,Status =?,Reading2 = ?, Reading1 = ?, Reading4 =? WHERE名稱=?
[編輯]
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("CREATE TABLE " + SENSORS_TABLE_NAME + "(" + SENSORS_COLUMN_ID + " INTEGER PRIMARY KEY," + SENSORS_COLUMN_NAME + " TEXT" +
SENSORS_COLUMN_1 + " REAL," + SENSORS_COLUMN_2 + " REAL," +
SENSORS_COLUMN_3 + " REAL," + SENSORS_COLUMN_4 + " REAL," + SENSORS_COLUMN_STATUS + " INTEGER)"
);
db.setLocale(Locale.getDefault());
db.setVersion(1);
}
它幫助,但仍存在更新方法的錯誤。請檢查。 –
現在已經設置更新功能如下: db.update(「sensors」,contentValues,DATABASE_NAME +「=」+ Name,null); –
N.Stein仍然無法正常工作。顯示的錯誤是:android.database.sqlite.SQLiteException:沒有這樣的表:傳感器(代碼1):,編譯時:UPDATE傳感器SET Reading3 =?,Status = ?, Reading2 =?,Reading1 =?,Reading4 =? WHERE Name ='Accelerometer' –