2016-07-11 1 views
1

У меня есть две таблицы с двумя столбцами для хранения настроек приложения в базе данных SQL. Мой вопрос в том, как обновить запись с изменением значения dCreateTime до минус 1 день плюс две таблицы для вызова whereIDID = atest211. Мой код, похоже, не работает.JDBC - Как обновить запись, где дата -1

Мой код:

public void getEmployeesFromDataBase() { 
     try { 
      String query = "update a set a.dCreateTime=a.dCreateTime-1 from tbet a, tuser b where a.iUserKey= b.iUserKey and b.sUserid = 'atest211' and a.dCreateTime> GETDATE()-5"; 
      statement = connection.createStatement(); 
      rs = statement.executeQuery(query); 

      while (rs.next()) { 
       int EmpId = rs.getInt("iUserKey"); 
       String EmpName = rs.getString("sUserid"); 
       System.out.println(EmpId + "\t" + EmpName + "\t"); 
      } 
     } catch (SQLException ex) { 
      ex.printStackTrace(); 
     } 
    } 

Мой обновленный код, он по-прежнему не работает правильно

public void updateTableData() { 
     PreparedStatement pstmt = null; 
     try { 
      pstmt = connection.prepareStatement("update a set a.dCreateTime=a.dCreateTime-1 from tbet a, tuser b where a.iUserKey= b.iUserKey and b.sUserid = 'atest211' and a.dCreateTime> GETDATE()-5"); 
      pstmt.setString(1, "dCreateTime"); 
      pstmt.setString(2, "atest211"); 
      // To execute update query. 
      pstmt.executeUpdate(); 

      // Printing all records of user table after updating record. 
      String query = "select * from tbet"; 
      // Get the contents of user table from DB 
      ResultSet res = statement.executeQuery(query); 
      // Print the result untill all the records are printed 
      // res.next() returns true if there is any next record else returns 
      // false 
      while (res.next()) { 
       System.out.println(String.format("%s - %s - %s - %s ", res.getString(1), res.getString(2), 
         res.getString(3), res.getString(4))); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
+0

Почему селен тег? – Jens

+0

@Jens, потому что я делаю автоматическую часть для записи обновления –

+1

Но ваш вопрос не имеет ничего общего с селеном – Jens

ответ

1

Кредит на @OldMcDonald, так как я изменить код, и это, к сожалению, работает там некоторые ошибки во время оператора выбора при попытке получить запись, чтобы проверить, была ли обновлена ​​запись, встретить ошибку: java.lang.NullPointerException. Это ошибка устранена путем добавления statement = connection.createStatement();

Вот код:

public void updateTableData() { 
      PreparedStatement pstmt = null; 
      try { 
       //create calendar date -1 day 
       Calendar cal = Calendar.getInstance(); 
       cal.add(Calendar.DATE, -1); 

       // preparing query to update record In db. 
       pstmt = connection.prepareStatement("update a set a.dCreateTime= ? from tbet a, tuser b where a.iUserKey= b.iUserKey and b.sUserid = ? and a.dCreateTime> GETDATE()-5"); 
       // Set name value which you wants to update. 
       pstmt.setDate(1, new java.sql.Date(cal.getTime().getTime())); 
       // Set id of record which you wants to update. 
       pstmt.setString(2, "atest211"); 
       // To execute update query. 
       pstmt.executeUpdate(); 

       // Printing all records of user table after updating record. 
       String query = "select * from tbet where iUserKey=53298 ORDER BY tbet.dCreateTime desc"; 
       statement = connection.createStatement(); 
       // Get the contents of user table from DB 
       ResultSet res = statement.executeQuery(query); 
       // Print the result untill all the records are printed 
       // res.next() returns true if there is any next record else returns 
       // false 
       while (res.next()) { 
        System.out.println(String.format("%s - %s - %s - %s ", res.getString(1), res.getString(2), 
          res.getString(3), res.getString(4))); 
       } 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
1

Вам нужно обновление ... Join .. установлен .. где Синтаксис:

 String query = "update a join b on a.iUserKey= b.iUserKey set a.dCreateTime=a.dCreateTime-1 where b.sUserid = 'atest211' and a.dCreateTime> GETDATE()-5"; 

Далее вы должны использовать statement.execute(query); вместо executeQuery(query). Этот метод не возвращает результирующий набор ....

Также вы должны прочитать о SQL-инъекции и использовании подготовленных операторов.

2

Вы используете result set с обновлением, что невозможно. Кроме того, в цикле while вы в основном получаете значения из базы данных, а не обновляете их.

Если вы хотите обновить значения, я советую вам использовать PreparedStatement.

Если вы хотите, чтобы ваш код работал, попробуйте использовать SELECT вместо UPDATE в вашем запросе.

String query = "SELECT a.dCreateTime FROM tbet a, tuser b WHERE a.iUserKey= b.iUserKey and b.sUserid = 'atest211' and a.dCreateTime> GETDATE()-5"; 

EDIT: Если вы хотите использовать PreparedStatement, попробовать что-то вроде этого

// create the preparedstatement 
PreparedStatement ps = conn.prepareStatement(
    "UPDATE yourTable SET title = ?, author = ? WHERE id = ?"); 

ps.setString(1,title); 
ps.setString(2,author); 
ps.setInt(3,id); 

//execute the upate 
ps.executeUpdate(); 
ps.close(); 
+0

Мне нужна функция обновления, не выберите @OldMcDonald –

+0

Попробуйте использовать PreparedStatements, тогда вы не сможете обновить ResultSets. Прочтите официальный документ для получения дополнительной информации: http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html – OldMcDonald

+0

Я сделал некоторое исследование на PreparedStatement, однако у меня нет подсказки, как это сделать, любая идея для этого ? Спасибо вам –

Смежные вопросы