当我的数据库是空的,或者它刚刚被创建时,我得到了这个错误,
03-10 17:34:40.758: E/AndroidRuntime(1144):java.lang.Runtime异常:无法启动活动ComponentInfo{com.example.adressbooktake2/com.example.adressbooktake2。主要活动}:android.database.CursorIndexOutOfBounds异常:请求索引0,大小为0
这是我在主课上的代码,
public class MainActivity extends Activity {
DBAdaptor db;
Cursor cursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
db = new DBAdaptor(this).open();
cursor = db.getAllRecords();
DisplayRecord(cursor);
}
然后在我的DBAdaptor类中调用此代码,
public Cursor getAllRecords()
{
Cursor gaRecords = db.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_NAME,
KEY_PHONENUMBER, KEY_EMAIL}, null, null, null, null, null);
gaRecords.moveToFirst();
return gaRecords;
}
}
我认为问题在于,当数据库刚刚创建时,moveToFirst()就没有地方可去了,因为没有数据。但我不知道如何解决这个问题,因为当有库存数据库时,我需要一个moveToFirst()。
有人看到解决办法了吗?有正确的诊断问题吗?
使用if(cursor.moveToFirst())检查光标
public class MainActivity extends Activity {
DBAdaptor db;
Cursor cursor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
db = new DBAdaptor(this).open();
cursor = db.getAllRecords();
if(cursor.moveToFirst()){
DisplayRecord(cursor);
}
}
游标为空时,moveToFirst()返回false。
见文件:http://developer.android.com/reference/android/database/Cursor.html#moveToFirst()
我认为问题出在DisplayRecord()中。
是否从DisplayRecord()中的光标提取数据?如果是这样,您应该在其中检查光标是否包含一些数据,例如调用moveToFirst并检查其结果。
差不多
private void DisplayRecord(Cursor c){
if(!c.moveToFirst()){
return;
}
// do stuff
}
您可以检查空光标,如下所示:
...
cursor = db.getAllRecords();
if(cursor.getCount() > 0)
DisplayRecords(cursor);
else
DisplayNoRecordsMessage();
或者,由于您在前面的问题中发布了DisplayRecords()
,您还可以使用:
...
if (c != null && !cursor.isAfterLast())
{
nameTxt.setText(c.getString(1));
phoneTxt.setText(c.getString(2));
emailTxt.setText(c.getString(3));
}
另外,请阅读Java命名约定,该约定规定方法名称应以小写字母开头。
问题内容: 我正在开发一个短信应用程序,我试图从每次对话中获取最新的短信。 这是我的SQL语句: 我在SQLite Expert中运行了查询,并且得到了正确的响应: 但是,当我在应用程序中运行它时,我得到: 这是我的桌子 这是我的Datamanipulator类: 问题答案: 使用时,结果的每一行对应于原始表的多行。这些结果的计算有三种可能性: 具有聚合函数的列类似于或计算组中所有行的值; 子句中
本文讲解了如何在WeX5中使用SQLite数据库,同时展示了如何在App中加入自己的cordova插件。 SQLite是嵌入式的和轻量级的SQL数据库。广泛用于IOS、Android等设备,实现本地数据存储。 在WeX5中使用SQLlite数据库,步骤如下 1、下载SQLite的cordova插件 (1)、访问https://github.com/brodysoft/Cordova-SQLiteP
SQLite 是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的SQL数据库引擎。其特点是高度便携、使用方便、结构紧凑、高效、可靠。 与其他数据库管理系统不同,SQLite 的安装和运行非常简单,在大多数情况下,只要确保SQLite的二进制文件存在即可开始创建、连接和使用数据库。如果您正在寻找一个嵌入式数据库项目或解决方案,SQLite是绝对值得考虑。SQLite可以是说开源的Acces
我想使用Java流使用数据库游标。我希望Java流能够根据需要获取和处理行,并避免先在内存中加载所有500万行,然后再进行处理。 是否可以在不将整个表加载到RAM中的情况下使用它? 到目前为止,我的代码如下所示: 它确实工作得很好,但是有点麻烦,我想利用流应用编程接口。
我试图返回SQLite数据库的“category”列中不同值的名称。光标似乎没有返回任何结果。 我正在用一个预先存在的鸟类数据库构建一个Android应用程序。其目的是允许用户通过应用程序探索数据库。我遇到的问题是试图返回数据库中存在的不同种类的鸟类物种。数据库似乎正在成功打开-没有引发SQLite异常-但是在使用查询后,'.MoveTonext'方法似乎没有返回任何数据。 请帮忙,不胜感激。
当我在php中使用MSSQL读取一个包含很长内容的字段时,我得到一个错误 警告:mssql_query()[function.mssql查询]: Unicode仅排序规则中的Unicode数据或ntext数据不能使用DB-库(如ISQL)或ODBC版本3.7或更早版本发送到客户端 我在网上搜索并找到了解决这个问题的方法,发现我需要转换结果以获得可读文本。 然而,我遇到的另一个问题是,文本数据在40