【问题标题】:Can't figure out why SQL statement isn't woking无法弄清楚为什么 SQL 语句不起作用
【发布时间】:2014-08-12 09:30:36
【问题描述】:

我不明白我的陈述有什么问题。对我来说似乎是正确的,游标应该包括我的数据库表中的两行。根据 SQLite 网站,支持此格式化日期(也尝试使用其他受支持的日期)。

        String statement = "SELECT * FROM " + TABLE_DISTANCE_NAME + " WHERE " + COLUMN_TIME_DISTANCE_ADDED + " BETWEEN " + "2014-07-14" + " AND " + "2014-08-14";
        Log.d("statement", statement);
        Cursor cur = db.rawQuery(statement, null);
        Log.d("cursor amount rows", Integer.toString(cur.getCount()));

        if (cur != null) {
            cur.moveToFirst();
        }    
        int totalDistance = 0;
        while (cur.isAfterLast() == false) {
            Log.d("cursor distance value", Integer.toString(cur.getInt(0)));
            totalDistance += cur.getInt(0);
            cur.moveToNext();
        }
        Log.d("Total Distance traveled = ", Integer.toString(totalDistance));

这就是桌子的样子。

日志:

...statement﹕ SELECT * FROM distanceTraveled WHERE timedistadded BETWEEN 2014-07-14 AND 2014-08-14

com.example.RoadTrip D/cursor amount rows﹕ 0
com.example.RoadTrip D/Total Distance traveled =﹕ 0

谢谢

【问题讨论】:

    标签: java android sql sqlite


    【解决方案1】:

    日期常量需要用单引号括起来:

    " WHERE " + COLUMN_TIME_DISTANCE_ADDED + " BETWEEN " + "'2014-07-14'" + " AND " + "'2014-08-14'";
    

    如果在替换后打印出 SQL 语句,这个问题会更明显。这始终是尝试调试此类问题的良好第一步。

    【讨论】:

      【解决方案2】:

      尝试引用您的查询参数

      例如

      + "'2014-07-14'" + " AND " + "'2014-08-14'"
      

      根据 SQL,日期和字符串需要用单引号引起来。

      【讨论】:

      • 当然,我太笨了。我已经习惯了使用原始语句以外的 androids SQLite 方法。不需要那些引号。
      • 如果您要使用preparedStatement 对象,那么这可以通过使用set* 方法来简化。这也可以防止 SQL 注入。
      猜你喜欢
      • 2021-05-29
      • 1970-01-01
      • 2014-12-08
      • 2012-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多