我正在开发一个SQLite程序,并显示一条错误消息
int i = 0;
int j = 0;
for (i = 0; i < lungDR; i++) { valDreapta[i] = input[i + mijloc + 1]; }
for (i = 0; i < lunST; i++) { valStanga[i] = input[i + stanga]; } // fix
i = 0;
j = 0;
for (int k = stanga; k <= dreapta; k++) // fix
{
if (valStanga[i] <= valDreapta[j])
W / ActivityManager:强制完成活动com.example.xyz.sqlitelist / .MainActivity
2019-07-14 21:07:37.465 13538-13538/? E/CursorWindow: Failed to read row 0, column -1 from a CursorWindow which has 1 rows, 2 columns.
2019-07-14 21:07:37.466 13538-13538/? D/AndroidRuntime: Shutting down VM
2019-07-14 21:07:37.467 13538-13538/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.xyz.sqlitelist, PID: 13538
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.xyz.sqlitelist/com.example.xyz.sqlitelist.MainActivity}: java.lang.IllegalStateException:
Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
.
.
Caused by: java.lang.IllegalStateException: Couldn't read row 0, col -1 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it.
答案 0 :(得分:0)
您可以更改代码
String sql = " SELECT * FROM " + TABLE_PRODUCTS + " WHERE 1";
Cursor c = getWritableDatabase().rawQuery(sql, null);
while (c.moveToNext()) {
if(c.getString(c.getColumnIndex("productname")) != null)
{
dbString.append(c.getString(c.getColumnIndex("productname")));
dbString.append("\n");
}
}
c.close();
db.close();
return dbString.toString();
答案 1 :(得分:0)
您的列名称是“ _productname”而不是“ productname”,并且可以通过不对名称进行硬编码来解决此问题,因为您可以在变量COLUMN_PRODUCTNAME
中使用它。
同样,您的代码也会丢失行,因为仅在需要moveToFirst()
时您错误地使用了moveToNext()
,isAfterLast()
和moveToNext()
:
String databaseToString() {
StringBuilder dbString = new StringBuilder();
SQLiteDatabase db = getWritableDatabase();
String query = "SELECT * FROM " + TABLE_PRODUCTS + " WHERE 1";
Cursor c = db.rawQuery(query, null);
int index = c.getColumnIndex(COLUMN_PRODUCTNAME);
while (c.moveToNext()) {
dbString.append(c.getString(index)).append("\n");
}
c.close();
db.close();
return dbString.toString();
}
除非您以后想要将其更改为有意义的内容,否则不需要sql语句中的WHERE 1
。