我整个周末一直都在这,我在我的智慧结束时如何将查询中的所有记录返回到列表视图
以下代码完美无缺
public void DisplayContact(String sitename)
{
final DBAdapter db = new DBAdapter(this);
db.open();
Cursor c = db.getAsset6(sitename);
int mx=0;
String[] lvdata = new String[c.getCount()-1];
while (c.moveToNext()) {
lvdata[mx]=c.getString(2) + "-" + c.getString(1) + "-" + c.getString(6);
mx++;
}
getActionBar().setTitle("Number of Records = " + mx);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
R.layout.rowlayout, R.id.label, lvdata);
setListAdapter(adapter);
}
public Cursor getAsset6(String strname) throws SQLException
{
Cursor mCursor =
db.query(true, DATABASE_TABLE,
new String[] {KEY_ROWID,KEY_FAULTREF,KEY_WORKNUM,KEY_ORIGNUM,KEY_REPBY,KEY_REPDATTIM,KEY_DESCRIPTION},
KEY_REPBY + " LIKE ?",
new String[] { "%" + strname + "%" },
null, null, null, null); if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
问题是它没有在查询中添加第一项(即查询中有151条记录,但它只在列表视图中放入150缺少第一条条目)
我确信它与c.moveToFirst()有关;和一个Do语句,但我已经阅读了我在这里可以找到的每篇文章,当我在应用程序中运行查询时,我尝试的任何组合都会崩溃。我正在使用外部数据库运行应用程序,所以我无法看到在eclipse中导致崩溃的原因
你们其中一位SQL大师可以帮我解决它让我疯狂吗
您的帮助表示赞赏
标记
答案 0 :(得分:0)
我相信解决方案是从你的getAsset6()方法中删除这一行:
mCursor.moveToFirst();
正在发生的是,正在创建光标,然后将其设置为结果集的第一行。然后将while循环定义为:
while (c.moveToNext())
首先评估while循环的条件,以确定是否应运行后面的代码。因此,在开始添加到lvdata []数组之前,此语句会将光标前进到第二行。因此第一行被跳过。通过删除moveToFirst(),您的代码仍然可以正常工作。 while循环中的moveToNext()将光标设置为第一次迭代中的第一行,您将把所有数据都放入数组中。如果光标碰巧为空,则moveToNext()将返回false,并且不会将任何内容添加到数组中。