這幾天剛做完資料庫的課程設計,來稍微總結一下如何通過jdbc訪問sql server資料庫進行簡單的增刪改查操作。在連接之前,需要簡單地配置一下,包括下載對應jdk版本的驅動,設置環境變數等等。相關配置可參考博客: https://blog.csdn.net/rebekahq/article/det ...
這幾天剛做完資料庫的課程設計,來稍微總結一下如何通過jdbc訪問sql server資料庫進行簡單的增刪改查操作。在連接之前,需要簡單地配置一下,包括下載對應jdk版本的驅動,設置環境變數等等。相關配置可參考博客: https://blog.csdn.net/rebekahq/article/details/78691343
我重點總結一下如何在java代碼里連接資料庫,進行增刪改查。先貼一段用來查詢資料庫的代碼實例:
1、查詢
1 package com.ph;
2 import java.sql.Connection;
3 import java.sql.DriverManager;
4 import java.sql.PreparedStatement;
5 import java.sql.ResultSet;
6 public class Test1 {
7
8 public static void main(String[]args) {
9 PreparedStatement ps=null;
10 Connection ct=null;
11 ResultSet rs=null;
12 try {
13 //1.載入驅動
14 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
15 //2.得到鏈接 127.0.0.1:1433
16 ct=DriverManager.getConnection
17 ("jdbc:sqlserver://127.0.0.1:1433;databaseName=Mytest","sa","123456");
18
19 ps=ct.prepareStatement("select * from course");
20 rs=ps.executeQuery();
21 while(rs.next()) {
22 String cno=rs.getString(1);
23 String cname=rs.getString(2);
24 String tno=rs.getString(3);
25 System.out.println("cno "+cno+" cname "+cname+" tno "+tno);
26 }
27 }catch(Exception e) {
28 e.printStackTrace();
29 }finally {
30 try {
31 if(rs != null)rs.close();
32 if(ps != null)ps.close();
33 if(ct != null)ct.close();
34 }catch(Exception e) {
35 e.printStackTrace();
36 }
37 }
38 }
39 }
分析一下代碼:
(1)、Class.forName() 如代碼中的註釋,第14行一整行代碼是用來載入sql server驅動的。那 Class.forName() 這個函數是用來幹嘛的呢,它的作用是:用來初始化給定的類,即引號裡面的類。如果換一種寫法:DriverManger.registerDriver(new Driver()); 更為直接點,直接初始化,也是可以的。對Class.forName()這個函數感興趣的,可以參考
http://www.jb51.net/article/117468.htm
(2)、DriverManger.getConnection() DriverManger這個類,查API就可以知道,是用來管理jdbc驅動的基本服務。如果把參數加上,就是:
static Connection DriverManger.getConnecttion(String url, String user, String password)
返回類型是Connection,其中的參數分別為:絕對路徑、用戶名、密碼。最好使用windows加Sql server混合驗證,在資料庫設置一下賬號和密碼,否則可能連不上。
絕對路徑是指本地資料庫的絕對路徑:jdbc:sqlserver://127.0.0.1:1433 其中包含了ip地址,對應的埠(這也是使用前必須設置好的,前面的鏈接有詳細教程)。
(3)、Connection介面介紹。 上一個方法的返回值,是Connection介面的一個實例對象,而Connection介面中的函數可以與連接的資料庫“對話”,註意:sql語句就是通過該介面的函數執行的。例如上述代碼中的:ps=ct.prepareStatement("select * from course"); Connection中的getMetaData方法還可以獲取已連接資料庫所支持的sql語法、存儲過程、此連接功能等信息。下麵介紹PreparedStatement對象。
(4)、PreparedStatement對象。上條方法的返回值ps即為其實例,這個類與執行sql語句的效率有關。Connection中的sql語句可以預編譯保存在PreparedStatement對象中(如ps),當需要執行該語句時,直接調用ps,不需要重覆地編譯select語句,提高了效率。
(5)、ResultSet。它用來承接PreparedStatement對象查詢到的結果,可以通過該對象中的方法來訪問資料庫。如代碼中的迴圈所示,一開始rs游標停在第一行的前面(註意,並非第一行),當第一次執行rs.next()函數時,游標才會到第一行,用一個while迴圈就可以遍歷整個表的行。而rs.getString(index)是用來返回第index列的值,是橫向的。註意:第一列的index就是1,而不是0,和數組下標有所區別。
(6)、整個代碼用try catch包起來,並且記得調用close方法依次關閉引用,做好善後工作,防止記憶體泄漏。(順序:後使用的率先關閉)
以上就是簡單的遍歷查詢方法,可以根據具體情況修改 sql語句、是否使用迴圈、以及迴圈跳出的條件。
2、修改
1 PreparedStatement ps=null;
2 Connection ct=null;
3 ResultSet rs=null;
4 try {
5 //1.載入驅動
6 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
7 //2.得到鏈接 127.0.0.1:1433
8 ct=DriverManager.getConnection
9 ("jdbc:sqlserver://127.0.0.1:1433;databaseName=student","sa","123456");
10
11 String sql="update s set sname=?,sex=?,age=?,saddress=?,"
12 + "spnumber=?,dno=?,political=? where sno=?";
13 ps=ct.prepareStatement(sql);
14 //給?賦值
15 ps.setString(1, jtf2.getText());
16 ps.setString(2, jtf3.getText());
17 ps.setString(3, jtf4.getText());
18 ps.setString(4, jtf5.getText());
19 ps.setString(5, jtf6.getText());
20 ps.setString(6, jtf7.getText());
21 ps.setString(7, jtf8.getText());
22 ps.setString(8, jtf1.getText());
23
24 ps.executeUpdate();
25 this.dispose();
26 }catch(Exception e) {
27 e.printStackTrace();
28 }finally {
29 try {
30 if(rs!=null)rs.close();
31 if(ps!=null)ps.close();
32 if(ct!=null)ct.close();
33 }catch(Exception e) {
34 e.printStackTrace();
35 }
36 }
這個是所做項目中截取的,getText( )方法是用來獲取輸入框內的內容的, ps.setString( i , String )前一個參數對應著sql語句中第 i個問號(?),而String可以理解要給問號(?)賦的值。當然,不一定是String類型,也可以是其他的類型。
3、刪除
1 public class DeleData {
2
3 PreparedStatement ps=null;
4 Connection ct=null;
5 ResultSet rs=null;
6 public DeleData(String sId){
7 try {
8 //1.載入驅動
9 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
10 //2.得到鏈接 127.0.0.1:1433
11 ct=DriverManager.getConnection
12 ("jdbc:sqlserver://127.0.0.1:1433;databaseName=student","sa","123456");
13
14 ps=ct.prepareStatement("delete from s where sno=?");
15 ps.setString(1, sId);
16 ps.executeUpdate();
17
18 }catch(Exception e) {
19 e.printStackTrace();
20 }finally {
21 try {
22 if(ps!=null) ps.close();
23 if(ps!=null) ct.close();
24 }catch(Exception e) {
25 e.printStackTrace();
26 }
27 }
28 }
29
30 }
換湯不換藥,看懂第一個,下麵的也該會了。
4、添加
1 public void actionPerformed(ActionEvent arg0) {
2 // TODO Auto-generated method stub
3 if(arg0.getSource()==jb1){
4 PreparedStatement ps=null;
5 Connection ct=null;
6 ResultSet rs=null;
7 try {
8 //1.載入驅動
9 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
10 //2.得到鏈接 127.0.0.1:1433
11 ct=DriverManager.getConnection
12 ("jdbc:sqlserver://127.0.0.1:1433;databaseName=student","sa","123456");
13
14 String sql="insert into s values(?,?,?,?,?,?,?,?)";
15 ps=ct.prepareStatement(sql);
16 ps.setString(1, jtf1.getText());
17 ps.setString(2, jtf2.getText());
18 ps.setString(3, jtf3.getText());
19 ps.setString(4, jtf4.getText());
20 ps.setString(5, jtf5.getText());
21 ps.setString(6, jtf6.getText());
22 ps.setString(7, jtf7.getText());
23 ps.setString(8, jtf8.getText());
24
25 ps.executeUpdate();
26 this.dispose();
27 }catch(Exception e) {
28 e.printStackTrace();
29 }finally {
30 try {
31 if(rs!=null)rs.close();
32 if(ps!=null)ps.close();
33 if(ct!=null)ct.close();
34 }catch(Exception e) {
35 e.printStackTrace();
36 }
37 }
38 }
39 }
以上代碼大多截取自最近做的學生檔案管理系統。。。也就是資料庫課程設計,用swing寫了一個小界面,也瞭解瞭如何通過jdbc連接訪問SQLserver,在eclipse中,對資料庫進行增刪改查操作。項目雖小,收穫還是挺大的,開森(/≧▽≦)/。
如有錯誤,歡迎批評指導!