m0_74474210 2024-05-28 19:41 采纳率: 93.8%
浏览 1
已结题

查询3天以内的数据,为什么报错?

String quary1=" select * from "+DataBase.TABLE2 + " where " +DataBase.COLUMN_ET+">'"+threeago+"'";

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-28 19:41
    关注

    引自免费微信小程序:皆我百晓生

    在您提供的SQL查询语句中,看起来您试图从名为TABLE2的表中选择所有列,条件是COLUMN_ET大于一个名为threeago的变量所代表的值。然而,这个查询可能会因为日期比较操作中的字符串处理而报错。在Java中,通常我们不会直接将日期作为字符串进行比较,而是先将它们转换为日期对象,然后进行比较。

    首先,确保您的threeago变量是一个有效的日期对象(例如LocalDatejava.util.Datejava.sql.Timestamp)。接下来,我们将使用PreparedStatement来执行查询,这样可以避免SQL注入的风险,并且更容易处理日期类型。

    下面是修改后的代码示例:

    import java.time.LocalDate;
    import java.sql.*;
    
    public class Main {
        public static void main(String[] args) {
            String query = "SELECT * FROM " + DataBase.TABLE2 + " WHERE " + DataBase.COLUMN_ET + " > ?";
            
            try (Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/your_database", "username", "password");
                 PreparedStatement preparedStatement = connection.prepareStatement(query)) {
    
                // 假设 threeago 是一个 LocalDate 类型的对象
                LocalDate threeAgo = LocalDate.now().minusDays(3);
                
                // 设置参数
                preparedStatement.setDate(1, Date.from(threeAgo.atStartOfDay(ZoneId.systemDefault()).toInstant()));
    
                ResultSet resultSet = preparedStatement.executeQuery();
    
                while (resultSet.next()) {
                    // 读取结果集并处理数据
                    int id = resultSet.getInt("id"); // 替换为实际列名
                    String columnValue = resultSet.getString("column_name"); // 替换为实际列名
                    System.out.println("ID: " + id + ", Column Value: " + columnValue);
                }
    
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    

    在这个例子中,我们创建了一个PreparedStatement对象,并将日期作为参数传递给它。这会自动处理日期的格式化问题,避免了字符串比较导致的问题。确保已正确配置数据库连接信息(URL、用户名和密码)。

    如果您正在使用的是不同的日期类型(如java.util.Datejava.sql.Timestamp),只需相应地调整设置日期参数的部分即可。同时,别忘了替换上述代码中的"your_database"、"username"、"password"以及表名和列名为你实际的数据库名称、用户名、密码和表结构。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 6月5日
  • 已采纳回答 5月28日
  • 创建了问题 5月28日

悬赏问题

  • ¥15 如何在maya程序中利用python编写领子和褶裥的模型的方法
  • ¥15 Linux权限管理相关操作(求解答)
  • ¥15 Bug traq 数据包 大概什么价
  • ¥15 在anaconda上pytorch和paddle paddle下载报错
  • ¥25 自动填写QQ腾讯文档收集表
  • ¥15 DbVisualizer Pro 12.0.7 sql commander光标错位 显示位置与实际不符
  • ¥15 求一份STM32F10X的I2S外设库
  • ¥15 android 打包报错
  • ¥15 关于stm32的问题
  • ¥15 ncode振动疲劳分析中,noisefloor如何影响PSD函数?