sqlite查询失败-没有这样的列 [英] sqlite query failing - no such column

查看:127
本文介绍了sqlite查询失败-没有这样的列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个这样创建的数据库...

I have a db that is created like this...

public class DataBaseManager extends SQLiteOpenHelper{

    Context mContext;
    private static final String TAG = "DataBaseManager";
    private static final int dbVersion = 1;// ++ for DB  changes

    static final String dbName ="LCInstore";
    //Table Names
    static final String allIcons = "Icons";
    static final String allScreens = "Screens";
    static final String isLookUp = "LookUp";

    //Column Names - LookUp
    static final String colIconID = "IconID";
    static final String colScreenID = "ScreenID";
    static final String colRank = "Rank"; // order

    //Column Names shared by tables: Screens and Icons
    static final String colID = "ID";
    static final String colType = "Type";
    static final String colName = "Name";

    //Column Names - Icons
    static final String colImage = "Image";
    static final String colLabel = "Label";
    static final String colIntent = "Intent";
    static final String colIParams = "Params";


    public DataBaseManager(Context context) {
        super(context, dbName, null, dbVersion); 
        mContext = context;
        Log.v(TAG, "Initaited");

        // TODO Auto-generated constructor stub
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        Log.v(TAG, "on create called");

        // Create Icon Table if does not exist
         db.execSQL("CREATE TABLE "+ allIcons +"" +
                "("+colID + " INTEGER PRIMARY KEY AUTOINCREMENT, "+
                    colName + " TEXT," +
                    colImage + " BLOB," +
                    colLabel + " TEXT," +
                    colIntent + " TEXT," +
                    colType + " TEXT)");

        // Create Screens Table if does not exist
         db.execSQL("CREATE TABLE IF NOT EXISTS " + allScreens +"" +
                 "("+colID + " INTEGER PRIMARY KEY AUTOINCREMENT, "+
                    colName + " TEXT," +
                    colType + " TEXT)");

        //Create LookUp Table if does not exist
         db.execSQL("CREATE TABLE IF NOT EXISTS " + isLookUp +"" +
                 "("+colIconID + " INTEGER, "+
                    colScreenID + " INTEGER," +
                    colRank + " INTEGER)");

         InsertInitData(db);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        Log.v(TAG, "on upgrade called");
        //db.execSQL("DROP TABLE IF EXISTS "+allIcons);




    }


