jdbc連接sql server2017進行簡單的增、刪、改、查操作


        這幾天剛做完數據庫的課程設計,來稍微總結一下如何通過jdbc訪問sql server數據庫進行簡單的增刪改查操作。在連接之前,需要簡單地配置一下,包括下載對應jdk版本的驅動,設置環境變量等等。相關配置可參考博客: https://blog.csdn.net/rebekahq/article/details/78691343

        我重點總結一下如何在java代碼里連接數據庫,進行增刪改查。先貼一段用來查詢數據庫的代碼實例:

查詢

 package com.ph;  import java.sql.Connection;  import java.sql.DriverManager;  import java.sql.PreparedStatement;  import java.sql.ResultSet;  public class Test1 {  
     public static void main(String[]args) {          PreparedStatement ps=null;          Connection ct=null;          ResultSet rs=null;          try {              //1.加載驅動
             Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");              //2.得到鏈接 127.0.0.1:1433
             ct=DriverManager.getConnection                      ("jdbc:sqlserver://127.0.0.1:1433;databaseName=Mytest","sa","123456");          
             ps=ct.prepareStatement("select * from course");              rs=ps.executeQuery();              while(rs.next()) {                  String cno=rs.getString(1);                  String cname=rs.getString(2);                  String tno=rs.getString(3);                  System.out.println("cno "+cno+" cname "+cname+" tno "+tno);   }          }catch(Exception e) {   e.printStackTrace();          }finally {              try {   if(rs != null)rs.close();   if(ps != null)ps.close();   if(ct != null)ct.close();              }catch(Exception e) {   e.printStackTrace();   }   }   }  }

分析一下代碼:

(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語句、是否使用循環、以及循環跳出的條件。

修改

 PreparedStatement ps=null;              Connection ct=null;              ResultSet rs=null;              try {                  //1.加載驅動
                 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");                  //2.得到鏈接 127.0.0.1:1433
                 ct=DriverManager.getConnection                          ("jdbc:sqlserver://127.0.0.1:1433;databaseName=student","sa","123456");              
                 String sql="update s set sname=?,sex=?,age=?,saddress=?,"
                         + "spnumber=?,dno=?,political=? where sno=?";                  ps=ct.prepareStatement(sql);                  //給?賦值
                 ps.setString(1, jtf2.getText());                  ps.setString(2, jtf3.getText());                  ps.setString(3, jtf4.getText());                  ps.setString(4, jtf5.getText());                  ps.setString(5, jtf6.getText());                  ps.setString(6, jtf7.getText());                  ps.setString(7, jtf8.getText());                  ps.setString(8, jtf1.getText());  
  ps.executeUpdate();                  this.dispose();              }catch(Exception e) {   e.printStackTrace();              }finally {                  try {                      if(rs!=null)rs.close();                      if(ps!=null)ps.close();                      if(ct!=null)ct.close();                  }catch(Exception e) {   e.printStackTrace();   }              }

這個是所做項目中截取的,getText( )方法是用來獲取輸入框內的內容的, ps.setString(  i , String   )前一個參數對應着sql語句中第 i個問號(?),而String可以理解要給問號(?)賦的值。當然,不一定是String類型,也可以是其他的類型。

刪除

 public class DeleData {  
     PreparedStatement ps=null;      Connection ct=null;      ResultSet rs=null;      public DeleData(String sId){          try {              //1.加載驅動
             Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");              //2.得到鏈接 127.0.0.1:1433
             ct=DriverManager.getConnection                      ("jdbc:sqlserver://127.0.0.1:1433;databaseName=student","sa","123456");          
             ps=ct.prepareStatement("delete from s where sno=?");              ps.setString(1, sId);   ps.executeUpdate();              
         }catch(Exception e) {   e.printStackTrace();          }finally {              try {   if(ps!=null) ps.close();   if(ps!=null) ct.close();              }catch(Exception e) {   e.printStackTrace();   }   }   }      
 }

換湯不換葯,看懂第一個,下面的也該會了。

添加

     public void actionPerformed(ActionEvent arg0) {          // TODO Auto-generated method stub
         if(arg0.getSource()==jb1){              PreparedStatement ps=null;              Connection ct=null;              ResultSet rs=null;              try {                  //1.加載驅動
                 Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");                  //2.得到鏈接 127.0.0.1:1433
                 ct=DriverManager.getConnection                          ("jdbc:sqlserver://127.0.0.1:1433;databaseName=student","sa","123456");              
                 String sql="insert into s values(?,?,?,?,?,?,?,?)";                  ps=ct.prepareStatement(sql);                  ps.setString(1, jtf1.getText());                  ps.setString(2, jtf2.getText());                  ps.setString(3, jtf3.getText());                  ps.setString(4, jtf4.getText());                  ps.setString(5, jtf5.getText());                  ps.setString(6, jtf6.getText());                  ps.setString(7, jtf7.getText());                  ps.setString(8, jtf8.getText());  
  ps.executeUpdate();                  this.dispose();              }catch(Exception e) {   e.printStackTrace();              }finally {                  try {                      if(rs!=null)rs.close();                      if(ps!=null)ps.close();                      if(ct!=null)ct.close();                  }catch(Exception e) {   e.printStackTrace();   }   }   }      }

          以上代碼大多截取自最近做的學生檔案管理系統。。。也就是數據庫課程設計,用swing寫了一個小界面,也了解了如何通過jdbc連接訪問SQLserver,在eclipse中,對數據庫進行增刪改查操作。項目雖小,收獲還是挺大的,開森(/≧▽≦)/。   

          如有錯誤,歡迎批評指導!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM