【问题标题】:SQLite Querying with user defined data使用用户定义的数据进行 SQLite 查询
【发布时间】:2015-11-13 14:35:40
【问题描述】:

我有一个连接 2 个表的查询在我的 android 上获取所需的数据,这里的图片是用户点击一个项目,项目的 ID 用于查询数据库中的正确数据,我知道我可以简单地使用database.query() 但根据我的研究,它仅用于简单的数据库查询,在我的情况下,我应该使用rawQuery(),它提供了更多的数据库功能。下面是我的查询,它将表 1 链接到表 2,如果外键与用户键相同,则从表 1 中获取用户名和从表 2 中获取用户姓氏

假设这是我的查询:

 String sQuery = SELECT table1.ID, table2.userlastname FROM table1, table2 WHERE "+table1.ID = table2.foreign;

如果我尝试像下面这样指定用户 ID,它将获取数据库表中的所有数据,这意味着我应该将 id 替换为“=?”但是当我处理这样一个查询时我该怎么做,一个使用db.rawQuery()而不是db.query()的查询

  `private Object userInfo(int id)
   {
    String sQuery = SELECT table1.ID, table2.userlastname 
    FROM table1, table2 WHERE "+table1.ID = id;

   }`

【问题讨论】:

标签: android database sqlite


【解决方案1】:

基本上你用问号'?'替换参数并按照它们在查询中出现的顺序将它们传递给一个字符串数组。

String queryStr = "SELECT table1.ID, table2.userlastname 
                    FROM table1
                    INNER JOIN table2 ON table1.ID = table2.foreign;
                    WHERE table1.ID = ?";
String[] args = new String[1];
args[0] = String.valueOf(id);
Cursor cur = db.rawQuery(queryStr, args);

【讨论】:

  • 您可以简单地执行Cursor cur = db.rawQuery(queryStr, new String[]{String.valueOf(id)}; 并节省 2 行... ;) 感谢 Selvin "hawk-eye" 发现了我的错误(由于匆忙)。
【解决方案2】:

在我加入表 2 之前它不起作用:

        `String queryStr = "SELECT table1.ID, table2.userlastname 
                FROM table1
                INNER JOIN table2 ON table1.ID = table2.foreign
         WHERE table1.ID = ?";
        String[] args = new String[1];
        args[0] = String.valueOf(id);
        Cursor cur = db.rawQuery(queryStr, args);`

【讨论】:

  • 是的,内部连接后忘记了“table2 On”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-18
  • 1970-01-01
  • 1970-01-01
  • 2014-04-13
  • 2020-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多