在Sqlite数据库中搜索具有id的列

时间:2015-09-19 08:46:37

标签: android

我想使用id搜索列 该函数将返回该特定行中的所有值。

这是我的代码和日志。

LOG

09-19 14:00:54.940      618-618/? **I/SqliteDatabaseCpp﹕ sqlite returned: error code = 1, msg = table IUBConnectivitydata already exists, db=/data/data/com.example.sivs.datacopy/databases/**
09-19 14:00:54.970      618-618/? E/SQLiteOpenHelper﹕ Couldn't open Database1 for writing (will try read-only):  

代码:

 public Cursor Rowdata(String a){
        SQLiteDatabase db=this.getReadableDatabase();
        Log.d("a4","aaa34");
        Cursor cursor1=db.rawQuery("SELECT "+COL_3+", FROM" + TABLE_NAME + "where WBTSID==?",new String[] {a});
        Log.d("a3","row");
        return cursor1;
    }

3 个答案:

答案 0 :(得分:1)

你在FROM之前添加了一个额外的逗号,一个额外的=之前?并忘记了表名周围的2个空格。

错:

db.rawQuery("SELECT "+COL_3+", FROM" + TABLE_NAME + "where WBTSID==?",new String[] {a});

右:

db.rawQuery("SELECT "+COL_3+" FROM " + TABLE_NAME + " where WBTSID=?",new String[] {a});

答案 1 :(得分:0)

我建议只有一个全局数据库助手类实例,它可以位于扩展的应用程序类中。辅助类本身必须包含SQLiteDatabase的实例,它是实际的数据库对象。

然后你不必担心可能相互锁定的多个实例。

它看起来像这样:

public MyClass extends Application {
    private MyDBHelper db;
    public MyDBHelper getDB() {
        if (database == null) {
            db = new MyDBHelper(this);
        }
        db.open(); // call getWritableDataBase internally
        return db;
    }
}

如果您在SqlLiteHelpers onCreate()回调中创建数据库,那么只应在安装后第一次打开应用程序时创建它。

在SqlLitehelper的onOpen()回调中,您可以使用setForeignKeyConstrainsEnabled(true)激活外键约束,这是一项重要的安全功能。您必须使用REFERS()子句声明外键。

编辑:也可以创建同步的静态实例(如下面的注释中所述)。无论如何,您必须确保只存在数据库帮助程序类的一个实例,并且只存在数据库本身的一个实例。 (必须位于数据库助手类中)

答案 2 :(得分:0)

尝试以下,

if (c.moveToFirst()){ 
   do{ 
       id = c.getInt(c.getColumnIndex("_id"));
   }while(cursor.moveToNext());
}

c是所有数据的光标。