Hol*_*lly 12 java sql database sqlite android
编辑,根据下面的答案稍微改变了代码,但仍然没有工作.我还添加了一条日志消息,告诉我getCount是否返回> 0,它是,所以我认为我的查询可能有问题?或者我使用光标..
我已经创建了一个表,我想检查它是否为空,如果它是空的,我想运行一些插入语句(存储在数组中).
下面是我的代码,虽然我没有错误,当我拉出.db文件时,我可以看到它不起作用.你会如何解决这个问题?
public void onCreate(SQLiteDatabase db) {
Log.i("DB onCreate", "Creating the database...");//log message
db.execSQL(createCATBUDTAB);
db.execSQL(createTWOWEETAB);
try{
Cursor cur = db.rawQuery("SELECT COUNT(*) FROM CAT_BUD_TAB", null);
if (cur.getCount() > 0){
Log.i("DB getCount", " getcount greater than 0");//log message
//do nothing everything's as it should be
}
else{//put in these insert statements contained in the array
Log.i("DB getCount", " getcount less than 0, should read array");//log message
for(int i=0; i<13; i++){
db.execSQL(catInsertArray[i]);
}
}
}catch(SQLiteException e){System.err.println("Exception @ rawQuery: " + e.getMessage());}
}
Run Code Online (Sandbox Code Playgroud)
对不起,如果这是一个非常愚蠢的问题或方法,我对这一切都是新手.任何答案非常感谢!
pax*_*blo 31
SELECT COUNT(*)对现有表的查询永远不应返回null.如果表中没有行,则应返回包含值零的一行.
相反,具有非零值的行表示它不为空.
在这两种情况下,都应返回一行,这意味着它将始终通过
//do nothing everything's as it should be
Run Code Online (Sandbox Code Playgroud)
部分.
要修复它,请按原样保留您的查询(您不希望这样做select column_name只是因为这是不必要的,可能效率不高).保留它select count(*),它将始终返回一行,并使用以下代码(仅在我的头部测试,所以要小心):
Cursor cur = db.rawQuery("SELECT COUNT(*) FROM CAT_BUD_TAB", null);
if (cur != null) {
cur.moveToFirst(); // Always one row returned.
if (cur.getInt (0) == 0) { // Zero count means empty table.
for (int i = 0; i < 13; i++) {
db.execSQL (catInsertArray[i]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
该rawQuery回报Cursor其定位在第一项之前的对象(见更多信息在这里)
SELECT COUNT(*)总是会返回一个结果(考虑到表存在)
所以我会这样做:
if (cur != null){
cur.moveToFirst();
if (cur.getInt(0) == 0) {
// Empty
}
}
Run Code Online (Sandbox Code Playgroud)
正如paxdiablo所说,游标不会为空.你能做的就是尝试这样:
if (cur != null && cur.getCount() > 0){
// do nothing, everything's as it should be
}
Run Code Online (Sandbox Code Playgroud)
编辑
实际上我使用了db.query(),它对我有用.我这样做了
cursor = db.query(TABLE_NAME, new String[] { KEY_TYPE }, null, null, null, null, null);
if (cursor != null && cursor.getCount() > 0)
{
retVal = true;
}
Run Code Online (Sandbox Code Playgroud)
TABLE_NAME是我的表,KEY_TYPE是我的列名
| 归档时间: |
|
| 查看次数: |
42813 次 |
| 最近记录: |