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

检索sql日期并存储在需要localDate的java对象中,java,sql,date,jdbc,localdate,Java,Sql,Date,Jdbc,Localdate,我必须从oracle数据库中检索一个日期,并将其作为localDate存储到java对象中。这是我尝试过的代码: public Sample findSampleById(Integer sampleId) { // TODO Auto-generated method stub PreparedStatement pStmt = null; ResultSet rs = null; Sample sample = new Sample(); String

我必须从oracle数据库中检索一个日期,并将其作为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=java.sql.Date.valueOf(rs.getString(“expirationDate”);sample.setExpirationDate(检索到的.Date())

Sample是一个具有int-sampleId、int-sampleKindId和localdateexpirationdate的类

我对该方法的JUnit测试在我请求过期日期的行中告诉我,它抛出了一个异常。转换是否出错?

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

您只需要对method
getDate
返回的值调用method

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

导入java.sql.Connection;
导入java.sql.Date;
导入java.sql.DriverManager;
导入java.sql.ResultSet;
导入java.sql.Statement;
导入java.time.LocalDate;
公共类JdbcTest{
公共静态void main(字符串[]args){
String url=“jdbc:oracle:thin:…”;//替换为适当的url
try(连接conn=DriverManager.getConnection(url);
语句s=conn.createStatement();
ResultSet rs=s.executeQuery(“从双变量中选择sysdate”)){
如果(rs.next()){
日期sysdate=rs.getDate(1);
LocalDate ld=sysdate.toLocalDate();
System.out.println(“LocalDate:+ld”);
System.out.println(“sysdate:+sysdate”);
}
}
捕获(异常x){
x、 printStackTrace();
}
}
}

请参阅

这是否回答了您的问题?如果您有一个兼容JDBC 4.2的驱动程序,那么使用
rs.getObject(“expirationDate”,LocalDate.class)
就足够了。你试过了吗?