gpt4 book ai didi

java - 将日期插入数据库 Postgres JDBC

转载 作者:行者123 更新时间:2023-11-29 11:39:26 27 4
gpt4 key购买 nike

我是 Java 和 Postgres 的新手。

我有一个关于餐厅的小项目,我有一个像这样的 struk(eng: bill) 表:

enter image description here

我有一种方法可以像这样将信息插入到该表中:

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);

问题是,我不知道日期和时间,我应该传递什么作为参数?什么样的变量才能使查询正常工作?我搜索过它得到了一些使用字符串的线索。我现在在查询方法上使用字符串。有什么建议吗?

最佳答案

既然您说您是 Java 的新手,我假设您将使用 Java 8,而 PostgreSQL JDBC 驱动程序使用 JDBC 4.2 为 Java 8 日期和时间 API 提供原生支持。

PostgreSQL 支持以下日期/时间数据类型:

DATE<br/>
TIME [ WITHOUT TIMEZONE ]<br/>
TIMESTAMP [ WITHOUT TIMEZONE ]<br/>
TIMESTAMP WITH TIMEZONE

您可以使用 LocalDate、LocalTime、LocalDateTime 或 OffsetDateTime(OffsetDateTime 是具有偏移量的日期时间的不可变表示,例如:可以存储值“2017 年 7 月 20 日 10:45.24.123456789 +04:00”在 OffsetDateTime 中)。这些类作为新的日期时间 API 包含在 Java 8 中引入的 java.time 包中。(它涵盖了旧日期时间 API 的几个缺点,如设计问题、线程安全、时区处理问题等)但是,ZonedDateTime、Instant 和 OffsetTime/TIME [ WITHOUT TIMEZONE ] 目前在 PostgreSQl 中不受支持(如在 JDBC 4.2 中)。现在根据您的代码进入编程部分,您可以这样做。

public int insertBill(int id_karyawan, String tanggal, String waktu, int total) {

LocalDate localDate = LocalDate.now(); //or whatever date you want to use, for passing parameter as string you could use

/*public static LocalDate parse(CharSequence text,
DateTimeFormatter formatter)*/

// LocalDate ld = LocalDate.of(2017, Month.JULY, 20);
LocalTime lt = LocalTime.of(8, 0, 0);

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.setObject(3, localDate);
pstmt.setObject(4, lt);
pstmt.setInt(5, total);

pstmt.executeUpdate();
pstmt.close();

希望对您有所帮助。如果您使用的 Java 版本低于 8,则可以使用 joda time。

关于java - 将日期插入数据库 Postgres JDBC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45206854/

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