检索sql日期并存储在需要localDate的java对象中



我必须从oracle数据库中检索一个Date,并将其作为localDate存储到一个java对象中。这是我尝试过的代码:

public Sample findSampleById(Integer sampleId) {
// TODO Auto-generated method stub
PreparedStatement pStmt = null;
ResultSet rs = null;
Sample sample = new Sample();
String sql = "select * from sample where sampleid =" + sampleId;

try {
pStmt = getConnection().prepareStatement(sql);
rs = pStmt.executeQuery();
while(rs.next()) {
sample.setSampleId(rs.getInt("sampleid"));
sample.setSampleKindId(rs.getInt("samplekindid"));
sample.setExpirationDate(rs.getDate("expirationdate").toInstant().atZone(ZoneId.systemDefault()).toLocalDate());
}

} catch (SQLException e) {
throw new DataException(e);
}


return sample;
}

代替此sample.setExpirationDate(rs.getDate("expirationdate").toInstant().atZone(ZoneId.systemDefault()).toLocalDate());

我也试过这个

java.sql.Date retrieved = java.sql.Date.valueOf(rs.getString("expirationDate")); sample.setExpirationDate(retrieved.Date());

Sample是一个包含int sampleId、int sampleKindId和LocalDate expirationDate 的类

方法的JUnit测试在我请求到期日期的行中告诉我它抛出了一个异常。我的转换有错吗?

方法getDate,在接口java.sql.ResultSet中,返回java.sql.Date的一个实例。

您只需要对方法getDate返回的值调用方法toLocalDate。

我没有你的数据库,所以我只是试着从Oracle的DUAL数据库表中选择SYSDATE。以下代码运行良好。

import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.time.LocalDate;
public class JdbcTest {
public static void main(String[] args) {
String url = "jdbc:oracle:thin:..."; // Replace with your appropriate URL
try (Connection conn = DriverManager.getConnection(url);
Statement s = conn.createStatement();
ResultSet rs = s.executeQuery("select sysdate from dual")) {
if (rs.next()) {
Date sysdate = rs.getDate(1);
LocalDate ld = sysdate.toLocalDate();
System.out.println("LocalDate: " + ld);
System.out.println("  sysdate: " + sysdate);
}
}
catch (Exception x) {
x.printStackTrace();
}
}
}

请参阅LocalDate和sql之间的转换。日期

最新更新