最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JDBC連接SQL?Server數(shù)據(jù)庫實現(xiàn)增刪改查的全過程

 更新時間:2023年04月03日 11:46:47   作者:Richard?Du  
實際開發(fā)中手動的輸入SQL語句是少之又少,大多數(shù)情況下是通過編譯代碼進行來控制自動執(zhí)行,下面這篇文章主要給大家介紹了關(guān)于JDBC連接SQL?Server數(shù)據(jù)庫實現(xiàn)增刪改查的相關(guān)資料,需要的朋友可以參考下

前言

JDBC的全稱是Java數(shù)據(jù)庫連接(Java DataBase Connectivity) ,應(yīng)用程序通過JDBC連接到數(shù)據(jù)庫,使用SQL語句對數(shù)據(jù)庫中的表進行查詢、增加、修改、刪除等操作。此文章提供JDBC連接SQL Server的所有步驟,幫助大家實現(xiàn)Java對數(shù)據(jù)庫的增刪改查!

JDBC訪問數(shù)據(jù)庫的方式 

一、連接前準備  

1. 環(huán)境配置

我們右鍵點擊“開始”菜單打開“計算機管理”,接下來以此打卡樹形菜單,啟用所有協(xié)議。

 下一步,打開控制面版—>程序—>程序與功能—>啟用或關(guān)閉Windows功能 —>勾選 Telnet客戶端

 接下來,重啟計算機,在此之前請務(wù)必點擊“收藏”或“關(guān)注”,以免找不到下一步教程。

 重啟后,按Win+R,輸入cmd后按回車,輸入命令:

telnet localhost 1433

進入只有光標閃爍的空白頁面即通信成功。

2. 導(dǎo)入JDBC Driver包

下面講解的方法都是基于 IntelliJ IDEA 軟件,如果是 Eclipse 會有細微差別。

首先,在連接JDBC之前,需要下載MS JDBC Driver包,下載地址:Download Microsoft SQL Server JDBC 驅(qū)動程序 6.0 from Official Microsoft Download Center

下載完后解壓縮并打開,我們可以看到有 jre7和jre8兩個Java環(huán)境下使用的JDBC包,分別對應(yīng)兩個不同的jar包。需要根據(jù)自己的安裝的Java版本進行選擇,jre8即最新版本,如果出現(xiàn)SSL連接異常需要降低JDK版本。

 然后我們進入IDEA,點擊File—>Priject Structure—>Libraries—> + —>Java —>Select Library Files,選擇sqljdbc.jar

 如果能在首頁看到External Libraries下面有sqljdbc42即表示導(dǎo)入成功。

 二、連接SQL Server

 JDBC的實現(xiàn)步驟

通過上圖我們了解到,想要實現(xiàn)JDBC首先就需要加載并注冊數(shù)據(jù)庫驅(qū)動。第一步,加載并注冊驅(qū)動可以通過java.lang.Class類的靜態(tài)方法forName實現(xiàn)。

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

 第二步,通過DriverManager類的getConnection方法實現(xiàn)數(shù)據(jù)庫連接。

String databaseName = "數(shù)據(jù)庫名";
String username = "用戶名";
String password = "密碼";
String dbURL = "jdbc:sqlserver://localhost:1433;databaseName=" + databaseName;
Connection conn = DriverManager.getConnection(dbURL, username, password);

第三步,try…catch拋出異常。

 
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver";);
            String dbURL = "jdbc:sqlserver://localhost:1433;databaseName=" + databaseName;
            Connection conn = DriverManager.getConnection(dbURL, username, password);
            System.out.println("Successful Connection !");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Connection failed !");
        }

 三、實現(xiàn)增刪改查

實現(xiàn)增刪改查之前,為了閱讀方便,我們需要新建一個容納這些功能的類,并且創(chuàng)建兩個類變量,方便在各個方法中調(diào)用。這里我們將類命名為ConnectionDb,創(chuàng)建Connection對象conn。

public class ConnectDb {
    public Connection conn;
}

接下來創(chuàng)建四個方法:查詢、增加、修改、刪除。

public class ConnectDb {
    private Connection conn;
    public void SelectAll(){}//查詢表
    public void AddValue(){}//添加數(shù)據(jù)
    public void DeleteValue(){}//修改數(shù)據(jù)
    public void ModifyValue(){}//刪除數(shù)據(jù)
}

下面就是實現(xiàn)方法的代碼: 

1. 查詢數(shù)據(jù)

