データベースに行を挿入するためにpreparedStatementを使用してSQLデータベースを持つJavaアプリケーションがあります。シリアルナンバー(ユニーク)に基づいて行を更新できるようにしたい。JavaでpreparedStatementでSQLデータベースを更新
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);
}
シリアル、bladetypeはVARCHARとstartT1、foamTime1、scTime1 & finishTime1はすべてにLocalTime変数(フォーマットするので、string.valueof)されているところ。
データベースがDB01で、表には、私はプログラムがレコードはシリアル番号がDBにすでにあるかどうかに依存して更新/挿入したいTB01
です。
あなたの質問は何ですか?行を更新する場合は、 'INSERT'文ではなく' UPDATE'文を使用する必要があります。また、あなたがそれを使用する方法では、 'TB01'は_table_ではなく"データベース "です。 –
申し訳ありませんが、コードが一意のシリアルである場合は更新を挿入し、既に入力されている場合はdbを更新します。あなたは正しいです、TB01はテーブル、DB01はデータベースです。 – Will
Derbyでは、そのために['MERGE'](https://db.apache.org/derby/docs/10.11/ref/rrefsqljmerge.html)ステートメントを使用することができます。無関係ですが、数字や日付を文字列として渡すことは絶対に避けてください。 **常に**適切なデータ型を使用してください。整数は 'setInt()'、日付は 'setDate()'、タイムスタンプは 'setTimestamp()'など –