SQLite的返回:错误code = 1,味精=没有这样的列:kitchen1 [英] sqlite returned: error code = 1, msg = no such column:kitchen1

查看:273
本文介绍了SQLite的返回:错误code = 1,味精=没有这样的列: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);
// ^^^^^^^^^^^^^^^^^^^^^^^^^
//改变bit

I'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 the CREATE_TABLE_2 string where it's defined as TEXT 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