    private void InsertInitData(SQLiteDatabase db) {
        //screens
        ContentValues cv2=new ContentValues();
            cv2.put(colName, "DR_Home");
            cv2.put(colType, "dr_home");
            db.insert(allScreens, colID, cv2);
            cv2.put(colName, "DR_Sub");
            cv2.put(colType, "dr_sub");
            db.insert(allScreens, colID, cv2);

            //all Icons
        ContentValues cv=new ContentValues();

           cv.put(colName, "Icon1");
           cv.put(colImage, getBlobFromRes(R.drawable.dr_tablet_icon));
           cv.put(colLabel, "MY ICON 1");
           cv.put(colIntent, "someIntent");
           cv.put(colType, "generic");
           db.insert(allIcons, colID, cv);

           cv.put(colName, "Icon2");
           cv.put(colImage, getBlobFromRes(R.drawable.dr_tablet_icon));
           cv.put(colLabel, "MY ICON 2");
           cv.put(colIntent, "someIntent");
           cv.put(colType, "generic");
           db.insert(allIcons, colID, cv);

           cv.put(colName, "Icon3");
           cv.put(colImage, getBlobFromRes(R.drawable.dr_tablet_icon));
           cv.put(colLabel, "MY ICON 3");
           cv.put(colIntent, "someIntent");
           cv.put(colType, "generic");
           db.insert(allIcons, colID, cv);

           cv.put(colName, "Icon4");
           cv.put(colImage, getBlobFromRes(R.drawable.dr_tablet_icon));
           cv.put(colLabel, "MY ICON 4");
           cv.put(colIntent, "someIntent");
           cv.put(colType, "generic");
           db.insert(allIcons, colID, cv);

           cv.put(colName, "Icon5");
           cv.put(colImage, getBlobFromRes(R.drawable.dr_tablet_icon));
           cv.put(colLabel, "MY ICON 5");
           cv.put(colIntent, "someIntent");
           cv.put(colType, "generic");
           db.insert(allIcons, colID, cv);

           cv.put(colName, "Icon6");
           cv.put(colImage, getBlobFromRes(R.drawable.dr_tablet_icon));
           cv.put(colLabel, "MY ICON 6");
           cv.put(colIntent, "someIntent");
           cv.put(colType, "generic");
           db.insert(allIcons, colID, cv);

           cv.put(colName, "Icon7");
           cv.put(colImage, getBlobFromRes(R.drawable.dr_tablet_icon));
           cv.put(colLabel, "MY ICON 7");
           cv.put(colIntent, "someIntent");
           cv.put(colType, "generic");
           db.insert(allIcons, colID, cv);



        // icon screen lookups
        ContentValues cv3=new ContentValues();
            cv3.put(colIconID, 1);
            cv3.put(colScreenID, 2);
            cv3.put(colRank, 1);
            db.insert(isLookUp, colID, cv3);

            cv3.put(colIconID, 2);
            cv3.put(colScreenID, 2);
            cv3.put(colRank, 2);
            db.insert(isLookUp, colID, cv3);

            cv3.put(colIconID, 3);
            cv3.put(colScreenID, 2);
            cv3.put(colRank, 3);
            db.insert(isLookUp, colID, cv3);

            cv3.put(colIconID, 4);
            cv3.put(colScreenID, 2);
            cv3.put(colRank, 4);
            db.insert(isLookUp, colID, cv3);

            cv3.put(colIconID, 5);
            cv3.put(colScreenID, 2);
            cv3.put(colRank, 5);
            db.insert(isLookUp, colID, cv3);

            cv3.put(colIconID, 6);
            cv3.put(colScreenID, 2);
            cv3.put(colRank, 6);
            db.insert(isLookUp, colID, cv3);

            cv3.put(colIconID, 7);
            cv3.put(colScreenID, 2);
            cv3.put(colRank, 7);
            db.insert(isLookUp, colID, cv3);

    }

您会注意到,一个表"allScreens"或"Screens"具有一行,我在名称"列中放置了"DR_Home"

you'll notice that one table, 'allScreens' or "Screens" has one row that in the Name column i am putting "DR_Home"

稍后,我进行查询以使用该方法找出该行的ID列的值,并将 DR_Home 传递给它:

i do a query later to find out the value of the ID column of that row using this method and passing DR_Home to it:

public int getScreenID(String name){
        SQLiteDatabase db=this.getReadableDatabase();
        int sID;
        String selectQuery = "SELECT "+colID+ " FROM " + allScreens + " WHERE " + colName + "=" +name;
        Cursor c = db.rawQuery(selectQuery, null);
        sID = c.getInt(0);
        c.close();
        return sID;
    }

应返回ID列的值,但出现错误:

should return the value of the ID column but i am getting an error:

03-22 06:34:35.830: E/AndroidRuntime(29864): Caused by: android.database.sqlite.SQLiteException: no such column: DR_Home: , while compiling: select * from Screens WHERE Name=DR_Home

没有这样的专栏吗?我没有要求一个名为DR_Home的列,而是在Name列= DR_home的行中要求ID列的值.至少那是我的想法..我在某个地方弄乱了语法..请帮助

No such Column? im not asking for a column called DR_Home i am asking for the value of the ID column in the row where the Name column = DR_home.. at least thats what i thought.. i have messed up the syntax somewhere.. please help

推荐答案

您的查询错误,因为 WHERE column = string 无效.

Your query is wrong, as WHERE column = string will not work.

String selectQuery = "SELECT "+colID+ " FROM " + allScreens + " WHERE " + colName + "=?";
Cursor c = db.rawQuery(selectQuery, new String[] {name});

使用?,它将被第二个 rawQuery()参数替换.强烈推荐.

Use ? which will be replaced by the second rawQuery() parameter. Strongly recommended.

不推荐: WHERE column ="string"

这篇关于sqlite查询失败-没有这样的列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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