【问题标题】:How to use android SQLITE SELECT with two parameters?如何使用带有两个参数的android SQLITE SELECT?
【发布时间】:2021-07-02 03:34:54
【问题描述】:

此代码返回空光标。这里有什么问题? 数据已经存在于 sqlitedb 中。

public static final String COL_2 =  "ID";
    public static final String COL_3 = "TYPE";

public Cursor checkData(String id, String type){
    SQLiteDatabase db = getWritableDatabase();
    Cursor res = db.rawQuery("SELECT * FROM "+ TABLE_NAME  + " WHERE " + COL_2 + " = " + id+ " AND " + COL_3 + " = " + type , null);
    return res;
}

【问题讨论】:

    标签: android-sqlite


    【解决方案1】:

    当您将字符串作为参数传递时,您必须在 sql 语句中引用它们。
    但是通过在 sql 代码中连接带引号的字符串值,您的代码是不安全的。

    推荐的方法是使用? 占位符:

    public Cursor checkData(String id, String type){
        SQLiteDatabase db = getWritableDatabase();
        String sql = "SELECT * FROM "+ TABLE_NAME  + " WHERE " + COL_2 + " = ? AND " + COL_3 + " = ?";
        Cursor res = db.rawQuery(sql , new String[] {id, type});
        return res;
    }
    

    参数idtyperawQuery() 的第二个参数中作为字符串数组传递。

    【讨论】:

      【解决方案2】:

      我终于解决了。

      public Cursor checkData(String id, String type){
              SQLiteDatabase db = getWritableDatabase();
              Cursor res = db.rawQuery("SELECT * FROM "+ TABLE_NAME  + " WHERE " + COL_2 + " = '" + id+ "' AND " + COL_3 + " =  '" + type +"'" , null);
              return res;
          }
      

      【讨论】:

      【解决方案3】:

      如果 COL_3 类型是字符串,试试这个:

      Cursor res = db.rawQuery("SELECT * FROM "+ TABLE_NAME  + " WHERE " + COL_2 + " = " + id+ " AND " + COL_3 + " = '" + type + "'" , null);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-07-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-24
        • 2021-03-17
        • 1970-01-01
        相关资源
        最近更新 更多