gpt4 book ai didi

java - mysql日期语法问题

转载 作者:行者123 更新时间:2023-11-29 22:37:03 25 4
gpt4 key购买 nike

我是 MySql 数据库的新手,目前面临日期格式问题。我尝试了互联网上的一些解决方案,但没有任何效果。因此我在这里发布问题。

我有一个 GUI,我在其中提供日期作为输入,格式为“mm/dd/yyyy”。

这是我的代码,其中包含查询:

  public boolean fetchAPReportDomino(Date edDate, APReport apReport ){
Statement stmt=null;
ResultSet rs=null;
SimpleDateFormat sd= new SimpleDateFormat("MM/dd/yyyy");
SimpleDateFormat sd1=new SimpleDateFormat("yyyy-MM-dd");
String tempDate=sd.format(edDate);
if(getConnection()!=null){

try {
stmt= getConnection().createStatement();

String query="SELECT * FROM AP_Report where Edition Date = " + tempDate;
rs = stmt.executeQuery(query);
while (rs.next()) {
apReport.setRoomHumidity(rs.getInt("Room Humidity"));
apReport.setRoomTemperature(rs.getInt("Room Temperature"));
}
rs.close();
stmt.close();

} catch (SQLException ex) {
Logger.getLogger(DataService.class.getName()).log(Level.SEVERE, null, ex);
return false;
}
}
return true;
}

在 MySql 工作台中,我尝试将日期字段更改为“DATE”、“TIMESTAMP”、“DATETIME”数据类型。但没有任何帮助。

下面是我执行代码时看到的错误:

SEVERE: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Date = 02/14/2015' at line 1

发布下面表格结构的屏幕截图:

http://prntscr.com/6qz5my

最佳答案

首先永远不要创建数据库字段,就像简单的名称一样,单词之间有空格(例如版本日期),这是一种非常糟糕的做法 这使得在编程时使用它变得更加糟糕。这是您在评论中添加的图片: enter image description here

我强烈建议您将其更改为 edition_date 之类的内容。数据库字段不需要非常容易理解。

第二自从您创建了这样的字段以来,您必须在使用该字段在数据库上运行的所有查询中使用反引号`,否则sql解析器不知道如何识别名称类似于 Edition Date

的字段

您看到的错误:

...server version for the right syntax to use near 'Date = 02/14/2015' at line 1

准确说明我所说的关于它向您显示的字段名称'Date = 02/14/2015',因为 sql 解析器认为 Edition 单词是一个命令或运算符,因此其余部分无法识别。

在您创建的查询上使用它的正确方法如下:

String query="SELECT * FROM AP_Report where `Edition Date` = " + tempDate;

看到反引号了吗?

但是这种方式仍然是错误的,因为您的查询是一个没有准备语句的字符串,这意味着您必须用单引号将您的值 tempDate 括起来,所以正确的方法是:

String query="SELECT * FROM AP_Report where `Edition Date` = '" + tempDate + "'";

但它仍然有一个问题,比较字符串的默认 mysql 日期格式是 yyyy-MM-dd 在这里查看:Date Example (由于格式原因,第二个查询什么也没得到)

在您的代码中,您将使用以下代码格式化要在查询中使用的日期:

SimpleDateFormat sd= new SimpleDateFormat("MM/dd/yyyy");
SimpleDateFormat sd1=new SimpleDateFormat("yyyy-MM-dd");
String tempDate=sd.format(edDate);

当您应该使用sd1时,您在查询中使用了sd,因此

String tempDate=sd1.format(edDate);

之后您可以使用查询:

String query="SELECT * FROM AP_Report where `Edition Date` = '" + tempDate + "'";

注意:我真的不记得在此处检索值时是否必须使用反引号apReport.setRoomHumidity(rs.getInt("Room Humidity")); 因此,如果第一种方法不起作用,您应该测试 apReport.setRoomHumidity(rs.getInt("`Room Humidity`"));

为了了解知识,您应该考虑使用准备好的语句,在您的代码中将类似于:

//...

String query="SELECT * FROM AP_Report where `Edition Date` = ?"
PreparedStatement pstmt = getConnection().prepareStatement(query);

//note that depending on your date type you will need just one
//of the lines below

//if your edDate is a java.util.Date use as:
pstmt.setDate(new java.sql.Date(edDate.getTime()));
//if it is already a java.sql.Date
pstmt.setDate(edDate);

rs = pstmt.executeQuery(query);

//...

希望它能让你弄清楚事情。

关于java - mysql日期语法问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29503469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com