Android SQlite 数据库游标列-1 获取时出错
Android SQlite Database cursor column -1 error when fetching
错误“E/CursorWindow:无法从具有 1 行 9 列的 CursorWindow 读取第 0 行第 -1 列。”
我将数据存储在数据库中,然后发送到服务器,代码如下
这是数据库 Tables
public static final String Table_NAME_5 ="_5";
public static final String COLUMN_ID_5 = "SNo";
public static final String COLUMN_Image_5 = "image";
public static final String COLUMN_SiteID_5 = "siteid";
public static final String COLUMN_FUserId_5 = "fuserid";
public static final String COLUMN_CategoryId_5 ="categoryid";
public static final String COLUMN_ID_SubCategoryId_5 = "subcategoryid";
public static final String COLUMN_ChkPointsId_5 = "chkpointid";
public static final String COLUMN_Rating_5 = "rating";
public static final String COLUMN_Remark_5 = "remark";
public static final String Table_NAME_6 ="_6";
public static final String COLUMN_ID_6 =" SNo";
public static final String COLUMN_Image_6 =" image";
public static final String COLUMN_SiteID_6 ="siteid";
public static final String COLUMN_FUserId_6 ="fuserid";
public static final String COLUMN_CategoryId_6 ="categoryid";
public static final String COLUMN_ID_SubCategoryId_6 ="subcategoryid";
public static final String COLUMN_ChkPointsId_6 =" chkpointid";
public static final String COLUMN_Rating_6 ="rating";
public static final String COLUMN_Remark_6 ="remark";
String CREATE_ITEM_TABLE5 = "CREATE TABLE " + Table_NAME_5 + "(" + COLUMN_ID_5 + " INTEGER PRIMARY KEY," + COLUMN_Image_5 + " TEXT," + COLUMN_SiteID_5 + " TEXT," + COLUMN_FUserId_5 + " TEXT," + COLUMN_CategoryId_5 + " TEXT," + COLUMN_ID_SubCategoryId_5 + " TEXT," + COLUMN_ChkPointsId_5 + " TEXT," + COLUMN_Rating_5 + " TEXT," + COLUMN_Remark_5 + " TEXT)";
db.execSQL(CREATE_ITEM_TABLE5);
String CREATE_ITEM_TABLE6 = "CREATE TABLE " + Table_NAME_6 + "(" + COLUMN_ID_6 + " INTEGER PRIMARY KEY," + COLUMN_Image_6 + " TEXT," + COLUMN_SiteID_6 + " TEXT," + COLUMN_FUserId_6 + " TEXT," + COLUMN_CategoryId_6 + " TEXT," + COLUMN_ID_SubCategoryId_6 + " TEXT," + COLUMN_ChkPointsId_6 + " TEXT," + COLUMN_Rating_6 + " TEXT," + COLUMN_Remark_6 + " TEXT)";
db.execSQL(CREATE_ITEM_TABLE6);
我在这里插入两个 tables
myDB.Insertdata5(imageCode5,site_id,user_id,category_id,sub_category_id,check_poind_id,rating_five,Remark5);
myDB.Insertdata6(imageCode1,site_id,user_id,category_id,sub_category_id,check_poind_id,rating_one,Remark1);
我在这里从数据库中获取它(错误在这里)
public String Table5 () {
String R = "NOT EMPTY";
DatabaseHandler myDB = new DatabaseHandler(getApplicationContext());
SQLiteDatabase sqLiteDatabaseObj = myDB.getWritableDatabase();
long count1 = DatabaseUtils.queryNumEntries(sqLiteDatabaseObj, DatabaseHandler.Table_NAME_5);
if (count1 > 0) {
for (long i = 1; i <= count1; i++) {
count1 = DatabaseUtils.queryNumEntries(sqLiteDatabaseObj, DatabaseHandler.Table_NAME_5);
Cursor cursor = sqLiteDatabaseObj.query(myDB.Table_NAME_5, null, myDB.COLUMN_ID_5 + "=?", new String[]{String.valueOf(i)}, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
do {
Senddata5(cursor.getString(cursor.getColumnIndex(myDB.COLUMN_Image_5)), cursor.getString(cursor.getColumnIndex(myDB.COLUMN_SiteID_5)),
cursor.getString(cursor.getColumnIndex(myDB.COLUMN_FUserId_5)), cursor.getString(cursor.getColumnIndex(myDB.COLUMN_CategoryId_5)), cursor.getString(cursor.getColumnIndex(myDB.COLUMN_ID_SubCategoryId_5)), "5", cursor.getString(cursor.getColumnIndex(myDB.COLUMN_Rating_5)), cursor.getString(cursor.getColumnIndex(myDB.COLUMN_Remark_5)));
if (i == count1&& i== res_sucess5) {
myDB.RefreshTable5();
R = "EMPTY";
} else {
R = "NOT EMPTY";
}
}
while (cursor.moveToNext());
}
cursor.close();
}
}
else{ R = "EMPTY";} myDB.close(); return R;
}
public String Table6 () {
String R = "NOT EMPTY";
DatabaseHandler myDB = new DatabaseHandler(getApplicationContext());
SQLiteDatabase sqLiteDatabaseObj = myDB.getWritableDatabase();
long count1 = DatabaseUtils.queryNumEntries(sqLiteDatabaseObj, DatabaseHandler.Table_NAME_6);
if (count1 > 0) {
for (long i = 1; i <= count1; i++) {
count1 = DatabaseUtils.queryNumEntries(sqLiteDatabaseObj, DatabaseHandler.Table_NAME_6);
Cursor cursor = sqLiteDatabaseObj.query(myDB.Table_NAME_6, null, myDB.COLUMN_ID_6 + "=?", new String[]{String.valueOf(i)}, null, null, null);
boolean cur = cursor.moveToFirst();
Log.e("Optiontwo", String.valueOf(cur));
if (cursor != null && cursor.moveToFirst()) {
do {
Senddata6(cursor.getString(cursor.getColumnIndex(myDB.COLUMN_Image_6)), cursor.getString(cursor.getColumnIndex(myDB.COLUMN_SiteID_6)),
cursor.getString(cursor.getColumnIndex(myDB.COLUMN_FUserId_6)), cursor.getString(cursor.getColumnIndex(myDB.COLUMN_CategoryId_6)), cursor.getString(cursor.getColumnIndex(myDB.COLUMN_ID_SubCategoryId_6)), "6", cursor.getString(cursor.getColumnIndex(myDB.COLUMN_Rating_6)), cursor.getString(cursor.getColumnIndex(myDB.COLUMN_Remark_6)));
if (i == count1&& i== res_sucess6) {
myDB.RefreshTable6();
R = "EMPTY";
} else {
R = "NOT EMPTY";
}
}
while (cursor.moveToNext());
}
cursor.close();
}
}
else{ R = "EMPTY";} myDB.close(); return R;
}
'''
Table 5 工作正常,但 table 6 在获取 COLUMN_Image_6 时出错。
错误是当我获取 cursor.getString(cursor.getColumnIndex(myDB.COLUMN_Image_6)) 只有当我删除这个 "cursor.getString(cursor.getColumnIndex(myDB.COLUMN_Image_6))" 那么其他列的所有值都可以正常获取。 Column_image 是 Base64 字符串我也试过 BLOB byte[] 但同样的问题。为什么它适用于 table 5 但不适用于 table 6.
我得到的错误是“java.lang.IllegalStateException:无法从 CursorWindow 读取第 0 行,col -1。确保在从 Cursor 访问数据之前正确初始化 Cursor。”
所以正如 MIKE M 指出的那样,问题是在列名之前 space。问题解决了。
错误“E/CursorWindow:无法从具有 1 行 9 列的 CursorWindow 读取第 0 行第 -1 列。”
我将数据存储在数据库中,然后发送到服务器,代码如下
这是数据库 Tables
public static final String Table_NAME_5 ="_5";
public static final String COLUMN_ID_5 = "SNo";
public static final String COLUMN_Image_5 = "image";
public static final String COLUMN_SiteID_5 = "siteid";
public static final String COLUMN_FUserId_5 = "fuserid";
public static final String COLUMN_CategoryId_5 ="categoryid";
public static final String COLUMN_ID_SubCategoryId_5 = "subcategoryid";
public static final String COLUMN_ChkPointsId_5 = "chkpointid";
public static final String COLUMN_Rating_5 = "rating";
public static final String COLUMN_Remark_5 = "remark";
public static final String Table_NAME_6 ="_6";
public static final String COLUMN_ID_6 =" SNo";
public static final String COLUMN_Image_6 =" image";
public static final String COLUMN_SiteID_6 ="siteid";
public static final String COLUMN_FUserId_6 ="fuserid";
public static final String COLUMN_CategoryId_6 ="categoryid";
public static final String COLUMN_ID_SubCategoryId_6 ="subcategoryid";
public static final String COLUMN_ChkPointsId_6 =" chkpointid";
public static final String COLUMN_Rating_6 ="rating";
public static final String COLUMN_Remark_6 ="remark";
String CREATE_ITEM_TABLE5 = "CREATE TABLE " + Table_NAME_5 + "(" + COLUMN_ID_5 + " INTEGER PRIMARY KEY," + COLUMN_Image_5 + " TEXT," + COLUMN_SiteID_5 + " TEXT," + COLUMN_FUserId_5 + " TEXT," + COLUMN_CategoryId_5 + " TEXT," + COLUMN_ID_SubCategoryId_5 + " TEXT," + COLUMN_ChkPointsId_5 + " TEXT," + COLUMN_Rating_5 + " TEXT," + COLUMN_Remark_5 + " TEXT)";
db.execSQL(CREATE_ITEM_TABLE5);
String CREATE_ITEM_TABLE6 = "CREATE TABLE " + Table_NAME_6 + "(" + COLUMN_ID_6 + " INTEGER PRIMARY KEY," + COLUMN_Image_6 + " TEXT," + COLUMN_SiteID_6 + " TEXT," + COLUMN_FUserId_6 + " TEXT," + COLUMN_CategoryId_6 + " TEXT," + COLUMN_ID_SubCategoryId_6 + " TEXT," + COLUMN_ChkPointsId_6 + " TEXT," + COLUMN_Rating_6 + " TEXT," + COLUMN_Remark_6 + " TEXT)";
db.execSQL(CREATE_ITEM_TABLE6);
我在这里插入两个 tables
myDB.Insertdata5(imageCode5,site_id,user_id,category_id,sub_category_id,check_poind_id,rating_five,Remark5);
myDB.Insertdata6(imageCode1,site_id,user_id,category_id,sub_category_id,check_poind_id,rating_one,Remark1);
我在这里从数据库中获取它(错误在这里)
public String Table5 () {
String R = "NOT EMPTY";
DatabaseHandler myDB = new DatabaseHandler(getApplicationContext());
SQLiteDatabase sqLiteDatabaseObj = myDB.getWritableDatabase();
long count1 = DatabaseUtils.queryNumEntries(sqLiteDatabaseObj, DatabaseHandler.Table_NAME_5);
if (count1 > 0) {
for (long i = 1; i <= count1; i++) {
count1 = DatabaseUtils.queryNumEntries(sqLiteDatabaseObj, DatabaseHandler.Table_NAME_5);
Cursor cursor = sqLiteDatabaseObj.query(myDB.Table_NAME_5, null, myDB.COLUMN_ID_5 + "=?", new String[]{String.valueOf(i)}, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
do {
Senddata5(cursor.getString(cursor.getColumnIndex(myDB.COLUMN_Image_5)), cursor.getString(cursor.getColumnIndex(myDB.COLUMN_SiteID_5)),
cursor.getString(cursor.getColumnIndex(myDB.COLUMN_FUserId_5)), cursor.getString(cursor.getColumnIndex(myDB.COLUMN_CategoryId_5)), cursor.getString(cursor.getColumnIndex(myDB.COLUMN_ID_SubCategoryId_5)), "5", cursor.getString(cursor.getColumnIndex(myDB.COLUMN_Rating_5)), cursor.getString(cursor.getColumnIndex(myDB.COLUMN_Remark_5)));
if (i == count1&& i== res_sucess5) {
myDB.RefreshTable5();
R = "EMPTY";
} else {
R = "NOT EMPTY";
}
}
while (cursor.moveToNext());
}
cursor.close();
}
}
else{ R = "EMPTY";} myDB.close(); return R;
}
public String Table6 () {
String R = "NOT EMPTY";
DatabaseHandler myDB = new DatabaseHandler(getApplicationContext());
SQLiteDatabase sqLiteDatabaseObj = myDB.getWritableDatabase();
long count1 = DatabaseUtils.queryNumEntries(sqLiteDatabaseObj, DatabaseHandler.Table_NAME_6);
if (count1 > 0) {
for (long i = 1; i <= count1; i++) {
count1 = DatabaseUtils.queryNumEntries(sqLiteDatabaseObj, DatabaseHandler.Table_NAME_6);
Cursor cursor = sqLiteDatabaseObj.query(myDB.Table_NAME_6, null, myDB.COLUMN_ID_6 + "=?", new String[]{String.valueOf(i)}, null, null, null);
boolean cur = cursor.moveToFirst();
Log.e("Optiontwo", String.valueOf(cur));
if (cursor != null && cursor.moveToFirst()) {
do {
Senddata6(cursor.getString(cursor.getColumnIndex(myDB.COLUMN_Image_6)), cursor.getString(cursor.getColumnIndex(myDB.COLUMN_SiteID_6)),
cursor.getString(cursor.getColumnIndex(myDB.COLUMN_FUserId_6)), cursor.getString(cursor.getColumnIndex(myDB.COLUMN_CategoryId_6)), cursor.getString(cursor.getColumnIndex(myDB.COLUMN_ID_SubCategoryId_6)), "6", cursor.getString(cursor.getColumnIndex(myDB.COLUMN_Rating_6)), cursor.getString(cursor.getColumnIndex(myDB.COLUMN_Remark_6)));
if (i == count1&& i== res_sucess6) {
myDB.RefreshTable6();
R = "EMPTY";
} else {
R = "NOT EMPTY";
}
}
while (cursor.moveToNext());
}
cursor.close();
}
}
else{ R = "EMPTY";} myDB.close(); return R;
}
'''
Table 5 工作正常,但 table 6 在获取 COLUMN_Image_6 时出错。 错误是当我获取 cursor.getString(cursor.getColumnIndex(myDB.COLUMN_Image_6)) 只有当我删除这个 "cursor.getString(cursor.getColumnIndex(myDB.COLUMN_Image_6))" 那么其他列的所有值都可以正常获取。 Column_image 是 Base64 字符串我也试过 BLOB byte[] 但同样的问题。为什么它适用于 table 5 但不适用于 table 6.
我得到的错误是“java.lang.IllegalStateException:无法从 CursorWindow 读取第 0 行,col -1。确保在从 Cursor 访问数据之前正确初始化 Cursor。”
所以正如 MIKE M 指出的那样,问题是在列名之前 space。问题解决了。