6.PreparedStatement.setDate()和Query.setDate()的区别

本文解析了java.sql.Date与java.util.Date的区别,强调了在使用PreparedStatement.setDate()方法时应正确使用java.sql.Date。提供了从java.util.Date到java.sql.Date的转换方法,确保能正确设置数据库日期。

区别:

PreparedStatement.setDate(int, java.sql.Date)

Query.setDate(int, java.util.Date)

PreparedStatement的setDate()方法提示出错,经过查询,发现PreparedStatement的setDate()方法的第二个参数用的时间类型是java.sql.Date,如果使用java.util.Date来设置时就错了。

  那对于java.sql.Date和java.util.Date之间应该如何转换呢?经过查资料可以这样转换:

  java.util.Date utilDate = new java.util.Date();

  java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());

  转换后的sqlDate就可以设进PreparedStatement里面去即可。

package com.example.library.dao.impl; import com.example.library.dao.BookDao; import com.example.library.entity.Book; import java.sql.*; import java.util.ArrayList; import java.util.List; public class BookDaoImpl implements BookDao { private Connection conn; public BookDaoImpl(Connection conn) { this.conn = conn; } @Override public int insert(Book book) throws SQLException { String sql = "INSERT INTO books(title,author,isbn,publisher,publish_date,stock) VALUES(?,?,?,?,?,?)"; try (PreparedStatement pstmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) { pstmt.setString(1, book.getTitle()); pstmt.setString(2, book.getAuthor()); pstmt.setString(3, book.getIsbn()); pstmt.setString(4, book.getPublisher()); pstmt.setDate(5, new java.sql.Date(book.getPublishDate().getTime())); pstmt.setInt(6, book.getStock()); int affectedRows = pstmt.executeUpdate(); if (affectedRows > 0) { try (ResultSet rs = pstmt.getGeneratedKeys()) { if (rs.next()) { return rs.getInt(1); } } } return affectedRows; } } @Override public Book selectById(Integer id) throws SQLException { String sql = "SELECT * FROM books WHERE book_id=?"; try (PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setInt(1, id); try (ResultSet rs = pstmt.executeQuery()) { if (rs.next()) { return convertToBook(rs); } return null; } } } @Override public List<Book> selectAll() throws SQLException { List<Book> books = new ArrayList<>(); String sql = "SELECT * FROM books"; try (Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery(sql)) { while (rs.next()) { books.add(convertToBook(rs)); } } return books; } private Book convertToBook(ResultSet rs) throws SQLException { Book book = new Book(); book.setBookId(rs.getInt("book_id")); book.setTitle(rs.getString("title")); book.setAuthor(rs.getString("author")); book.setIsbn(rs.getString("isbn")); book.setPublisher(rs.getString("publisher")); book.setPublishDate(rs.getDate("publish_date")); book.setStock(rs.getInt("stock")); return book; } // 其他方法实现... } 补充完整代码
最新发布
07-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值