Java 在将日期插入数据库时,JDBC无法正常工作

Java 在将日期插入数据库时,JDBC无法正常工作,java,mysql,sql,jdbc,prepared-statement,Java,Mysql,Sql,Jdbc,Prepared Statement,我的代码现在似乎按预期工作,我似乎不明白为什么。我正在尝试用另一个日期+14更新数据库中的日期。问题是所有更新的日期都具有相同的值。当我试着调试它时,代码可以工作,但是我在db中得到了不同的结果。 代码如下: String query="SELECT issueTime from issue"; ResultSet rs=DatabaseHandler.getInstance().execQuery(query); try { while(rs.next()){

我的代码现在似乎按预期工作,我似乎不明白为什么。我正在尝试用另一个日期+14更新数据库中的日期。问题是所有更新的日期都具有相同的值。当我试着调试它时,代码可以工作,但是我在db中得到了不同的结果。 代码如下:

String query="SELECT issueTime from issue";
    ResultSet rs=DatabaseHandler.getInstance().execQuery(query);
    try {
        while(rs.next()){
            java.sql.Date dbTime=rs.getDate("issueTime");
            java.sql.Date initialDBTime=dbTime;
            java.util.Date utilDate = new java.util.Date(dbTime.getTime());
            Calendar cal=Calendar.getInstance();
            cal.setTime(utilDate);
            cal.add(Calendar.DATE,14);
            utilDate= cal.getTime();
            dbTime=new java.sql.Date(utilDate.getTime());
            System.out.println("return date " + dbTime+ " Initial db time " + initialDBTime);
           String qu = "UPDATE issue SET return_date=? WHERE issueTime = ?";
            PreparedStatement pstmt=DatabaseHandler.getInstance().getConnection().prepareStatement(qu);
            pstmt.setDate(1,dbTime);
            pstmt.setDate(2, initialDBTime);
            pstmt.executeUpdate();
数据库结果:

更新:发现问题,我正在从表中仅选择issueTime。 更改:

String query="SELECT * from issue";
谢谢你的帮助

Issuetime和return_date具有日期时间格式,请尝试使用时间戳而不是日期。如果要添加14天,请参见以下示例:

公共类测试更新{
公共静态void main(字符串[]args)抛出ClassNotFoundException、SQLException{
TestsJdbc jdbc=新的TestsJdbc();
connect();
Connection con=jdbc.getConnection();
列表listIssueDate=getIssueDate(con);
更新提交日期(con,listIssueDate);
jdbc.closeConnexion();
}
公共静态java.util.Date tmsToUtilDate(java.sql.Timestamp Timestamp){
长毫秒=timestamp.getTime()+(timestamp.getNanos()/1000000);
返回新的java.util.Date(毫秒);
}
公共静态java.sql.Timestamp getTimestamp(java.util.Date){
返回日期==null?null:new java.sql.Timestamp(date.getTime());
}
公共静态java.util.Date addDay(java.util.Date curDate,int nbDay){
Calendar cal=Calendar.getInstance();
校准设置时间(curDate);
cal.add(Calendar.DATE,nbDay);//添加10天
返回cal.getTime();
}
公共静态列表getIssueDate(连接连接)引发SQLException{
String query=“从发布中选择发布时间”;
声明;
List listDate=新建ArrayList();
试一试{
语句=(语句)connexion.createStatement();
ResultSet rs=语句.executeQuery(查询);
while(rs.next()){
//java.sql.Time dbSqlTime=rs.getTime(“issueTime”);//仅限时间
//java.sql.Date dbSqlDate=rs.getDate(“issueTime”);//日期ex:YYYY-MM-DD
java.sql.Timestamp dbSqlTimestamp=rs.getTimestamp(“issueTime”);//时间戳日期ex:YYYY-MM-DD hh:MM:ss
System.out.println(“日期:+dbSqlTimestamp”);
System.out.println();
添加(dbSqlTimestamp);
}
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
返回列表日期;
}
公共静态void updateReturnDate(连接连接,列表listIssueDate)引发SQLException
{
for(java.sql.Timestamp sqlIssueDate:listsissuedate){
// 
java.util.Date tempUtilDate=tmstutildate(sqlIssueDate);
java.util.Date newutilDate=addDay(tempUtilDate,14);
java.sql.Timestamp returnDate=getTimestamp(newutilDate);
System.out.println(returnDate.getTime());
System.out.println(sqlIssueDate);
//试验
String query=“更新问题集返回\日期=?其中问题时间=?”;
PreparedStatement preparedStmt=connexion.prepareStatement(查询);
preparedStmt.setTimestamp(1,返回日期);
preparedStmt.setTimestamp(2,sqlIssueDate);
//执行java preparedstatement
preparedStmt.executeUpdate();
}
//connexion.close();
}
}
之前的表格屏幕截图:

更新后的表:


你试过提交吗?只是在我的代码中添加了提交,它似乎不起作用。也许我做错了'DatabaseHandler.getInstance().getConnection().setAutoCommit(false);PreparedStatement pstmt=DatabaseHandler.getInstance().getConnection().prepareStatement(qu);pstmt.setDate(1,dbTime);pstmt.setDate(2,initialDBTime);pstmt.executeUpdate();DatabaseHandler.getInstance().getConnection().commit();'请不要在问题的标题中添加类似于
[SOLVED]
的内容。如果你找到了一个解决方案,发布一个描述该解决方案的答案并接受它。同样,发布一个答案,不要通过将你的解决方案编辑到你的问题中来混淆问题。我已经解决了这个问题。更改:
String query=“从发布中选择发布时间”。到
String query=“选择*从问题”解决了问题。感谢您的回答,我想知道哪里出了问题,因为这两个查询给出的结果数量相同。difference是返回的列数(使用*返回表中的所有列,而不仅仅是issueTime)
public class TestUpdate {


  public static void main(String[] args) throws ClassNotFoundException, SQLException{
      TestsJdbc jdbc= new TestsJdbc();
      jdbc.connect();
      Connection con =jdbc.getConnection();
      List<java.sql.Timestamp> listIssueDate=getIssueDate(con );
      updateReturnDate(con, listIssueDate);
      jdbc.closeConnexion();

     }




  public static java.util.Date tmsToUtilDate(java.sql.Timestamp timestamp) {
        long milliseconds = timestamp.getTime() + (timestamp.getNanos() / 1000000);
        return new java.util.Date(milliseconds);
    }

  public static  java.sql.Timestamp getTimestamp(java.util.Date date){
      return date == null ? null : new java.sql.Timestamp(date.getTime());
    }




   public static java.util.Date addDay(java.util.Date curDate, int nbDay){
       Calendar cal = Calendar.getInstance();
       cal.setTime(curDate);
       cal.add(Calendar.DATE, nbDay); // add 10 days

       return cal.getTime();
   }




   public static List<java.sql.Timestamp>  getIssueDate(Connection connexion) throws SQLException{
    String  query="SELECT issueTime from issue";
    Statement statement;
    List<java.sql.Timestamp> listDate= new ArrayList<java.sql.Timestamp>();
        try {
            statement = (Statement) connexion.createStatement();
            ResultSet rs = statement.executeQuery( query);
            while (rs.next()) {

                //java.sql.Time dbSqlTime = rs.getTime("issueTime");//only time
                //java.sql.Date dbSqlDate = rs.getDate("issueTime");//Date ex :YYYY-MM-DD
                java.sql.Timestamp dbSqlTimestamp = rs.getTimestamp("issueTime");// timestamp Date ex :YYYY-MM-DD hh:mm:ss
                System.out.println("date:"+dbSqlTimestamp);
                System.out.println();
                listDate.add(dbSqlTimestamp);
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

       return listDate;
   }

     public static void updateReturnDate(Connection connexion, List<java.sql.Timestamp> listIssueDate) throws SQLException
      {

          for(java.sql.Timestamp sqlIssueDate:listIssueDate){

              // 
              java.util.Date tempUtilDate=tmsToUtilDate(sqlIssueDate);
              java.util.Date newutilDate=addDay(tempUtilDate, 14);
              java.sql.Timestamp returnDate=getTimestamp(newutilDate);



              System.out.println(returnDate.getTime());
              System.out.println(sqlIssueDate);
             //Test
             String query="UPDATE issue SET return_date=? WHERE issueTime = ?";


              PreparedStatement preparedStmt = connexion.prepareStatement(query);
              preparedStmt.setTimestamp(1, returnDate);
              preparedStmt.setTimestamp(2, sqlIssueDate);

              // execute the java preparedstatement
              preparedStmt.executeUpdate();

          }
              //connexion.close();

      }
}