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

来源:https://www.cnblogs.com/phdeblog/archive/2018/06/06/9147997.html
-Advertisement-
Play Games

這幾天剛做完資料庫的課程設計,來稍微總結一下如何通過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中,對資料庫進行增刪改查操作。項目雖小,收穫還是挺大的,開森(/≧▽≦)/。   

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • java 類修飾符:通常情況下使用 public 修飾,此時,java 強制要求 .java 文件名需與該 public 修飾類名一致,否則無法編譯通過。如若沒有加修飾符,文件名與類名可無任何關聯。 .java 文件建議僅聲明單個類,不要在同一個類文件,創建多個類。 PATH 添加時,可旋轉在當前 ...
  • 1 import java.io.File; 2 import java.text.DateFormat; 3 import java.util.Date; 4 5 public class FileDemo { 6 public static void main(String[] args) th... ...
  • Java中static使用方法一:Java中的static使用之靜態變數;二:Java中的static使用之靜態方法;三:Java中的static使用之靜態初始化快; ...
  • 曾經有人問我,為什麼要學習Python!我說:"因為我想學習爬蟲!""那你為什麼學習爬蟲呢?""因為可以批量下載很多很多妹子圖!"其實我都是為了學習,都是為了讓自己能更好的掌握Python,練手的項目!Emmmmm....沒錯,是為了學習 除了Python還能用什麼語言寫爬蟲? C,C++。高效率, ...
  • 一: 二: ...
  • 老師說,按繼承/多態/封裝這個順序來講。 子類使用父類的方法: 繼承的例子: 繼承順序: 多態的例子: ...
  • 在上一章的源碼分析里,我們知道了spring boot 2.0中的環境是如何區分普通環境和web環境的,以及如何準備運行時環境和應用上下文的,今天我們繼續分析一下run函數接下來又做了那些事情。先把run函數的代碼貼出來: 緊接著我們就看到了這行代碼:exceptionReporters1 = th ...
  • 但是同時使用元素的序號和元素本身也是常見的需求。我們經常看到一些程式員使用len()和range()來通過下標迭代列表,但是有一種更簡單的方式。 enumerate 函數可以同時遍歷元素及其序號。 Set類型 許多概念都可以歸結到對集合(set)的操作。例如:確認一個列表沒有重覆的元素;查看兩個列表 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...