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

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

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

前言

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

JDBC訪問(wèn)數(shù)據(jù)庫(kù)的方式 

一、連接前準(zhǔn)備  

1. 環(huán)境配置

我們右鍵點(diǎn)擊“開(kāi)始”菜單打開(kāi)“計(jì)算機(jī)管理”,接下來(lái)以此打卡樹(shù)形菜單,啟用所有協(xié)議。

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

 接下來(lái),重啟計(jì)算機(jī),在此之前請(qǐng)務(wù)必點(diǎn)擊“收藏”或“關(guān)注”,以免找不到下一步教程。

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

telnet localhost 1433

進(jìn)入只有光標(biāo)閃爍的空白頁(yè)面即通信成功。

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

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

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

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

 然后我們進(jìn)入IDEA,點(diǎn)擊File—>Priject Structure—>Libraries—> + —>Java —>Select Library Files,選擇sqljdbc.jar

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

 二、連接SQL Server

 JDBC的實(shí)現(xiàn)步驟

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

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

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

String databaseName = "數(shù)據(jù)庫(kù)名";
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 !");
        }

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

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

public class ConnectDb {
    public Connection conn;
}

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

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

下面就是實(shí)現(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語(yǔ)句
            String sql = "select * from " + tableName+" "+where;
            ResultSet rs = sqlStatement.executeQuery(sql);//執(zhí)行sql語(yǔ)句
            //下面根據(jù)該table輸出屬性組和所有元組
            rsmd = rs.getMetaData();//獲取屬性名
            String []arr = new String[0];
            if(rsmd != null) {
                int count = rsmd.getColumnCount();//統(tǒng)計(jì)屬性個(gè)數(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)建字符串對(duì)象
 
        try {
            Statement sqlStatement = conn.createStatement();//創(chuàng)建語(yǔ)句對(duì)象
            String sql = "select * from " + tableName;
            ResultSet rs = sqlStatement.executeQuery(sql);//執(zhí)行sql語(yǔ)句
            //下面根據(jù)該table輸出屬性組
            rsmd = rs.getMetaData();//獲取屬性名
            System.out.print("Input values according to :");
            if (rsmd != null) {
                int count = rsmd.getColumnCount();//統(tǒng)計(jì)屬性個(gè)數(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();
            //輸入需要添加的值用英文逗號(hào)分隔
            String values =in.next();
            String[] arr = values.split(",");
            for(int i = 0; i<arr.length; i++){
                //把每個(gè)分量按SQL格式依次輸入到對(duì)象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語(yǔ)句
            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語(yǔ)句
            String sql = "select * from " + tableName;
            ResultSet rs = sqlStatement.executeQuery(sql);//執(zhí)行sql語(yǔ)句
            //下面根據(jù)該table輸出屬性組
            rsmd = rs.getMetaData();//獲取屬性名
            Map map = new HashMap();
            System.out.print("Filter column. ");
            if (rsmd != null) {
                int count = rsmd.getColumnCount();//統(tǒng)計(jì)屬性個(gè)數(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以外的鍵自動(dòng)退出
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Execute failed !");
        }
    }

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

public void DeleteValue(String tableName){
        //選擇列名,詢問(wèn)是否刪除以下數(shù)據(jù),選擇Y刪除。
        ResultSetMetaData rsmd = null;
        Scanner in = new Scanner(System.in);
        try {
            Statement sqlStatement = conn.createStatement();//創(chuàng)建sql語(yǔ)句
            String sql = "select * from " + tableName;
            ResultSet rs = sqlStatement.executeQuery(sql);//執(zhí)行sql語(yǔ)句
            //下面根據(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)用查詢方法,查詢需要?jiǎng)h除的元組
            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í)行刪除語(yǔ)句
                System.out.println("Execute Successful !");
            } else if (YesOrNo.charAt(0) == 'N') {
                DeleteValue(tableName);//如果不刪除,重新選擇需要?jiǎng)h除的元組
            } else System.out.println("Input error! System exit.");//除Y和N以外的鍵自動(dòng)退出
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("Execute failed !");
        }
    }

5. 拓展

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

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

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

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

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

第二步,創(chuàng)建TableList方法,輸出數(shù)據(jù)庫(kù)內(nèi)所有表,并要求選擇一個(gè)表,將表名賦給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();
        }
    }

 第三步,補(bǔ)充main方法。

import java.util.Scanner;
 
public class Main {
    public static void main(String[] args) {
        ConnectDb connectDb = new ConnectDb("數(shù)據(jù)庫(kù)名","用戶名","密碼");
        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ù)庫(kù)實(shí)現(xiàn)增刪改查的文章就介紹到這了,更多相關(guān)JDBC連接SQLServer增刪改查內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java播放聲音類(lèi)和一個(gè)簡(jiǎn)單示例

    java播放聲音類(lèi)和一個(gè)簡(jiǎn)單示例

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

    Spring如何使用@Indexed加快啟動(dòng)速度

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

    解決idea導(dǎo)入maven項(xiàng)目缺少jar包的問(wèn)題方法

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

    詳解springMVC—三種控制器controller

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

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

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

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

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

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

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

    Java修改Integer變量值遇到的問(wèn)題及解決

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

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

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

    世界著名程序SpringMVC完整過(guò)程

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

最新評(píng)論

洛阳市| 米泉市| 墨玉县| 紫金县| 成安县| 于都县| 自贡市| 忻州市| 北安市| 桐乡市| 滨州市| 兴化市| 丰镇市| 辉南县| 二连浩特市| 阜阳市| 宝应县| 六安市| 建德市| 兴国县| 河北区| 库车县| 莱州市| 宁都县| 玉树县| 鹿邑县| 巴彦县| 留坝县| 湖南省| 山东省| 霍州市| 冕宁县| 成安县| 广水市| 北票市| 龙山县| 精河县| 吉林市| 安庆市| 开远市| 天镇县|