第15篇-JAVA JDBC程式設計
- 每篇一句 :對于勇敢者,嘗試是一條嶄新的生活之路
- 初學心得: 但對于坎坷與泥濘,能以平常之心視之,就非常不容易
- (筆者:JEEP/711)[JAVA筆記 | 時間:2017-05-08| JAVA JDBC程式設計 ]
1.JDBC概述
- 通過使用JDBC API,Java程式可以非常友善地操作各種主流資料庫,這是是Java語言的巨大魅力所在
- 由于Java語言的跨平台特性,是以使用JDBC API所編寫的程式不僅可以實作跨資料庫,還可以跨平台,具有非常優秀的可移植性
- 程式使用JDBC API以統一的方式來連接配接不同的資料庫,然後通過Statement對象來執行标準SQL語句,并可以獲得SQL語句通路資料庫的結果
2.JDBC驅動程式類型
- 1.JDBC驅動:稱為JDBC–ODBC橋,這種驅動是最早實作的JDBC驅動程式,主要目的是為了快速推廣JDBC。這種驅動程式将JDBC API映射到ODBC API。JDBC-ODBC也需要驅動,這種驅動由Sun公司提供實作
- 2.JDBC驅動:直接将JDBC API映射成資料庫特定的用戶端API。這種驅動程式包含特定資料庫的本地代碼,用于通路特定資料庫的用戶端
- 3.JDBC驅動:支援三層結構的JDBC通路方式。主要用于Applet階段,通過Applet通路資料庫
- 4.JDBC驅動:是純Java的,直接與資料庫執行個體互動。這種驅動是智能的,它知道資料庫使用的底層協定,這種驅動是目前最流行的JDBC驅動
3.安裝MySQL資料庫
- (1)下載下傳MySQL安裝檔案
- (2)開始安裝MySQL後,在出現的對話框中單擊“Next”按鈕
- (3)單擊對話框的“Next”按鈕,将出現選擇安裝元件和安裝路徑的對話框。
- (4)單擊對話框中的“Next”按鈕,将可開始安裝MySQL資料庫系統,安裝成功後,系統還要求配置MySQL資料庫
- (5)配置資料庫時注意選擇合适的字元集,并設定密碼
4.MySQL的常見指令
1.- 查詢資料庫:show databases;
2.- 删除資料庫:drop database 資料庫名;
3.- 進入資料庫:use 資料庫名
4.- 顯示建立庫名的所有資料:show tables;
5.- 輸出表名:desc 表名
6.SQL語句四大部分
7.- 資料定義語言(DDL):drop、create、alter
8.- 資料操作語言(DML):insert、update、delete
9.- 資料查詢語言(DQL):select、from、where、group by
10.- 資料控制語言(DCL):grant、revoke、commit、rollback
5.JDBC常用接口和類
- DriverManager
- Connection
- Statement
- PreparedStatement
- ResultSet
6.JDBC程式設計步驟
- (1)加載資料庫驅動
- (2)通過DriverManager擷取資料庫連接配接
- (3)通過Connection對象建立Statement對象
- (4)使用Statement執行SQL語句。所有Statement都有如下三個方法來執行SQL語句
- (5)操作結果集。如果執行的SQL語句是查詢語句,執行結果将傳回一個ResultSet對象,該對象裡儲存了SQL語句查詢的結果。程式可以通過操作該ResultSet對象來取出查詢結果
7.JDBC執行SQL語句的方式
- 使用executeUpdate執行DDL和DML語句
- 使用execute方法執行SQL語句
- 使用executeQuery方法執行查詢語句
8.資料庫連接配接池
資料庫連接配接池的解決方案是:當應用程式啟動時,系統主動建立足夠的資料庫連接配接,并将這些連接配接組成一個連接配接池
每次應用程式請求資料庫連接配接時,無需重新打開連接配接,而是從池中取出已有的連接配接使用,使用完後,不再關閉資料庫連接配接,而是直接将該連接配接歸還給連接配接池。通過使用連接配接池,将大大提高程式運作效率
資料庫連接配接池的常用參數有如下:
- 資料庫的初始連接配接數
- 連接配接池的最大連接配接數
- 連接配接池的最小連接配接數
- 連接配接池的每次增加的容量
9.兩種開源資料源
- DBCP:是Apache軟體基金組織下的開源連接配接池實作,該連接配接池依賴該組織下的另一個開源系統:common-pool
C3P0:資料源性能更勝一籌,Hibernate就推薦使用該連接配接池
C3P0連接配接池不僅可自動清理不再使用的Connection,還可以自動清理Statement和ResultSet
10.JDBC連接配接驅動執行個體
1.package cn.jdbc;
2.import java.sql.Connection;
3.import java.sql.DriverManager;
4.import java.sql.SQLException;
5./**
6. * 建立初始化并擷取
7. */
8.public class MyJdBc {
9. private static Connection cot = null;//聲明
10. //靜态代碼塊
11. static{
12. try {
13. Class.forName("com.mysql.jdbc.Driver");
14. //資料庫名稱,使用者名,密碼
15. cot = DriverManager.getConnection("jdbc:mysql://localhost:3306/sqltestdb","root","root");
16. if(!cot.isClosed()){
17. System.out.println("資料連接配接成功");
18. }
19. } catch (ClassNotFoundException e) {
20. e.printStackTrace();
21. }catch(SQLException e){
22. e.printStackTrace();
23. }
24. }
25. public static Connection getInstace(){
26. return cot;//傳回對象
27. }
28.}
1.package cn.jdbc;
2.import java.sql.Connection;
3.import java.sql.ResultSet;
4.import java.sql.SQLException;
5.import java.sql.Statement;
6.import java.text.DateFormat;
7.import java.text.ParseException;
8.import java.text.SimpleDateFormat;
9.import java.util.Date;
10.import com.mysql.jdbc.PreparedStatement;
11./**
12. * JAVA連接配接JDBC驅動器
13. * @author JEEP-711
14. *
15. */
16.public class JdBc {
17. @SuppressWarnings("unused")
18. public static void main(String[] args) throws SQLException, ParseException {
19. Connection cot = MyJdBc.getInstace();//連接配接
20. Statement st = cot.createStatement();//建立Statement類對象,來執行SQL語句
21. String sql = "select * from emp";//要執行的SQL語句
22. ResultSet rs = st.executeQuery(sql);//ResultSet類,用來存放擷取結果集
23. System.out.println("-----------------------------------------------");
24. System.out.println("------------------執行結果如下所示------------------");
25. System.out.println("-----------------------------------------------");
26. System.out.println("ID"+"\t"+"姓名"+"\t"+"職稱"+"\t"+"\t時期"+"\t"+"資金");
27. System.out.println("-----------------------------------------------");
28. /**
29. * 查詢
30. */
31. String job = null;//職位
32. String names = null;//姓名
33. String empon = null;//id号
34. String hiredate = null;//時期
35. String sal = null;//資金
36. while(rs.next()){
37. job = rs.getString("job");//擷取表中過得字段職稱st列資料
38. names = rs.getString("ename");//擷取姓名資料
39. empon = rs.getString("empon");//擷取ID号
40. hiredate = rs.getString("hiredate");//擷取時間時期
41. sal = rs.getString("sal");//擷取資金
42. System.out.println(empon+"\t"+names+"\t"+job+"\t"+hiredate+"\t"+sal);//輸出結果
43. /**
44. * 添加資料
45. */
46. PreparedStatement pl;
47. ResultSet res;
48. //預處理添加資料,其中有兩個參數--"?"
49. pl = (PreparedStatement) cot.prepareStatement("insert into emp (empon,ename,job,hiredate,sal)"+
50. "values(?,?,?,?,?)");
51. pl.setInt(1, 3211);//設定參數為1,id為3212
52. pl.setString(2, "王剛");//設定參數為2,name為王剛
53. pl.setString(3, "總裁");//設定參數3,職位為總裁
54. DateFormat df2 = new SimpleDateFormat("yyy-MM-dd");
55. Date myDate2 = df2.parse("2010-09-13");
56. pl.setDate(4, new java.sql.Date(myDate2.getTime()));
57. pl.setFloat(5, (float)2000.3);
58. pl.executeUpdate();//實行更新
59. /**
60. * 更新資料
61. */
62. //PreparedStatement gx;
63. //預處理更新(修改)資料,将王剛的sal修改為5000.00
64. pl = (PreparedStatement) cot.prepareStatement("update emp set sal = ? where ename = ?");
65. pl.setFloat(1,(float) 5000.00);
66. pl.setString(2, "王剛");
67. pl.executeUpdate();//實行修改
68. /**
69. * 删除資料
70. */
71. //PreparedStatement sc;
72. //預處理删除資料
73. pl = (PreparedStatement) cot.prepareStatement("delete from emp where sal > ?");
74. pl.setFloat(1, 4500);
75. pl.executeUpdate();//實行删除
76. pl.close();//關閉
77. }
78. rs.close();//關閉
79. cot.close();//關閉
80. } catch (ClassNotFoundException e) {
81. System.out.println("資料庫驅動異常");//資料庫驅動類異常處理
82. e.printStackTrace();
83. } catch (SQLException e) {
84. System.out.println("資料庫連接配接失敗");//資料庫連接配接失敗異常處理
85. e.printStackTrace();
86. } catch (Exception e) {
87. e.printStackTrace();
88. }finally{
89. System.out.println("資料庫資料成功擷取!");
90. }
91. }
92.}
初學(JAVA JDBC程式設計 進階階段) 難點: ★★★★★
希望每一篇文章都能夠對讀者們提供幫助與提升,這乃是每一位筆者的初衷
感謝您的閱讀 歡迎您的留言與建議
- FaceBook:JEEP SevenEleven
- Twitter:@JEEP7ll
- 新浪官方微網誌: @JEEP-711
- Github部落格: https://github.com/jeep711/jeep711.github.io
- Blog Garden:http://www.cnblogs.com/JEEP711/
- W3C/Blog:http://www.w3cschool.cn/jeep711blog/
- CSDN/Blog:http://blog.csdn.net/jeep911
- 51CTO/Blog:http://jeep711.blog.51cto.com/
- 碼雲:http://git.oschina.net/JEEP711/jeep711.github.io