gpt4 book ai didi

java - 在访问游标中的数据之前,请确保游标已正确初始化。 sql 安卓

转载 作者:行者123 更新时间:2023-12-01 09:54:06 24 4
gpt4 key购买 nike

public class recordd extends Activity{


Button b;
int count;
String date;
Record record;
SQLiteDatabase db;
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.record);

int calo =getIntent().getIntExtra("cal", 0);

TextView TEXT =(TextView)findViewById(R.id.record);


record= new Record(this);
db= record.getWritableDatabase();
db.execSQL("INSERT INTO tab VALUES (null, 'calo' ,null);");

Cursor cursor = db.rawQuery("SELECT SUM(cal) FROM tab ", null);


while(cursor.moveToNext()){
int addr = cursor.getInt(0);
String addrrr = Integer.toString(addr);
String abc = cursor.getString(2);
}

我从上次 Activity 中获得了“calo”。然后将该数字放入名为 tab 的 sql 表中。然后创建一个光标来对包含 calo 信息的 cal 求和。但有一个问题。

"Caused by: java.lang.IllegalStateException: Couldn't read row 0, col 2 from CursorWindow. Make sure the Cursor is initialized correctly before accessing data from it."

这是表创建的更多信息。

public class Record extends SQLiteOpenHelper {

static final String DATABASE_NAME = "mydb.db";
static final int DATABASE_VERSION = 1;




public Record(Context context){

super(context, DATABASE_NAME, null, DATABASE_VERSION);
}




@Override

public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE tab ( _id INTEGER PRIMARY KEY AUTOINCREMENT, "
+"cal INTEGER, timestamp DATE DEFAULT (datetime('now','localtime')));");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS tab;");
onCreate(db);
}



}

我已经甩了好几天了

最佳答案

我遇到了类似的错误,并针对我的类似问题提供了此答案,以防有人遇到同样问题。

我正在使用 SQLiteAssetHelper 并进行 SQL 调用设置如下:

 public Cursor getStateData() {
SQLiteDatabase db = getReadableDatabase();
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
String [] sqlSelect = {"0 _id", "state", "iconone" };
String sqlTables = "Reefs";
qb.setTables(sqlTables);
qb.setDistinct(true);
Cursor c = qb.query(db, sqlSelect, null, null, null, null, null);
c.moveToFirst();
return c;
}

我添加了对 SQL 表中第 6 列中第二列数据的调用,因此假设我应该按如下方式进行调用:

 do
{
dataprovider = new StateDataProvider(statesData.getString(1), statesData.getString(6));
arrayList.add(dataprovider);
} while (statesData.moveToNext());

不是这样,您不会调用列号 6,而是调用第二个 sqlSelect,如下所示:

 do
{
dataprovider = new StateDataProvider(statesData.getString(1), statesData.getString(2));
arrayList.add(dataprovider);
} while (statesData.moveToNext());

希望它可以帮助别人节省我在这个错误上花费的许多毫无结果的时间。

关于java - 在访问游标中的数据之前,请确保游标已正确初始化。 sql 安卓,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37374269/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com