cursor.movetofirst()始终返回false



我在这里搜索了一段时间,没有任何帮助。我想这很简单,我在做一些愚蠢的事情。因此,我有此数据库helper确实创建一个表并在其上放两个值:

public class DatabaseHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "db";
    public static final String PROPERTY = "property";
    public static final String VALUE = "value";
    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, 1);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE configs (property VARCHAR(15), value VARCHAR(10));");
    
        ContentValues cv=new ContentValues();
        
        cv.put(PROPERTY, "registered");
        cv.put(VALUE, "true");
        db.insert("configs", PROPERTY, cv);
        
        cv.put(PROPERTY, "test");
        cv.put(VALUE, "test");
        db.insert("configs", PROPERTY, cv);
    }
}

在我的活动中,我正在尝试:

@Override
public void onCreate (Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.register);
    
    layout = (LinearLayout) findViewById(R.id.layoutRegister);
    
    db = (new DatabaseHelper(this)).getWritableDatabase();
    cursor = db.rawQuery("SELECT * FROM configs", 
            null);
    
    if (cursor.moveToFirst()) {
        debug = new TextView(this);
        debug.setText(cursor.getString(cursor.getColumnIndex("property")));
        layout.addView(debug);
    }
}

,它永远不会进入IF。此外,当我尝试Cursor.getCount()之类的东西时,我会得到 android.content.res.res.res.resource $ notfoundexception:String Resource ID#0x0

我猜这是一个简单的错误,但是...有任何帮助吗?

我了解的是,当光标具有值时,您想设置文本,因此您可以简单地做到这一点...

cursor = db.rawQuery("SELECT * FROM configs", null);
    if (cursor!=null && cursor.getCount()>0) {
        cursor.moveToFirst();
        debug = new TextView(this);
        debug.setText(cursor.getString(cursor.getColumnIndex("property")));
        layout.addView(debug);
    }

和大约

when I try something like cursor.getCount() I get a android.content.res.Resource$NotFoundException: String resource ID #0x0

这是因为当您使用textView的 setText()时,因此,如果您将参数传递为整数,则它将查看r.class文件,因此,如果要将文本设置为Integer,则可以执行类似...

debug.setText(""+cursor.getCount());

 debug.setText(String.valueOf(cursor.getCount()));

如果要查询使用 getReadabledatabase 不是 getWritabledatabase

和始终 cursor.close();

使用此

cv.put(property, "registered");
cv.put(value, "true");

cv.put(property, "test");
cv.put(value, "test");

而不是

cv.put(PROPERTY, "registered");
cv.put(VALUE, "true");

cv.put(PROPERTY, "test");
cv.put(VALUE, "test");

最新更新