插入和选择日期 (Java) (MySQL)
Posted
技术标签:
【中文标题】插入和选择日期 (Java) (MySQL)【英文标题】:Inserting and Selecting Date (Java) (MySQL) 【发布时间】:2012-11-02 04:19:22 【问题描述】:我有一个表,我必须在其中执行 SELECT ... BETWEEN start_date AND end_date
,并将 Date
值插入到同一个表中。
我读过类似的东西:
java.util.Date now = new java.util.Date();
pStmt.setDate( 1, new java.sql.Date( now.getTime() ) );
pStmt.setTimestamp( 2, new java.sql.Timestamp( now.getTime() ) );
pStmt.executeUpdate();
但是那种代码设置或获取当前日期,不是吗?我想自己插入和选择自定义日期。
我也在 *** 阅读了它:
SELECT *
FROM myTable
WHERE ( YEAR(myfield) = '2009')
AND ( MONTH(myfield) = '1')
是否也可以将Date
字段设为String
,然后使用StringTokenizer
仅提取日、月或年信息,并在类似于此代码的SELECT
中使用它们? (以防我的第一个 - 也是更简单的 - 想法是不可能的。)
所以到目前为止,有两种可能的解决方案。我还需要知道哪个更快,因为访问的数据库位于具有大量数据的故障安全/关键系统(银行)中。
【问题讨论】:
自定义日期是什么意思?你能举一个你想要的具体例子吗(是你的数据库中的 start_date 和 end_date 时间戳)? 您的示例使用当前日期/时间。如果这就是你想要的,让 mysql 为你做,例如NOW()
。如果没有,请告诉我们您所追求的日期范围。
还要注意YEAR(myfield)
是字段上的函数,mysql将无法使用索引快速获取数据。
它必须选择已经插入的日期,然后将要生成的表格填充到 PDF 中(我使用的是 iText)。我希望插入一个过去的日期,这样我的所有表格都将根据相同的示例。
关于第二个想法,我在想: SELECT * FROM table WHERE (YEAR(st_year)=?) AND (MONTH(st_month)=?) AND (DAY(st_day)=?) ;(...)etc(...) 字符串斜线、数据、st_year、st_month、st_day; StringTokenizer st = new StringTokenizer(斜线, "/");数据 = st.nextToken();天=数据; (...)等(...)
【参考方案1】:
第一种方法更好,因为您可以使用日期函数来操作值。
private void executeQuery(java.util.Date startDate, java.util.Date endDate) throws SQLException
Connection conn = null;
PreparedStatement pstmt = null;
try
conn = getConnection();
String query = "select ... between ? and ?";
pstmt = conn.prepareStatement(query);
pstmt.setDate(1, new java.sql.Date(startDate.getTime()));
pstmt.setDate(2, new java.sql.Date(endDate.getTime()));
//return results
ResultSet rs = pstmt.executeQuery();
rs.last();
System.out.println("last row = " + rs.getRow());
finally
if (pstmt != null)
pstmt.close();
if (conn != null)
conn.close();
【讨论】:
好的。谢谢。现在,日期字段的值(即,我必须输入日期,而不是使用当前日期)如何提供 PreparedStatement?就像在“pStmt.setString(1,myString)”中一样。 这就是我所需要的! :-D 谢谢以上是关于插入和选择日期 (Java) (MySQL)的主要内容,如果未能解决你的问题,请参考以下文章