我有三栏,第一名,第二名和第三名。
喜欢这个
id title body
1 t1 b1
2 t2 b2
3 t3 b3
所以,我想获得标题并在列表视图中显示,如果我点击t2标题,则显示相应可点击标题的正文。
我做了什么。
DatabaseHelper.java
public Cursor retriveTitle(String [] title) {
Cursor c = null;
c = myDataBase.rawQuery(
"select id,title from book,", title);
return c;
}
Main.java
private void displayTitle() {
try {
myDataBase = (new DatabaseHelper(this)).getWritableDatabase();
} catch (IOException e) {
e.printStackTrace();
}
Cursor cursor = myDataBase.rawQuery("SELECT b.id, b.title FROM book b ", new String[] { "" });
String test=cursor.getString(cursor
.getColumnIndex("title"));
//How to display title of book in listview
}
得到这个:
01-18 14:20:03.401: E/AndroidRuntime(6704): Caused by: java.lang.IllegalArgumentException: Cannot bind argument at index 1 because the index is out of range. The statement has 0 parameters.
我正在使用已经是数据库的文件,根据这篇博文:Using your own SQLite database in Android applications
答案 0 :(得分:0)
试试
Cursor cursor = myDataBase.rawQuery("SELECT b.id, b.title FROM book b",null);
curosr.moveToFirst();
String test=cursor.getString(cursor
.getColumnIndex("title"));
答案 1 :(得分:0)
我认为你的查询应该使用“where”语句
c = myDataBase.rawQuery("select id,title from book where title=?", title);
当然你想传递一定数量的论点
c = myDataBase.rawQuery("select id,title from book where title in (?, ?, ?)", new String[]{title1, title2, title3});
但是如果标题的数量可以变化,则需要动态创建一个带有足够问号的字符串。看这篇文章
如果您仍然遇到错误,也许提供更多日志可能有所帮助。如果lo说出哪一行失败,那么告诉它是哪一行。我们在这里看不到行号
祝你好运答案 2 :(得分:0)
以下是它对我的影响。在另一个类中,我创建了一个List类型的方法,并添加了列id& sqlite数据库列表中项目的名称。
这是检索所选项目的列ID的代码段。
public List<String> list;
adapt = new MyAdapter(this, R.layout.list_inner_view, list); //custom adapter
listTask.setAdapter(adapt);
listTask.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View v, int position, long l) {
Integer id = list.get(position).getId();
//position is the position of the item in the list.
}
});
结果:该项目位于列表中的第3个位置。它的数据库column_id(自动增量)值为12,因为我删除了以前的项目。所以你期望的结果是12,这是变量id的值。
如果你不完全理解这一点,可能是因为我还没有发布我的整个代码。但我会帮你解决问题。