2016-10-19 4 views
0

Ich habe eine Java-App mit einer SQL-Datenbank mit preparedStatement, um Zeilen in die Datenbank einzufügen. Ich möchte, dass das Programm Zeilen basierend auf der Seriennummer aktualisieren kann (einmalig).Update SQL-Datenbank mit PreparedStatement in Java

Connection conn = null; 
    Statement st = null; 
try { 
    conn = DriverManager.getConnection ("jdbc:derby://localhost:1527/db01", "Administrator", "admin"); //run procedure getConnection to connect to the database - see below 
    st = conn.createStatement(); //set up a statement st to enable you to send SQL statements to the database. 
} catch (SQLException ex) { 
    Logger.getLogger(FormTwo1.class.getName()).log(Level.SEVERE, null, ex); 
} 


     System.out.println ("Successful Connection"); 

...

String query = "insert into TB01(SERIAL,BLADETYPE,STARTT1,AIRT1,FOAMT1,SCT1,FINISHT1) values (?, ?, ?, ?, ?, ?, ?)"; 
    try (PreparedStatement pstmt = conn.prepareStatement(query)) { 
     pstmt.setString(1, bladeSerial); 
     pstmt.setString(2, itemText); 
     pstmt.setString(3, String.valueOf(startTime1)); 
     pstmt.setString(4, String.valueOf(airTime1)); 
     pstmt.setString(5, String.valueOf(foamTime1)); 
     pstmt.setString(6, String.valueOf(scTime1)); 
     pstmt.setString(7, String.valueOf(finishTime1)); 
     pstmt.executeUpdate(); 
    } catch (SQLException ex) { 
     // Exception handling 
     Logger.getLogger(FormTwo1.class.getName()).log(Level.SEVERE, null, ex); 
    } 

Wo seriell, sind bladetype VARCHAR und startT1, foamTime1, scTime1 & finishTime1 werden alle Variablen Localtime (daher der String.valueOf für die Formatierung).

Die Datenbank DB01 ist, ist die Tabelle TB01

ich das Programm will die Datensätze abhängig von einfügen/aktualisieren, ob die Seriennummer ist bereits in der db.

+2

Was ist Ihre Frage? Wenn Sie Zeilen aktualisieren möchten, müssen Sie eine Anweisung 'UPDATE' und keine Anweisung 'INSERT' verwenden. Außerdem: Die Art, wie Sie es verwenden, 'TB01' ist eine _table_ keine" Datenbank ". –

+0

Entschuldigung, ich möchte, dass der Code ein Update einfügt, wenn es eine eindeutige Seriennummer ist, oder eine Zeile in der Datenbank aktualisieren, wenn sie bereits eingegeben wurde. Sie sind richtig, TB01 ist die Tabelle und DB01 ist die Datenbank. – Will

+1

In Derby können Sie dafür eine ['MERGE'] (https://db.apache.org/derby/docs/10.11/ref/rrefsqljmerge.html) Anweisung verwenden. Nicht verwandt, aber: Sie sollten Zahlen und Daten ** niemals als Strings weitergeben. ** Immer ** Verwenden Sie den entsprechenden Datentyp. Verwenden Sie 'setInt()' für Ganzzahlen, 'setDate()' für Daten, 'setTimestamp()' für Zeitstempel usw. –

Antwort

0

Der Code funktioniert jetzt. Danke für Prashant für seine Antwort. Sobald etwas abgewandelter es funktioniert gut

String query = ("UPDATE TB01 SET BLADETYPE=?,STARTT1=?,AIRT1=?,FOAMT1=?,SCT1=?,FINISHT1=? WHERE SERIAL=?"); 
try (PreparedStatement pstmt = conn.prepareStatement(query)) { 
    pstmt.setString(7, bladeSerial); 
    pstmt.setString(1, itemText); 
    pstmt.setString(2, String.valueOf(startTime1)); 
    pstmt.setString(3, String.valueOf(airTime1)); 
    pstmt.setString(4, String.valueOf(foamTime1)); 
    pstmt.setString(5, String.valueOf(scTime1)); 
    pstmt.setString(6, String.valueOf(finishTime1)); 
    pstmt.executeUpdate(); 
                  } 
catch (SQLException ex) { 
    // Exception handling 
    Logger.getLogger(FormTwo1.class.getName()).log(Level.SEVERE, null, ex); 
          } 

Hinweis als SERIAL zum Ende der Schnur gezogen war, die benötigt, um auch auf den setString Befehle ändern.

-2
try{ 
String host="jdbc:derby://localhost:1527/databasename"; 
String user="database_user_name"; 
String pass="database_password"; 
Connection con=DriverManager.getConnection(host,user,pass); 
PreparedStatement stmt=con.prepareStatement("update table_name set BLADETYPE=?,STARTT1=?,AIRT1=?,FOAMT1=?,SCT1=?,FINISHT1, where SERIAL=?"); 
stmt.setString(1, itemText); 
stmt.setString(2, String.valueOf(startTime1)); 
stmt.setString(3, String.valueOf(airTime1)); 
stmt.setString(4, String.valueOf(foamTime1)); 
stmt.setString(5, String.valueOf(scTime1)); 
stmt.setString(6, String.valueOf(finishTime1)); 
stmt.setString(7, bladeSerial); 
stmt.executeUpdate(); 
} 
catch (SQLException ex) { 
Logger.getLogger(FormTwo1.class.getName()).log(Level.SEVERE, null, ex); 
} 
+0

Vielen Dank. Ich bekomme jedoch einen Fehler mit diesem Code bei FINISHT1, wobei SERIAL =? – Will

+0

Ich änderte es zu FINISHT1 =? wo SERIAL =? ... aber der Code führt dann – Will

+0

nicht aus Verwenden Sie String-Objekt in Anführungszeichen "" und korrigieren Sie auch Ihre Datenbank und Tabellenname, weil Sie in Ihrer Frage denselben Namen für beide verwenden, die uns verwirren –

Verwandte Themen