【问题标题】:E/SQLiteLog: (1) unrecognized token: ":"E/SQLiteLog:(1)无法识别的令牌:“:”
【发布时间】:2019-11-23 19:21:22
【问题描述】:

我正在尝试查询值对应于 sqlite/android studio 中的 url 地址的字符串,但它一直抛出异常:

E/SQLiteLog: (1) unrecognized token: ":"
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.project, PID: 4525
    android.database.sqlite.SQLiteException: unrecognized token: ":" (code 1): , while compiling: SELECT  * FROM URLS_ITEMS WHERE title = Google AND url = http://www.google.com;
    #################################################################
    Error Code : 1 (SQLITE_ERROR)
    Caused By : SQL(query) error or missing database.
        (unrecognized token: ":" (code 1): , while compiling: SELECT  * FROM URLS_ITEMS WHERE title = Google AND url = http://www.google.com;)
    #################################################################
        at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
        at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:1096)
        at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:661)

这里是引发异常的代码sn-p:

public boolean isUrlAlreadyStored(String title, String url) {
        ArrayList<URLItem> urlDetailList = new ArrayList<URLItem>();
        String query = "SELECT  * FROM " + DATABASE_TABLE_URLS_ITEMS + " WHERE title = " + title + " AND url = " + url + ";";
        Cursor cursor = database.rawQuery(query, null);

我想我应该转义字符/令牌:但不确定如何。我试过: url = url.replaceAll(":", ":") 但显然这不是正确的方法。

有人知道如何查询诸如“https://www.stackoverflow.com”之类的值/字符串吗?

【问题讨论】:

    标签: java android sqlite exception android-sqlite


    【解决方案1】:

    SQLite的字符串数据类型可以加“'”单引号。

    String query = "SELECT  * FROM " + DATABASE_TABLE_URLS_ITEMS + " WHERE title = '" + title + "' AND url = '" + url + "';";
    

    【讨论】:

      【解决方案2】:

      titleurl 的值是字符串文字,应该用单引号括起来:

      String query = "SELECT  * FROM " + DATABASE_TABLE_URLS_ITEMS + " WHERE title = '" + title + "' AND url = '" + url + "';";
      Cursor cursor = database.rawQuery(query, null);
      

      但推荐且安全的方法是在语句中使用占位符?,并在rawQuery() 的第二个参数中传递titleurl 的值:

      String query = "SELECT  * FROM " + DATABASE_TABLE_URLS_ITEMS + " WHERE title = ? AND url = ?;";
      Cursor cursor = database.rawQuery(query, new String[] {title, url});
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-29
        • 2016-11-25
        • 1970-01-01
        • 1970-01-01
        • 2019-05-18
        • 1970-01-01
        相关资源
        最近更新 更多