我做了一个名为DatabaseHelper.java一个单独的类,并希望做一个简单的表名为传感器。
我想用的名字作为在哪里更新表。但我似乎无法使它发挥作用。请检查我的code:
公共类DBHelper扩展SQLiteOpenHelper {
公共静态最后弦乐DATABASE_NAME =Readings.db;
公共静态最后弦乐SENSORS_TABLE_NAME =传感器;
公共静态最后弦乐SENSORS_COLUMN_ID =ID;
公共静态最后弦乐SENSORS_COLUMN_NAME =名称;
公共静态最后弦乐SENSORS_COLUMN_1 =Reading1;
公共静态最后弦乐SENSORS_COLUMN_2 =Reading2;
公共静态最后弦乐SENSORS_COLUMN_3 =Reading3;
公共静态最后弦乐SENSORS_COLUMN_4 =Reading4;
公共静态最后弦乐SENSORS_COLUMN_STATUS =状态;
公共DBHelper(上下文的背景下){
超级(上下文,DATABASE_NAME,空,1);
}
@覆盖
公共无效的onCreate(SQLiteDatabase DB){
// TODO自动生成方法存根
db.execSQL(CREATE TABLE+ SENSORS_TABLE_NAME +(+ SENSORS_COLUMN_ID +INTEGER PRIMARY KEY自动递增,+ SENSORS_COLUMN_NAME +STRING+
SENSORS_COLUMN_1 +的字符串,+ SENSORS_COLUMN_2 +FLOAT,+
SENSORS_COLUMN_3 +FLOAT,+ SENSORS_COLUMN_4 +FLOAT,+ SENSORS_COLUMN_STATUS +布尔型)
);
db.setLocale(Locale.getDefault());
db.setVersion(1);
}
@覆盖
公共无效onUpgrade(SQLiteDatabase分贝,INT oldVersion,诠释静态网页){
// TODO自动生成方法存根
db.execSQL(DROP TABLE IF EXISTS+ SENSORS_TABLE_NAME);
的onCreate(DB);
}
公共布尔insertSensor(字符串名称,布尔状态)
{
SQLiteDatabase DB = this.getWritableDatabase();
ContentValues contentValues =新ContentValues();
contentValues.put(姓名,姓名);
contentValues.put(Reading1,0);
contentValues.put(Reading2,0);
contentValues.put(Reading3,0);
contentValues.put(Reading4,0);
contentValues.put(状态,状态);
db.insert(传感器,空,contentValues);
返回true;
}
公共光标的getData(字符串名称){
SQLiteDatabase DB = this.getReadableDatabase();
光标解析度= db.rawQuery(选择*从联系人,其中名称=+姓名+,NULL);
返回水库;
}
公共布尔updateSensor(字符串名称,浮Reading1,浮Reading2,浮Reading3,浮Reading4,布尔状态)
{
SQLiteDatabase DB = this.getWritableDatabase();
ContentValues contentValues =新ContentValues();
contentValues.put(Reading1,0);
contentValues.put(Reading2,0);
contentValues.put(Reading3,0);
contentValues.put(Reading4,0);
contentValues.put(状态,状态);
db.update(传感器,contentValues,NAME =+姓名,新的String [] {名});
返回true;
}
}
公共布尔updateSensor(字符串名称,浮Reading1,浮Reading2,浮Reading3,浮Reading4,布尔状态){
SQLiteDatabase DB = this.getWritableDatabase();
ContentValues contentValues =新ContentValues();
contentValues.put(Reading1,Reading1);
contentValues.put(Reading2,Reading2);
contentValues.put(Reading3,Reading3);
contentValues.put(Reading4,Reading4);
contentValues.put(状态,状态);
db.update(传感器,contentValues,=?,新的String [] {名});
返回true;
}
android.database.sqlite.SQLiteException:近=:语法错误(code 1):在编制:更新传感器SET Reading3 = ?,状态= ?, Reading2 = ?, Reading1 = ?, Reading4 =? WHERE =
仍然没有工作-.-觉得累
卸载应用程序,并重新安装它多次。
code仍然没有工作:
公共布尔updateSensor(字符串名称,浮Reading1,浮Reading2,浮Reading3,浮Reading4,布尔状态){
SQLiteDatabase DB = this.getWritableDatabase();
ContentValues contentValues =新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,状态);
db.update(传感器,contentValues,NAME =?,新的String [] {名});
返回true;
}
该错误这段时间是:
android.database.sqlite.SQLiteException:没有这样的列:Reading1(code 1):在编制:更新传感器SET Reading3 = ?,状态= ?, Reading2 = ?, Reading1 = ?, Reading4 =?其中name =?
@覆盖
公共无效的onCreate(SQLiteDatabase DB){
// TODO自动生成方法存根
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.execSQL(CREATE TABLE+ SENSORS_TABLE_NAME +(+ SENSORS_COLUMN_ID +INTEGER PRIMARY KEY自动递增,+ SENSORS_COLUMN_NAME +STRING+
SENSORS_COLUMN_1 +的字符串,+ SENSORS_COLUMN_2 +FLOAT,+
SENSORS_COLUMN_3 +FLOAT,+ SENSORS_COLUMN_4 +FLOAT,+ SENSORS_COLUMN_STATUS +布尔型)
);
和
db.execSQL(DROP TABLE IF EXISTS+ SENSORS_TABLE_NAME);
应
db.execSQL(CREATE TABLE+ SENSORS_TABLE_NAME +(+ SENSORS_COLUMN_ID +
INTEGER PRIMARY KEY自动递增,+ SENSORS_COLUMN_NAME +TEXT+
SENSORS_COLUMN_1 +TEXT+ SENSORS_COLUMN_2 +FLOAT,+
SENSORS_COLUMN_3 +FLOAT,+ SENSORS_COLUMN_4 +FLOAT,+
SENSORS_COLUMN_STATUS +布尔型)
);
和
db.execSQL(DROP TABLE IF EXISTS+ SENSORS_TABLE_NAME);
请注意:保持你的code格式正确将有很大的帮助。
您也错过了一些 时字符串值处理:
光标RES = db.rawQuery(选择*从联系人,其中名称=+姓名+,NULL);
和
db.update(传感器,contentValues,NAME =+姓名,新的String [] {名});
应该是:
光标RES = db.rawQuery(选择*从联系人,其中名称='+姓名+',NULL);
和
db.update(传感器,contentValues,NAME ='+姓名+',新的String [] {名});
我的建议是使用绑定参数(即语法,USUS在?占位符和一个String数组,以取代他们一个接一个)。
使得所有code修改后,只需卸载并重新安装应用程序。
您改变了您的code(为什么?!),我的回答的,因此无效一半 - 我讨厌当这种情况发生!我滚回到原来的岗位。
好了,现在看到你更新code ......它的错误!
这是正确的语法
更新(字符串表,ContentValues值,字符串whereClause,字符串[] whereArgs)
这
db.update(传感器,contentValues,DATABASE_NAME +=+姓名,新的String [] {名});
应
db.update(传感器,contentValues,NAME =?,新的String [] {名});
I have made a separate class named DatabaseHelper.java and want to make a simple table named sensors.
I wish to update the table using name as a where. But I can't seem to make it work. Please check my code:
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;
}
}
[EDIT]
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: near "=": syntax error (code 1): , while compiling: UPDATE sensors SET Reading3=?,Status=?,Reading2=?,Reading1=?,Reading4=? WHERE =
Still not working -.- getting tired
Uninstalled the app and reinstalled it multiple times.
[EDIT]
Code still not working:
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;
}
The error this time is:
android.database.sqlite.SQLiteException: no such column: Reading1 (code 1): , while compiling: UPDATE sensors SET Reading3=?,Status=?,Reading2=?,Reading1=?,Reading4=? WHERE Name = ?
[EDIT]
@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);
}
解决方案
Your table creation is wrong: you mess a bunch of spaces
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)"
);
And
db.execSQL("DROP TABLE IF EXISTS" + SENSORS_TABLE_NAME);
Should be
db.execSQL("CREATE TABLE " + SENSORS_TABLE_NAME + "(" + SENSORS_COLUMN_ID +
" INTEGER PRIMARY KEY AUTO INCREMENT," + SENSORS_COLUMN_NAME + " TEXT" +
SENSORS_COLUMN_1 + " TEXT," + SENSORS_COLUMN_2 + " FLOAT," +
SENSORS_COLUMN_3 + " FLOAT," + SENSORS_COLUMN_4 + " FLOAT," +
SENSORS_COLUMN_STATUS + " BOOLEAN)"
);
And
db.execSQL("DROP TABLE IF EXISTS " + SENSORS_TABLE_NAME);
Note: Keeping your code well formatted would help a lot.
You also miss some ' when dealing with string values:
Cursor res = db.rawQuery( "select * from contacts where Name="+Name+"", null );
And
db.update("sensors", contentValues, "Name="+Name, new String[]{Name});
Should be:
Cursor res = db.rawQuery( "select * from contacts where Name='" + Name + "'", null );
And
db.update("sensors", contentValues, "Name='" + Name + "'", new String[]{Name});
My advice would be to use bound parameters (that syntax which usus the ? placeholders and a String array to replace them one by one).
After making all the code modifications, just uninstall and reinstall the app.
[EDIT]
You changed your code (why?!), therefore invalidating half of my answer - I hate when this happens!! I rolled back to your original post.
OK, now seeing your update code... it's wrong!
This is the correct syntax
update(String table, ContentValues values, String whereClause, String[] whereArgs)
This
db.update("sensors", contentValues, DATABASE_NAME + " = ?" + Name, new String[] {Name});
should be
db.update("sensors", contentValues, "Name = ?", new String[]{Name});
上一篇:从ASP使用的SOAPClient调用ASP.NET Web服务SOAPClient、ASP、Web、NET
下一篇:安卓autocomplettextview未找到资源 - 资源不是绘制资源、未找到、不是、autocomplettextview