數(shù)據(jù)庫的重要性顯而易見,不論是什么系統(tǒng),什么應(yīng)用軟件,也不論它們是 Windows 上的應(yīng)用程序,還是 Web 應(yīng)用程序,存儲(chǔ)(耐久化)和查詢(檢索)數(shù)據(jù)都是中心的功用。
大家學(xué)習(xí)數(shù)據(jù)庫時(shí),比方 MySQL 這個(gè)數(shù)據(jù)庫管理系統(tǒng),都是在 CLI(Command Line Interface)上操作數(shù)據(jù)庫的,如今,我們看看,在 Java Web 中,我們?nèi)绾芜\(yùn)用 Java 去操作數(shù)據(jù)庫。
JDBC
JDBC(Java Data Base Connectivity)是 Java 操作數(shù)據(jù)庫的一種標(biāo)準(zhǔn),也是一種 API(與數(shù)據(jù)庫系統(tǒng)停止通訊的規(guī)范的 API),更是一門技術(shù)。
簡單來講,JDBC 提供了一種 API 的標(biāo)準(zhǔn),通知各大數(shù)據(jù)庫廠商按這種標(biāo)準(zhǔn)來完成這些 API 詳細(xì)的完成代碼。能夠從兩個(gè)角色的角度來說這個(gè) JDBC。從我們開發(fā)人員的角度來說,JDBC 為我們開發(fā)人員提供了統(tǒng)一的操作數(shù)據(jù)庫的 API,不用管這些 API 的詳細(xì)完成,專注于 API 的調(diào)用;從數(shù)據(jù)庫廠商的角度來說,JDBC 為他們提供了一套規(guī)范的模型接口,都按這個(gè)接口去做本人的完成。
默許的 ResultSet 是不可更新的,同時(shí)它的游標(biāo)只能一步一步 next 下去,只能走一遍,不能回到上一行的。說了默許,那闡明是能夠設(shè)置的,經(jīng)過如下代碼停止設(shè)置:
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT a, b FROM TABLE2");
// rs 是能夠滾動(dòng)的,也就是游標(biāo)走到最后又會(huì)回到開頭繼續(xù)走,并且它的內(nèi)容是能夠被改動(dòng)的
查詢
找到價(jià)錢大于50塊錢的一切游戲:
String sql = "SELECT id, name, price FROM tb_game WHERE price > ?";
PreparedStatement ps = conn.preparedStatement(sql);
ps.setDouble(1, 50);
// 執(zhí)行查詢
ResultSet rs = ps.executeQuery(sql);
List gameList = new ArrayList<>();
// 遍歷結(jié)果集
while (rs.next()) {
Game game = new Game();
// 獲取當(dāng)前行中字段名為 id 的數(shù)據(jù),并賦值到 game 對(duì)象中
game.setId(rs.getInt("id"));
game.setName(rs.getString("name"));
game.setPrice(rs.getDouble("price"));
gameList.add(game);
}
System.out.println(gameList);
修正(更新)操作
修正(更新)數(shù)據(jù)的操作,也是和插入數(shù)據(jù)的操作是相似的。
更新 ID 為 3 的數(shù)據(jù)記載,修正其價(jià)錢為 298 塊錢。
String sql = "UPDATE tb_game SET price = ? WHERE id = ?";
PreparedStatement ps = conn.preparedStatement(sql);
ps.setDouble(1, 298);
ps.setInt(2, 3);
int row = ps.executeUpdate();
刪除操作
同理。
String sql = "DELETE FROM tb_game WHERE id = ?";
PreparedStatement ps = conn.preparedStatement(sql);
ps.setInt(1, 1);
int row = ps.executeUpdate();
分頁查詢
在 Java Web 中數(shù)據(jù)量十分大的狀況下,是不利于將一切數(shù)據(jù)都展現(xiàn)到一個(gè)頁面中的,查看不便當(dāng),又占用系統(tǒng)資源。此時(shí)就需求對(duì)數(shù)據(jù)停止分頁查詢,同時(shí),以后的工作中,能夠說大局部的業(yè)務(wù)場景都會(huì)觸及到分頁查詢。
在 MySQL 中,分頁能夠經(jīng)過其本身的 LIMIT 關(guān)鍵字來完成:
SELECT *
FROM tb_game
WHERE price > 50
ORDER BY price DESC
LIMIT 0, 10; // 從表中下標(biāo)0開端(第一行的下標(biāo)為0),限制返回10條記載
目前分頁觸及到這樣的兩個(gè)參數(shù):當(dāng)前頁碼和頁面大小。
觸及的 SQL 語句:SELECT * FROM tb_game WHERE price > 50 ORDER BY price DESC LIMIT 當(dāng)前頁碼, 頁面大小
// 分頁參數(shù)
int currentPage = 1, pageSize = 10;
// 分頁 SQL
String sql = "SELECT * FROM tb_game WHERE price > 50 ORDER BY price DESC LIMIT ?, ?";
PreparedStatement ps = conn.preparedStatement(sql);
// 賦值
ps.setInt(1, (page - 1) * pageSize);
ps.setInt(2, pageSize);
ResultSet rs = ps.executeQuery();