public void SelectAll(String tableName,String where) {
        ResultSetMetaData rsmd = null;
        try {//try catch判斷是否有異常
            Statement sqlStatement = conn.createStatement();//創(chuàng)建sql語句
            String sql = "select * from " + tableName+" "+where;
            ResultSet rs = sqlStatement.executeQuery(sql);//執(zhí)行sql語句
            //下面根據(jù)該table輸出屬性組和所有元組
            rsmd = rs.getMetaData();//獲取屬性名
            String []arr = new String[0];
            if(rsmd != null) {
                int count = rsmd.getColumnCount();//統(tǒng)計屬性個數(shù)
                arr = new String[count];
                for (int i = 1; i <= count; i++) {
                    arr[i-1] = rsmd.getColumnName(i);//把屬性名輸入arr
                    System.out.print(rsmd.getColumnName(i)+"  ");//輸出屬性名
                }
            }
            System.out.println();//換一行,保證格式正確
            while (rs.next()) {
                //判斷是否存在下一行,如果存在,就使用foreach循環(huán)輸出元組
                for (String s : arr) {
                    System.out.print(rs.getString(s) + "  ");
                }
                System.out.println();//控制格式
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

2. 添加數(shù)據(jù)

public void AddValue(String tableName){
        ResultSetMetaData rsmd = null;
        Scanner in = new Scanner(System.in);
        StringBuilder s1 = new StringBuilder();//創(chuàng)建字符串對象
 
        try {
            Statement sqlStatement = conn.createStatement();//創(chuàng)建語句對象
            String sql = "select * from " + tableName;
            ResultSet rs = sqlStatement.executeQuery(sql);//執(zhí)行sql語句
            //下面根據(jù)該table輸出屬性組
            rsmd = rs.getMetaData();//獲取屬性名
            System.out.print("Input values according to :");
            if (rsmd != null) {
                int count = rsmd.getColumnCount();//統(tǒng)計屬性個數(shù)
                for (int i = 1; i <= count; i++) {
                    if(i<count){
                        //輸出屬性名
                        System.out.print(rsmd.getColumnName(i) + "["+rsmd.getColumnTypeName(i)+"("+rsmd.getColumnDisplaySize(i)+")],");
                    }else System.out.print(rsmd.getColumnName(i) + "["+rsmd.getColumnTypeName(i)+"("+rsmd.getColumnDisplaySize(i)+")]");
                }
            }
            System.out.println();
            //輸入需要添加的值用英文逗號分隔
            String values =in.next();
            String[] arr = values.split(",");
            for(int i = 0; i<arr.length; i++){
                //把每個分量按SQL格式依次輸入到對象s1中
                if(i<arr.length-1)
                {
                    s1.append("'").append(arr[i]).append("',");
                }else s1.append("'").append(arr[i]).append("'");
            }
            String insertSql = "insert into " + tableName + " values("+s1+")";//SQL語句
            sqlStatement.executeUpdate(insertSql);
            System.out.println("Execute Successful !");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Execute failed !");
        }
    }

3. 修改數(shù)據(jù)

public void ModifyValue(String tableName){
        ResultSetMetaData rsmd = null;
        Scanner in = new Scanner(System.in);
        try {
            Statement sqlStatement = conn.createStatement();//創(chuàng)建sql語句
            String sql = "select * from " + tableName;
            ResultSet rs = sqlStatement.executeQuery(sql);//執(zhí)行sql語句
            //下面根據(jù)該table輸出屬性組
            rsmd = rs.getMetaData();//獲取屬性名
            Map map = new HashMap();
            System.out.print("Filter column. ");
            if (rsmd != null) {
                int count = rsmd.getColumnCount();//統(tǒng)計屬性個數(shù)
                for (int i = 1; i <= count; i++) {
                    map.put(i,rsmd.getColumnName(i));
                    System.out.print("["+i+": "+rsmd.getColumnName(i)+"]");//輸出屬性名
                }
            }
            System.out.print("\nInput the number: ");//篩選屬性
            Object num = in.nextInt();
            System.out.print("Filter value: ");//篩選元組
            String value = in.next();
            SelectAll(tableName,"where "+map.get(num)+"='"+value+"'");//調(diào)用查詢方法,查詢篩選數(shù)據(jù)
            System.out.println("Are these values that need to be modified? [Y/N]");
            String YesOrNo = in.next();
            if(YesOrNo.charAt(0) == 'Y')
            {
                System.out.println("Which column should be modified?");
                if (rsmd != null) {//輸出屬性名
                    int count = rsmd.getColumnCount();
                    for (int i = 1; i <= count; i++) {
                        System.out.print("["+i+": "+rsmd.getColumnName(i)+"]");
                    }
                }
                System.out.print("\nInput the number: ");//輸入需要修改的屬性
                int num2 = in.nextInt();
                System.out.println("What value is modified to?");//修改成什么值
                String value2 = in.next();
                String modifySql = "update "+tableName+" set "+map.get(num2)+"='"+value2+"'"+" where "+map.get(num)+"="+"'"+value+"'";
                sqlStatement.executeUpdate(modifySql);
                System.out.println("Execute Successful !");
            } else if (YesOrNo.charAt(0) == 'N') {
                ModifyValue(tableName);//如果不修改以上內(nèi)容,重新選擇需要修改的元組
            } else System.out.println("Input error! System exit.");//除Y和N以外的鍵自動退出
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Execute failed !");
        }
    }

4. 刪除數(shù)據(jù)

public void DeleteValue(String tableName){
        //選擇列名,詢問是否刪除以下數(shù)據(jù),選擇Y刪除。
        ResultSetMetaData rsmd = null;
        Scanner in = new Scanner(System.in);
        try {
            Statement sqlStatement = conn.createStatement();//創(chuàng)建sql語句
            String sql = "select * from " + tableName;
            ResultSet rs = sqlStatement.executeQuery(sql);//執(zhí)行sql語句
            //下面根據(jù)該table輸出屬性組
            rsmd = rs.getMetaData();//獲取屬性名
            Map map = new HashMap();
            System.out.print("Filter column. ");//篩選屬性
            if (rsmd != null) {//輸出屬性名
                int count = rsmd.getColumnCount();
                for (int i = 1; i <= count; i++) {
                    map.put(i,rsmd.getColumnName(i));
                    System.out.print("["+i+": "+rsmd.getColumnName(i)+"]");
                }
            }
            System.out.print("\nInput the number: ");
            Object num = in.nextInt();
            System.out.println("Filter value: ");//篩選元組
            String value = in.next();
            System.out.println("These values will be deleted.");
            SelectAll(tableName,"where "+map.get(num)+"='"+value+"'");//調(diào)用查詢方法,查詢需要刪除的元組
            System.out.println("[Y/N]?");
            String YesOrNo = in.next();
            if(YesOrNo.charAt(0) == 'Y')
            {
                String deleteSql = "delete from "+tableName+" where "+map.get(num)+"='"+value+"'";
                sqlStatement.executeUpdate(deleteSql);//執(zhí)行刪除語句
                System.out.println("Execute Successful !");
            } else if (YesOrNo.charAt(0) == 'N') {
                DeleteValue(tableName);//如果不刪除,重新選擇需要刪除的元組
            } else System.out.println("Input error! System exit.");//除Y和N以外的鍵自動退出
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Execute failed !");
        }
    }

5. 拓展

數(shù)據(jù)庫增刪改功能定義好后我們可以進一步整合,首先在main方法中調(diào)用并測試。

connectDb.SelectAll("表名","where條件句");//where條件句為空則查詢所有元組
connectDb.AddValue("表名");//增加元組
connectDb.DeleteValue("表名");//刪除元組
connectDb.ModifyValue("表名");//修改元組

我們可以發(fā)現(xiàn),在操作表時,我們必須在方法中輸入實參:表名,如果操作不同的表就需要再次修改實參,下面我們定義一個可以自行選擇數(shù)據(jù)庫表名的方法。

第一步,在class ConnectDb中聲明一個tableName全局變量。

public class ConnectDb {
    public String tableName;
    ...
}

第二步,創(chuàng)建TableList方法,輸出數(shù)據(jù)庫內(nèi)所有表,并要求選擇一個表,將表名賦給tableName,代碼如下。

public void TableList(){
        Scanner in = new Scanner(System.in);
        Map map = new HashMap();
        int i = 0;
        try {
            DatabaseMetaData metaData = conn.getMetaData();
            ResultSet mrs = metaData.getTables(null, null, null, new String[]{"TABLE"});
            while (mrs.next()) {
                i++;
                map.put(i, mrs.getString(3));
                System.out.println("[" + i + ": " + mrs.getString(3) + "]");
            }
            System.out.print("Input the number: ");
            int num = in.nextInt();
            this.tableName = (String) map.get(num);
        }catch (Exception e){
            e.printStackTrace();
        }
    }

 第三步,補充main方法。

import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        ConnectDb connectDb = new ConnectDb("數(shù)據(jù)庫名","用戶名","密碼");
        System.out.println("Please choose a table.");
        connectDb.TableList();
        String n;
        do {//Y/N判斷是否繼續(xù)操作數(shù)據(jù)表
            System.out.println("Please choose an operation.\n[1: Select all rows],[2: Add values],[3: Delete values],[4: Modify values]");
            Scanner in = new Scanner(System.in);
            System.out.print("Input the number: ");
            int i = in.nextInt();
            switch (i) {
                case 1:
                    connectDb.SelectAll(connectDb.tableName,"");//查詢所有元組
                    break;
                case 2:
                    connectDb.AddValue(connectDb.tableName);//增加元組
                    break;
                case 3:
                    connectDb.DeleteValue(connectDb.tableName);//刪除元組
                    break;
                case 4:
                    connectDb.ModifyValue(connectDb.tableName);//修改元組
            }
            System.out.println("Do you wanna continue to operate? [Y/N]");
            n = in.next();
        }while((n.charAt(0) == 'Y') && (n.charAt(0) != 'N'));
    }
}

結(jié)果展示。

總結(jié)

到此這篇關(guān)于JDBC連接SQL Server數(shù)據(jù)庫實現(xiàn)增刪改查的文章就介紹到這了,更多相關(guān)JDBC連接SQLServer增刪改查內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java播放聲音類和一個簡單示例

    java播放聲音類和一個簡單示例

    這篇文章主要介紹了一個java播放聲音類和一個java播放聲音的應(yīng)用程序,應(yīng)用程序可以單次播放聲音、循環(huán)播放聲音,需要的朋友可以參考下
    2014-03-03
  • Spring如何使用@Indexed加快啟動速度

    Spring如何使用@Indexed加快啟動速度

    這篇文章主要介紹了Spring如何使用@Indexed加快啟動速度,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 解決idea導(dǎo)入maven項目缺少jar包的問題方法

    解決idea導(dǎo)入maven項目缺少jar包的問題方法

    這篇文章主要介紹了解決idea導(dǎo)入maven項目缺少jar包的問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06
  • 詳解springMVC—三種控制器controller

    詳解springMVC—三種控制器controller

    本篇文章主要介紹了springMVC—三種控制器controller,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • Spring如何基于Proxy及cglib實現(xiàn)動態(tài)代理

    Spring如何基于Proxy及cglib實現(xiàn)動態(tài)代理

    這篇文章主要介紹了Spring如何基于Proxy及cglib實現(xiàn)動態(tài)代理,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • MyBatis如何進行雙重foreach循環(huán)

    MyBatis如何進行雙重foreach循環(huán)

    這篇文章主要介紹了MyBatis如何進行雙重foreach循環(huán),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Java實現(xiàn)俄羅斯方塊游戲簡單版

    Java實現(xiàn)俄羅斯方塊游戲簡單版

    這篇文章主要為大家詳細介紹了Java實現(xiàn)俄羅斯方塊游戲簡單版,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java修改Integer變量值遇到的問題及解決

    Java修改Integer變量值遇到的問題及解決

    這篇文章主要介紹了Java修改Integer變量值遇到的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java編程實現(xiàn)打地鼠文字游戲?qū)嵗a

    Java編程實現(xiàn)打地鼠文字游戲?qū)嵗a

    這篇文章主要介紹了Java編程實現(xiàn)打地鼠文字游戲?qū)嵗a,具有一定借鑒價值,需要的朋友可以參考下。
    2017-11-11
  • 世界著名程序SpringMVC完整過程

    世界著名程序SpringMVC完整過程

    這篇文章主要為大家介紹了世界著名程序SpringMVC實現(xiàn)過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05

最新評論

五家渠市| 田林县| 浦江县| 台南县| 繁昌县| 天峻县| 广灵县| 华容县| 五指山市| 衡阳县| 禄劝| 潼关县| 津南区| 泰顺县| 甘孜县| 汽车| 石楼县| 新沂市| 河池市| 云阳县| 墨脱县| 宣恩县| 贵州省| 万山特区| 静海县| 兴山县| 苍梧县| 临桂县| 渑池县| 都昌县| 泸西县| 年辖:市辖区| 云南省| 惠水县| 萍乡市| 蒲城县| 溆浦县| 黑河市| 威远县| 建湖县| 沂源县|