【发布时间】:2017-05-19 13:18:36
【问题描述】:
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);
}
我从上次活动中得到了“calo”。然后将该数字放入名称为tab的sql表中。然后制作一个光标来对包含 calo 信息的 cal 进行求和。 但是有一个问题。
“原因:java.lang.IllegalStateException:无法读取第 0 行,col 2 来自光标窗口。确保光标已正确初始化 在从中访问数据之前。”
这是创建表的更多信息。
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);
}
}
我已经甩了好几天了
【问题讨论】:
-
基于
SQL查询,结果游标将只包含一行,而这一行将只有一列。问题是您试图获取不存在的第三列cursor.getString(2);。 -
我忘记了问题所在。根据日志,String abc = cursor.getString(2);有这个问题“由:java.lang.IllegalStateException:无法从 CursorWindow 读取第 0 行,第 2 行。确保在从光标访问数据之前正确初始化光标。”
-
感谢泰特斯。那么我如何从 sql 表中得到总和....
-
我认为该表将像这样创建 - 1 100 2016/05/22 - 2 150 2016/5/23 - 3 100 2016/5/29 并想总结第二部分.. .
-
在您发布的代码中,
addrrr将包含tab表的cal列的总和。只需删除此行String abc = cursor.getString(2);即可。