轉載至:https://www.liyongzhen.com/
上一節課里我們學習通過PreparedStatement對象執行帶參數的查詢SQL和修改SQL。
這節課我們學習使用 PreparedStatement對象執行插入SQL,並且返回主鍵。
要返回主鍵,有一個前提,就是數據庫表必須有主鍵自增。
下面的代碼演示了執行插入SQL並返回主鍵的用法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
String sql =
"INSERT INTO products(`ProductName`,`SupplierID`,`CategoryID`,`Unit`,`Price`)VALUES(?,?,?,?,?);"
;
PreparedStatement statement =
connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
//加入參數Statement.RETURN_GENERATED_KEYS
statement.setString(
1
,
"milk"
);
//設置參數……
statement.setLong(
2
,
16
);
statement.setLong(
3
,
1
);
statement.setString(
4
,
"500ml"
);
statement.setBigDecimal(
5
,
new
BigDecimal(
5.6
));
int
value = statement.executeUpdate();
System.out.println(
"受影響的記錄數 "
+value);
int
id =
0
;
ResultSet rs = statement.getGeneratedKeys();
//得到生成的主鍵,主鍵放在ResultSet對象里
if
(rs.next()){
//提取主鍵值
id = rs.getInt(
1
);
}
System.out.println(
"主鍵 "
+id);
|
關鍵技術:
- 在創建PreparedStatement對象時,指定一個常量Statement.RETURN_GENERATED_KEYS,表示有返回主鍵的能力。
- 執行SQL語句時,仍然調用executeUpdate()方法。另外要調用getGeneratedKeys()方法,返回ResultSet對象。 ResultSet對象是結果集,存儲查詢結果,主鍵就保存在這里。
- 第三步,從ResultSet對象里提取主鍵。
完整代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class Insert {
public static void main(String[] args) {
String url = "jdbc:mysql://127.0.0.1:3306/northwind";
String user = "northwind";
String password = "northwind";
try (Connection connection = DriverManager.getConnection(url, user, password)) {
String sql = "INSERT INTO products(`ProductName`,`SupplierID`,`CategoryID`,`Unit`,`Price`)VALUES(?,?,?,?,?);";
PreparedStatement statement = connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
statement.setString(1, "milk");
statement.setLong(2, 16);
statement.setLong(3, 1);
statement.setString(4, "500ml");
statement.setBigDecimal(5, new BigDecimal(5.6));
int value = statement.executeUpdate();
System.out.println("受影響的記錄數 "+value);
int id = 0;
ResultSet rs = statement.getGeneratedKeys();
if(rs.next()){
id = rs.getInt(1);
}
System.out.println("主鍵 "+id);
rs.close();
statement.close(); // 關閉statement,釋資源
} catch (SQLException e) {
e.printStackTrace();
}
}
}
|