【发布时间】:2017-07-20 06:30:30
【问题描述】:
我是 Java 新手,也是 Postgres 新手。
我有一个关于餐厅的小项目,我有一张这样的 struk(eng: bill) 桌子:
我有一种方法可以将信息插入到该表中,如下所示:
public int insertBill(int id_karyawan, String tanggal, String waktu, int total) {
String SQL = "INSERT INTO struk(kode, id_karyawan, tanggal, waktu, total) VALUES (?,?,?,?,?)";
int id = 0;
try(Connection conn = connect(); PreparedStatement pstmt = conn.prepareStatement(SQL, Statement.RETURN_GENERATED_KEYS)) {
pstmt.setInt(1, 1);
pstmt.setInt(2, id_karyawan);
pstmt.setString(3, tanggal);
pstmt.setString(4, waktu);
pstmt.setInt(5, total);
int affectedRows = pstmt.executeUpdate();
if(affectedRows > 0) {
try(ResultSet rs = pstmt.getGeneratedKeys()) {
if(rs.next()) {
id = rs.getInt(1);
}
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
}
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
return id;
}
稍后,该方法将通过以下方式调用:
int billID = app.insertBill(1, "2017-09-24", "08:00:00", 150000);
问题是,我不知道日期和时间,我应该传递什么作为参数?什么样的变量才能使查询正常工作?我已经搜索过它有一些使用字符串的线索。我现在在查询方法上使用字符串。有什么建议吗?
【问题讨论】:
-
使用一个实际的
Date/Time对象并让JDBC驱动处理它 -
将字符串转换为日期(SimpleDateFormat)然后使用setDate
-
如果您使用的是 Java 8,并且拥有最新的 JDBC 驱动程序,则应使用
java.time对象,例如LocalDate和LocalTime,并使用setObject。跨度> -
你们为什么不把这个写成答案呢?我认为 cmets 是用来提问的。
-
使用
pstmt.setTime(4, ...)和 pstmt.setDate(3, ...)` 并使用正确的java.sql.Date或java.sql.Time值
标签: java postgresql jdbc