SQLite的返回:错误code = 1,味精=没有这样的列:kitchen1 [英] sqlite returned: error code = 1, msg = no such column:kitchen1
问题描述
我已经收到此错误两天了,我无法找到我的code中的问题。
这里的数据库code。
SQLHandler.java
块引用>进口android.content.ContentValues;
进口android.content.Context;
进口android.database.Cursor;
进口android.database.SQLException;
进口android.database.sqlite.SQLiteDatabase;
进口android.database.sqlite.SQLiteOpenHelper;公共类SQLHandler {
公共静态最后弦乐KEY_ROOMMOVEHOLDER =roommoveholder;
公共静态最后弦乐KEY_ROOM =房间; 公共静态最后弦乐KEY_ITEMMOVEHOLDER =itemmoveholder;
公共静态最后弦乐KEY_ITEMNAME =ITEMNAME;
公共静态最后弦乐KEY_ITEMVALUE =itemvalue;
公共静态最后弦乐KEY_ROOMHOLDER =roomholder; 公共静态最后弦乐KEY_MOVENAME =movename;
公共静态最后弦乐KEY_ID1 =_id;
公共静态最后弦乐KEY_ID2 =_id;
公共静态最后弦乐KEY_ID3 =_id;
公共静态最后弦乐KEY_ID4 =_id;
公共静态最后弦乐KEY_MOVEDATE =在MOVEDATE; 私有静态最后弦乐DATABASE_NAME =mymovingfriend;
私有静态最终诠释DATABASE_VERSION = 1; 公共静态最后弦乐KEY_TODOMOVE =todomove;
公共静态最后弦乐KEY_SORTANDPURGE =sortandpurge;
公共静态最后弦乐KEY_RESEARCH =研究;
公共静态最后弦乐KEY_CREATEMOVINGBINDER =createmovingbinder;
公共静态最后弦乐KEY_ORDERSUPPLIES =ordersupplies;
公共静态最后弦乐KEY_USEITORLOSEIT =useitorloseit;
公共静态最后弦乐KEY_TAKEMEASUREMENTS =takemeasurements;
公共静态最后弦乐KEY_CHOOSEMOVER =choosemover;
公共静态最后弦乐KEY_BEGINPACKING =beginpacking;
公共静态最后弦乐KEY_LABEL =标签;
公共静态最后弦乐KEY_SEPARATEVALUES =separatevalues;
公共静态最后弦乐KEY_DOACHANGEOFADDRESS =doachangeofaddress;
公共静态最后弦乐KEY_NOTIFYIMPORTANTPARTIES =notifyimportantparties; 私有静态最后弦乐DATABASE_TABLE1 =movingname;
私有静态最后弦乐DATABASE_TABLE2 =movingrooms;
私有静态最后弦乐DATABASE_TABLE3 =movingitems;
私有静态最后弦乐DATABASE_TABLE4 =todolist的; 公共静态最后弦乐CREATE_TABLE_1 =CREATE TABLE+ DATABASE_TABLE1 +(+
KEY_ID1 +INTEGER PRIMARY KEY AUTOINCREMENT,+
KEY_MOVEDATE +TEXT NOT NULL,+
KEY_MOVENAME +TEXT NOT NULL);; 公共静态最后弦乐CREATE_TABLE_2 =CREATE TABLE+ DATABASE_TABLE2 +(+
KEY_ID2 +INTEGER PRIMARY KEY AUTOINCREMENT,+
KEY_ROOMMOVEHOLDER +TEXT NOT NULL,+
KEY_ROOM +TEXT NOT NULL);; 公共静态最后弦乐CREATE_TABLE_3 =CREATE TABLE+ DATABASE_TABLE3 +(+
KEY_ID3 +INTEGER PRIMARY KEY AUTOINCREMENT,+
KEY_ITEMNAME +TEXT NOT NULL,+
KEY_ITEMVALUE +TEXT NOT NULL,+
KEY_ROOMHOLDER +TEXT NOT NULL,+
KEY_ITEMMOVEHOLDER +TEXT NOT NULL);; 公共静态最后弦乐CREATE_TABLE_4 =CREATE TABLE+ DATABASE_TABLE4 +(+
KEY_ID4 +INTEGER PRIMARY KEY AUTOINCREMENT,+
KEY_TODOMOVE +TEXT NOT NULL,+
KEY_SORTANDPURGE +TEXT NOT NULL,+
KEY_RESEARCH +INTEGER NOT NULL,+
KEY_CREATEMOVINGBINDER +TEXT NOT NULL,+
KEY_ORDERSUPPLIES +TEXT NOT NULL,+
KEY_USEITORLOSEIT +TEXT NOT NULL,+
KEY_TAKEMEASUREMENTS +TEXT NOT NULL,+
KEY_CHOOSEMOVER +TEXT NOT NULL,+
KEY_BEGINPACKING +TEXT NOT NULL,+
KEY_LABEL +TEXT NOT NULL,+
KEY_SEPARATEVALUES +TEXT NOT NULL,+
KEY_DOACHANGEOFADDRESS +TEXT NOT NULL,+
KEY_NOTIFYIMPORTANTPARTIES +TEXT NOT NULL);; 私人DbHelper ourHelper;
私人最终上下文ourContext;
私人SQLiteDatabase ourDatabase; 私有静态类DbHelper扩展SQLiteOpenHelper { 公共DbHelper(上下文的背景下){
超(背景下,DATABASE_NAME,空,DATABASE_VERSION);
// TODO自动生成构造函数存根
} @覆盖
公共无效的onCreate(SQLiteDatabase DB){
// TODO自动生成方法存根
db.execSQL(CREATE_TABLE_1);
db.execSQL(CREATE_TABLE_2);
db.execSQL(CREATE_TABLE_3);
db.execSQL(CREATE_TABLE_4);
} @覆盖
公共无效onUpgrade(SQLiteDatabase分贝,INT oldversion,诠释静态网页){
// TODO自动生成方法存根
db.execSQL(DROP TABLE IF EXISTS+ DATABASE_TABLE1);
db.execSQL(DROP TABLE IF EXISTS+ DATABASE_TABLE2);
db.execSQL(DROP TABLE IF EXISTS+ DATABASE_TABLE3);
db.execSQL(DROP TABLE IF EXISTS+ DATABASE_TABLE4);
的onCreate(DB);
}
} 公共SQLHandler(上下文C){
ourContext = C;
} 公共SQLHandler的open()抛出的SQLException {
ourHelper =新DbHelper(ourContext);
ourDatabase = ourHelper.getWritableDatabase();
返回此;
} 公共无效的close(){
ourHelper.close();
} 众长createMove(字符串smovename){
ContentValues CV =新ContentValues();
cv.put(KEY_MOVENAME,smovename);
cv.put(KEY_MOVEDATE,尚未设置);
返回ourDatabase.insert(DATABASE_TABLE1,空,CV);
} 众长addRooms(字符串sroommoveholder,字符串sroom){
ContentValues CV =新ContentValues();
cv.put(KEY_ROOMMOVEHOLDER,sroommoveholder);
cv.put(KEY_ROOM,sroom);
返回ourDatabase.insert(DATABASE_TABLE2,空,CV);
} 众长为addItems(字符串sitemmoveholder,字符串sroomholder,字符串sitemname,字符串sitemvalue){
ContentValues CV =新ContentValues();
cv.put(KEY_ITEMMOVEHOLDER,sitemmoveholder);
cv.put(KEY_ROOMHOLDER,sroomholder);
cv.put(KEY_ITEMNAME,sitemname);
cv.put(KEY_ITEMVALUE,sitemvalue);
返回ourDatabase.insert(DATABASE_TABLE3,空,CV);
} 众长todolist的(字符串内的TodoItem){
ContentValues CV =新ContentValues();
cv.put(内的TodoItem,完成);
返回ourDatabase.insert(DATABASE_TABLE4,空,CV);
} 公共光标getMove(){
的String [] =列新的String [] {KEY_ID1,KEY_MOVENAME};
光标光标= ourDatabase.query(DATABASE_TABLE1,列,NULL,NULL,NULL,NULL,NULL);
返回游标;
} 公共字符串getRoom(字符串R)抛出的SQLException {
字符串ROOMNAME = NULL;
的String [] =列新的String [] {KEY_ID2,KEY_ROOMMOVEHOLDER,KEY_ROOM};
光标C = ourDatabase.query(DATABASE_TABLE2,列KEY_ROOM +=+ R,NULL,NULL,NULL,NULL); 如果(C!= NULL){
c.moveToFirst();
ROOMNAME = c.getString(2);
}
返回ROOMNAME;
}}错误发生,每次我调用这个方法
公共字符串getRoom(字符串R)抛出的SQLException {
字符串ROOMNAME = NULL;
的String [] =列新的String [] {KEY_ID2,KEY_ROOMMOVEHOLDER,KEY_ROOM};
光标C = ourDatabase.query(DATABASE_TABLE2,列KEY_ROOM +=+ R,NULL,NULL,NULL,NULL); 如果(C!= NULL){
c.moveToFirst();
ROOMNAME = c.getString(2);
}
返回ROOMNAME;
}这样做的原因必须是表的声明,但我不知道。我使用亚行的shell检查数据库,我不能看到表存在,并且有它里面的值,而是错误说没有这样的列存在。
解决方案如果
客房
是字符类型(它是根据CREATE_TABLE_2
字符串,其中它定义为文字NOT NULL
),则需要更换:KEY_ROOM +=+ R
与
KEY_ROOM +='+ R +'
你有它的方式,你结束了与查询段:
,其中房= kitchen1
和它的抱怨,有没有
kitchen1
列在该表中,这是正确的。引述它,你最终用正确的:
,其中房间='kitchen1
这会将光标创建行到:
光标C = ourDatabase.query(DATABASE_TABLE2,列,
KEY_ROOM +='+ R +',NULL,NULL,NULL,NULL);
// ^^^^^^^^^^^^^^^^^^^^^^^^^
//改变bitI've been getting this error for two days now, and I can't find the problem with my code.
here's the database code.
SQLHandler.java
import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class SQLHandler { public static final String KEY_ROOMMOVEHOLDER = "roommoveholder"; public static final String KEY_ROOM = "room"; public static final String KEY_ITEMMOVEHOLDER = "itemmoveholder"; public static final String KEY_ITEMNAME = "itemname"; public static final String KEY_ITEMVALUE = "itemvalue"; public static final String KEY_ROOMHOLDER = "roomholder"; public static final String KEY_MOVENAME = "movename"; public static final String KEY_ID1 = "_id"; public static final String KEY_ID2 = "_id"; public static final String KEY_ID3 = "_id"; public static final String KEY_ID4 = "_id"; public static final String KEY_MOVEDATE = "movedate"; private static final String DATABASE_NAME = "mymovingfriend"; private static final int DATABASE_VERSION = 1; public static final String KEY_TODOMOVE = "todomove"; public static final String KEY_SORTANDPURGE = "sortandpurge"; public static final String KEY_RESEARCH = "research"; public static final String KEY_CREATEMOVINGBINDER = "createmovingbinder"; public static final String KEY_ORDERSUPPLIES = "ordersupplies"; public static final String KEY_USEITORLOSEIT = "useitorloseit"; public static final String KEY_TAKEMEASUREMENTS = "takemeasurements"; public static final String KEY_CHOOSEMOVER = "choosemover"; public static final String KEY_BEGINPACKING = "beginpacking"; public static final String KEY_LABEL = "label"; public static final String KEY_SEPARATEVALUES = "separatevalues"; public static final String KEY_DOACHANGEOFADDRESS = "doachangeofaddress"; public static final String KEY_NOTIFYIMPORTANTPARTIES = "notifyimportantparties"; private static final String DATABASE_TABLE1 = "movingname"; private static final String DATABASE_TABLE2 = "movingrooms"; private static final String DATABASE_TABLE3 = "movingitems"; private static final String DATABASE_TABLE4 = "todolist"; public static final String CREATE_TABLE_1 = "CREATE TABLE " + DATABASE_TABLE1 + " (" + KEY_ID1 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_MOVEDATE + " TEXT NOT NULL, " + KEY_MOVENAME + " TEXT NOT NULL);"; public static final String CREATE_TABLE_2 = "CREATE TABLE " + DATABASE_TABLE2 + " (" + KEY_ID2 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_ROOMMOVEHOLDER + " TEXT NOT NULL , " + KEY_ROOM + " TEXT NOT NULL);"; public static final String CREATE_TABLE_3 = "CREATE TABLE " + DATABASE_TABLE3 + " (" + KEY_ID3 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_ITEMNAME + " TEXT NOT NULL, " + KEY_ITEMVALUE + " TEXT NOT NULL, " + KEY_ROOMHOLDER + " TEXT NOT NULL, " + KEY_ITEMMOVEHOLDER + " TEXT NOT NULL);"; public static final String CREATE_TABLE_4 = "CREATE TABLE " + DATABASE_TABLE4 + " (" + KEY_ID4 + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_TODOMOVE + " TEXT NOT NULL, " + KEY_SORTANDPURGE + " TEXT NOT NULL, " + KEY_RESEARCH + " INTEGER NOT NULL, " + KEY_CREATEMOVINGBINDER + " TEXT NOT NULL, " + KEY_ORDERSUPPLIES + " TEXT NOT NULL, " + KEY_USEITORLOSEIT + " TEXT NOT NULL, " + KEY_TAKEMEASUREMENTS + " TEXT NOT NULL, " + KEY_CHOOSEMOVER + " TEXT NOT NULL, " + KEY_BEGINPACKING + " TEXT NOT NULL, " + KEY_LABEL + " TEXT NOT NULL, " + KEY_SEPARATEVALUES + " TEXT NOT NULL, " + KEY_DOACHANGEOFADDRESS + " TEXT NOT NULL, " + KEY_NOTIFYIMPORTANTPARTIES + " TEXT NOT NULL);"; private DbHelper ourHelper; private final Context ourContext; private SQLiteDatabase ourDatabase; private static class DbHelper extends SQLiteOpenHelper{ public DbHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub db.execSQL(CREATE_TABLE_1); db.execSQL(CREATE_TABLE_2); db.execSQL(CREATE_TABLE_3); db.execSQL(CREATE_TABLE_4); } @Override public void onUpgrade(SQLiteDatabase db, int oldversion, int newversion) { // TODO Auto-generated method stub db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE1); db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE2); db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE3); db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE4); onCreate(db); } } public SQLHandler(Context c){ ourContext = c; } public SQLHandler open() throws SQLException{ ourHelper = new DbHelper(ourContext); ourDatabase = ourHelper.getWritableDatabase(); return this; } public void close(){ ourHelper.close(); } public long createMove(String smovename){ ContentValues cv = new ContentValues(); cv.put(KEY_MOVENAME, smovename); cv.put(KEY_MOVEDATE, "Not yet set"); return ourDatabase.insert(DATABASE_TABLE1, null, cv); } public long addRooms(String sroommoveholder, String sroom){ ContentValues cv = new ContentValues(); cv.put(KEY_ROOMMOVEHOLDER, sroommoveholder); cv.put(KEY_ROOM, sroom); return ourDatabase.insert(DATABASE_TABLE2, null, cv); } public long addItems(String sitemmoveholder, String sroomholder, String sitemname, String sitemvalue){ ContentValues cv = new ContentValues(); cv.put(KEY_ITEMMOVEHOLDER, sitemmoveholder); cv.put(KEY_ROOMHOLDER, sroomholder); cv.put(KEY_ITEMNAME, sitemname); cv.put(KEY_ITEMVALUE, sitemvalue); return ourDatabase.insert(DATABASE_TABLE3, null, cv); } public long todoList(String todoitem){ ContentValues cv = new ContentValues(); cv.put(todoitem, "Done"); return ourDatabase.insert(DATABASE_TABLE4, null, cv); } public Cursor getMove(){ String[] columns = new String[]{KEY_ID1, KEY_MOVENAME}; Cursor cursor = ourDatabase.query(DATABASE_TABLE1, columns, null, null, null, null, null); return cursor; } public String getRoom(String r) throws SQLException{ String roomName = null; String[] columns = new String[]{KEY_ID2, KEY_ROOMMOVEHOLDER, KEY_ROOM}; Cursor c = ourDatabase.query(DATABASE_TABLE2, columns, KEY_ROOM + "=" + r , null, null, null, null); if (c != null) { c.moveToFirst(); roomName = c.getString(2); } return roomName; } }
the error occurs everytime i call this method
public String getRoom(String r) throws SQLException{ String roomName = null; String[] columns = new String[]{KEY_ID2, KEY_ROOMMOVEHOLDER, KEY_ROOM}; Cursor c = ourDatabase.query(DATABASE_TABLE2, columns, KEY_ROOM + "=" + r , null, null, null, null); if (c != null) { c.moveToFirst(); roomName = c.getString(2); } return roomName; }
the reason for this must be the declaration of the table, but I'm not sure. I checked the database using adb shell and i can't see the table exists and has a value inside it but the error says no such column exist.
解决方案If
room
is a character type (and it is, according to theCREATE_TABLE_2
string where it's defined asTEXT NOT NULL
), you need to replace:KEY_ROOM + "=" + r
with:
KEY_ROOM + "= '" + r + "'"
The way you have it, you're ending up with the query segment:
where room = kitchen1
and it's complaining that there's no
kitchen1
column in that table, rightly so.By quoting it, you end up with the correct:
where room = 'kitchen1'
This will turn the cursor creation line into:
Cursor c = ourDatabase.query(DATABASE_TABLE2, columns, KEY_ROOM + "='" + r + "'", null, null, null, null); // ^^^^^^^^^^^^^^^^^^^^^^^^^ // Changed bit
这篇关于SQLite的返回:错误code = 1,味精=没有这样的列:kitchen1的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!