如何在SQL中将SQLite数据库列值作为List

时间:2013-12-17 08:36:24

标签: android listview android-sqlite

我有三栏,第一名,第二名和第三名。

喜欢这个

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

3 个答案:

答案 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});

但是如果标题的数量可以变化,则需要动态创建一个带有足够问号的字符串。看这篇文章

IN clause and placeholders

如果您仍然遇到错误,也许提供更多日志可能有所帮助。如果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的值。

如果你不完全理解这一点,可能是因为我还没有发布我的整个代码。但我会帮你解决问题。