2016-07-11 10 views
1

Ich habe zwei Tabellen mit zwei Spalten zum Speichern von Anwendungseinstellungen in einer SQL-Datenbank. Meine Frage ist, wie man den Datensatz mit dem Ändern des dCreateTime Wertes in minus 1 Tag aktualisiert, und es gibt zwei Tabellen zum Anrufen wo userID = atest211. Mein Code scheint nicht zu funktionieren.JDBC - Wie aktualisiere Datensatz, wo Datum -1

Mein Code:

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(); 
     } 
    } 

Mein aktualisierten Code, es funktioniert immer noch nicht richtig

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

Warum der Selen-Tag? – Jens

+0

@Jens weil ich Automatisierungsteil für Updateaufzeichnung mache –

+1

Aber deine Frage hat nichts mit selen – Jens

Antwort

1

Credit @OldMcDonald, wie ich den Code ändern und es funktioniert leider gibt es einige Fehler bei der Select-Anweisung Beim Versuch, den Datensatz abzurufen, um zu überprüfen, ob der Datensatz aktualisiert wurde, wird folgender Fehler angezeigt: java.lang.NullPointerException. Beschlossen, den Fehler durch statement = connection.createStatement();

Hier ist der Code hinzu:

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

Sie das Update benötigen ... join .. gesetzt .. wo Syntax:

 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"; 

Als nächstes müssen Sie statement.execute(query); statt executeQuery(query) verwenden. Diese Methode gibt keine Ergebnismenge zurück.

Auch sollten Sie über SQL-Injektion lesen und vorbereitete Anweisungen verwenden.

2

Sie verwenden eine result set mit einem Update, das ist nicht möglich. Außerdem erhalten Sie in Ihrer while-Schleife grundsätzlich Werte aus der Datenbank, ohne sie zu aktualisieren. Wenn Sie Werte aktualisieren möchten, rate ich Ihnen, PreparedStatement zu verwenden. Wenn Sie möchten, dass Ihr Code funktioniert, versuchen Sie in Ihrer Abfrage SELECT anstelle von UPDATE zu verwenden.

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: Falls Sie ein PreparedStatement verwenden möchten, versuchen Sie so etwas wie dieses

// 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

Ich brauche eine Update-Funktion nicht wählen @OldMcDonald –

+0

Verwenden Sie PreparedStatements dann können Sie nicht mit ResultSets aktualisieren. Lesen Sie die offizielle Doku für weitere Informationen: http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html – OldMcDonald

+0

Ich habe etwas über PreparedStatement recherchiert, aber ich habe keine Ahnung, wie es geht, irgendeine Idee dafür ? Danke dir –

Verwandte Themen