将日期插入数据库Postgres JDBC

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

问题是,我对日期和时间一无所知,我应该作为参数传递什么? 什么样的变量让查询工作得很好? 我搜索过它有一些使用字符串的线索。 我现在在查询方法上使用字符串。 任何建议?

既然你已经说过你是java的新手,我认为你将使用Java 8和PostgreSQL JDBC驱动程序使用JDBC 4.2为Java 8 Date和Time API提供本机支持。

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

DATE
TIME [ WITHOUT TIMEZONE ]
TIMESTAMP [ WITHOUT TIMEZONE ]
TIMESTAMP WITH TIMEZONE

您可以使用LocalDate,LocalTime,LocalDateTime或OffsetDateTime(OffsetDateTime是具有偏移的日期时间的不可变表示,例如:值“2017年7月20日10:45.24.123456789 +04:00”可以存储在OffsetDateTime中)。 这些类来自java.time包,它是在Java 8中引入的,作为一个新的Date-Time API。(它涵盖了几个旧的日期时间API,如设计问题,线程安全,时区处理问题等)。但是,PostgreSQl当前不支持ZonedDateTime,Instant和OffsetTime / TIME [WITHOUT TIMEZONE](如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(); 

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