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

JDBC數(shù)據(jù)庫(kù)的使用操作總結(jié)

 更新時(shí)間:2013年05月03日 16:36:12   作者:  
本篇文章介紹了,JDBC數(shù)據(jù)庫(kù)的使用操作方法的一些總結(jié)。需要的朋友可以參考一下

JDBC是一組能夠執(zhí)行SQL語(yǔ)句的API

由于傳統(tǒng)的數(shù)據(jù)庫(kù)操作方式需要程序員掌握各個(gè)不同的數(shù)據(jù)庫(kù)的API,極其不便

因此java定義了JDBC這一標(biāo)準(zhǔn)的接口和類,為程序員操作數(shù)據(jù)庫(kù)提供了統(tǒng)一的方式

JDBC的操作方式比較單一,由五個(gè)流程組成:

1.通過(guò)數(shù)據(jù)庫(kù)廠商提供的JDBC類庫(kù)向DriverManager注冊(cè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)

2.使用DriverManager提供的getConnection()方法連接到數(shù)據(jù)庫(kù)

3.通過(guò)數(shù)據(jù)庫(kù)的連接對(duì)象的createStatement方法建立SQL語(yǔ)句對(duì)象

4.執(zhí)行SQL語(yǔ)句,并將結(jié)果集合返回到ResultSet中

5.使用while循環(huán)讀取結(jié)果

6.關(guān)閉數(shù)據(jù)庫(kù)資源

下面來(lái)看看具體操作Mysql數(shù)據(jù)庫(kù)的方法


準(zhǔn)備工作

首先我們需要建立一個(gè)數(shù)據(jù)庫(kù)和一張簡(jiǎn)單的表

復(fù)制代碼 代碼如下:

mysql> create database person;
Query OK, 1 row affected (0.00 sec)

mysql> use person;
Database changed
mysql> create table student(
    -> id int,
    -> name varchar(20),
    -> birth year
    -> ) default charset=utf8;
Query OK, 0 rows affected (0.10 sec)


然后往里面插入幾條數(shù)據(jù)
復(fù)制代碼 代碼如下:

mysql> insert into student values
    -> (1,'張三',1990),
    -> (2,'李四',1991),
    -> (3,'王五',1992);
Query OK, 3 rows affected (0.02 sec)
Records: 3  Duplicates: 0  Warnings: 0

這樣一張簡(jiǎn)單的表就建好了
復(fù)制代碼 代碼如下:

mysql> select * from student;
+------+--------+-------+
| id   | name   | birth |
+------+--------+-------+
|    1 | 張三   |  1990 |
|    2 | 李四   |  1991 |
|    3 | 王五   |  1992 |
+------+--------+-------+
 rows in set (0.00 sec)

接下來(lái),去mysql官網(wǎng)下載數(shù)據(jù)庫(kù)連接器這個(gè)包

其中這個(gè)包里面含有一份文檔,里面列舉了基本的使用方法,可以參考

我們的操作也是按照這份文檔中的內(nèi)容進(jìn)行,然后最主要的地方就是導(dǎo)入這個(gè)jar包

為了操作方便,這里使用eclipse來(lái)導(dǎo)入

右鍵項(xiàng)目-->構(gòu)件路徑-->添加外部歸檔,添加好了之后如下所示

現(xiàn)在我們正式開(kāi)始使用java來(lái)操作mysql數(shù)據(jù)庫(kù)

JDBC操作實(shí)例1:最簡(jiǎn)單的查詢操作

復(fù)制代碼 代碼如下:

import java.sql.*;

public class Demo {
    //為了代碼緊湊性,暫時(shí)拋出所有異常
    public static void main(String[] args) throws Exception {
        //注冊(cè)數(shù)據(jù)庫(kù)驅(qū)動(dòng)
        Class.forName("com.mysql.jdbc.Driver");
        //建立數(shù)據(jù)庫(kù)連接
        //參數(shù)一:jdbc:mysql//地址:端口/數(shù)據(jù)庫(kù),參數(shù)二:用戶名,參數(shù)三:密碼
        Connection conn = DriverManager.getConnection
                ("jdbc:mysql://localhost:3306/person","root","admin");
        //創(chuàng)建SQL語(yǔ)句
        Statement st = conn.createStatement();
        //執(zhí)行語(yǔ)句,返回結(jié)果
        ResultSet rt = st.executeQuery("show tables");
        //循環(huán)取出結(jié)果
        while(rt.next()) {
            //獲取字段
            System.out.println(rt.getString("Tables_in_person"));
        }
        //關(guān)閉資源,最先打開(kāi)的最后關(guān)
        rt.close();
        st.close();
        conn.close();
    }
}


運(yùn)行結(jié)果:student

如此便可執(zhí)行show tables語(yǔ)句查詢出當(dāng)前數(shù)據(jù)庫(kù)含有多少?gòu)埍?/P>

其中rt.getString()方法是獲取字段,這點(diǎn)需要注意

關(guān)閉資源的方式也與以往相反

不過(guò),上面的操作方式靈活性不大,并且不嚴(yán)謹(jǐn)


實(shí)例2:優(yōu)化的查詢操作

復(fù)制代碼 代碼如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Demo {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/person";
        String user = "root";
        String pwd = "admin";
        String sql = "select * from student";

        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(url,user,pwd);
            st = conn.createStatement();
            //執(zhí)行查詢語(yǔ)句,另外也可以用execute(),代表執(zhí)行任何SQL語(yǔ)句
            rs = st.executeQuery(sql);
            while(rs.next()) {
                System.out.println(rs.getObject(1) + "  " +
                        rs.getObject(2) + "  " + rs.getInt("birth"));
            }
        //分別捕獲異常
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                //判斷資源是否存在
                if(rs != null) {
                    rs.close();
                    //顯示的設(shè)置為空,提示gc回收
                    rs = null;
                }
                if(st != null) {
                    st.close();
                    st = null;
                }
                if(conn != null) {
                    conn.close();
                    conn = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }   
        }
    }
}


運(yùn)行結(jié)果:

這里把異常給分別捕獲了,并且相關(guān)的字符串全部用變量定義

需要注意下循環(huán)取出數(shù)據(jù)里面的getInt()方法,此處必須知道類型和字段才能取出

如果不知道可以使用getObject(1)取出第一列,getObject(2)取出第二列,以此類推

實(shí)例3:自定義變量插入到數(shù)據(jù)庫(kù)

復(fù)制代碼 代碼如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class Demo {
    public static void main(String[] args) {
        //參數(shù)檢查
        if (args.length != 3) {
            System.out.println("參數(shù)形式不對(duì)");
            System.exit(0);
        }
        String id = args[0];
        String name = args[1];
        String birth = args[2];
        String sql = "insert into student values(" + id + ",'" + name +
                "'," + "'" + birth + "')";
        System.out.println(sql);

        String url = "jdbc:mysql://localhost:3306/person";
        String user = "root";
        String pwd = "admin";

        Connection conn = null;
        Statement st = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(url,user,pwd);
            st = conn.createStatement();
            //注意,此處是excuteUpdate()方法執(zhí)行
            st.executeUpdate(sql);       
        //分別捕獲異常
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if(st != null) {
                    st.close();
                    st = null;
                }
                if(conn != null) {
                    conn.close();
                    conn = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }   
        }
    }
}


運(yùn)行結(jié)果:

這里運(yùn)行需要設(shè)置自變量,窗口中右鍵-->運(yùn)行方式-->運(yùn)行配置

然后在自變量里面寫4 susan 1993,我沒(méi)有寫中文,因?yàn)楫a(chǎn)生亂碼,目前還不清楚原因

需要注意的是,執(zhí)行插入的SQL語(yǔ)句比較難寫,最好是打印出SQL語(yǔ)句用以檢查

實(shí)例4:PreparedStatement應(yīng)用

從上面的Demo可以看到,插入數(shù)據(jù)的時(shí)候,SQL操作相當(dāng)不便

這里可以使用PreparedStatement對(duì)象來(lái)簡(jiǎn)化SQL語(yǔ)句的建立

復(fù)制代碼 代碼如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class Demo {

    public static void main(String[] args) {
        if (args.length != 3) {
            System.out.println("參數(shù)形式不對(duì)");
            System.exit(0);
        }
        String id = args[0];
        String name = args[1];
        String birth = args[2];

        String url = "jdbc:mysql://localhost:3306/person";
        String user = "root";
        String pwd = "admin";

        Connection conn = null;
        //聲明PreparedStatement對(duì)象的引用
        PreparedStatement pst = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(url,user,pwd);
            //使用?代替變量
            pst = conn.prepareStatement("insert into student values (?,?,?)");
            //給指定參數(shù)的位置設(shè)定變量
            pst.setString(1, id);
            pst.setString(2, name);
            pst.setString(3, birth);
            pst.executeUpdate();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if(pst != null) {
                    pst.close();
                    pst = null;
                }
                if(conn != null) {
                    conn.close();
                    conn = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }   
        }
    }
}


運(yùn)行結(jié)果:

實(shí)例5:Batch批處理

復(fù)制代碼 代碼如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class Demo {

    public static void main(String[] args) {

        String url = "jdbc:mysql://localhost:3306/person";
        String user = "root";
        String pwd = "admin";

        Connection conn = null;
        Statement st = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(url,user,pwd);
            st = conn.createStatement();
            //添加批處理
            st.addBatch("insert into student values(6,'Jerry','1995')");
            st.addBatch("insert into student values(7,'Greg','1996')");
            st.addBatch("insert into student values(8,'Ryan','1997')");
            //執(zhí)行批處理
            st.executeBatch();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            try {
                if(st != null) {
                    st.close();
                    st = null;
                }
                if(conn != null) {
                    conn.close();
                    conn = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }   
        }
    }
}


運(yùn)行結(jié)果:

批處理比較簡(jiǎn)單,只需先建立Statement對(duì)象,然后逐個(gè)添加批處理即可

最后使用executeBatch()方法執(zhí)行批處理

此外,PreparedStatement對(duì)象也可以使用批處理

復(fù)制代碼 代碼如下:

PreparedStatement ps = conn.prepareStatement("insert into student values(?,?,?)");
ps.setInt(1,8);
ps.setString(2,"GG");
ps.setString(3,"1996");
ps.addBatch();
ps.executeBatch();

實(shí)例6:Transaction事務(wù)處理

事務(wù)處理是要求sql以單元的形式更新數(shù)據(jù)庫(kù),要求其確保一致性

如銀行的轉(zhuǎn)賬業(yè)務(wù),一方轉(zhuǎn)出后,另一方則增加

如果出現(xiàn)異常,那么所有的操作則會(huì)回滾

復(fù)制代碼 代碼如下:

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class Demo {

    public static void main(String[] args) {

        String url = "jdbc:mysql://localhost:3306/person";
        String user = "root";
        String pwd = "admin";

        Connection conn = null;
        Statement st = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");
            conn = DriverManager.getConnection(url,user,pwd);
            //取消自動(dòng)提交
            conn.setAutoCommit(false);
            st = conn.createStatement();
            st.addBatch("insert into student values(6,'Jerry','1995')");
            st.addBatch("insert into student values(7,'Greg','1996')");
            st.addBatch("insert into student values(8,'Ryan','1997')");
            st.executeBatch();
            //提交后設(shè)置自動(dòng)提交
            conn.commit();
            conn.setAutoCommit(true);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();

        } catch (SQLException e) {
            e.printStackTrace();

            if(conn != null) {
                try {
                    //出現(xiàn)異常則回滾操作,然后設(shè)置自動(dòng)提交
                    conn.rollback();
                    conn.setAutoCommit(true);
                } catch (SQLException e1) {
                    e1.printStackTrace();
                }
            }
        } finally {
            try {
                if(st != null) {
                    st.close();
                    st = null;
                }
                if(conn != null) {
                    conn.close();
                    conn = null;
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }   
        }
    }
}


運(yùn)行結(jié)果:

相關(guān)文章

  • MySQL 分庫(kù)分表實(shí)踐

    MySQL 分庫(kù)分表實(shí)踐

    本文主要介紹了MySQL 分庫(kù)分表實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-03-03
  • mysql 報(bào)錯(cuò)This function has none of DETERMINISTIC解決方案

    mysql 報(bào)錯(cuò)This function has none of DETERMINISTIC解決方案

    這篇文章主要介紹了mysql 報(bào)錯(cuò)This function has none of DETERMINISTIC解決方案的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • 簡(jiǎn)單講解MySQL中的多源復(fù)制

    簡(jiǎn)單講解MySQL中的多源復(fù)制

    這篇文章主要介紹了簡(jiǎn)單講解MySQL中的多源復(fù)制,多源復(fù)制功能自從5.7.2版本以后被加入MySQL,需要的朋友可以參考下
    2015-04-04
  • MySQL中關(guān)于超鍵和主鍵及候選鍵的區(qū)別

    MySQL中關(guān)于超鍵和主鍵及候選鍵的區(qū)別

    這篇文章主要介紹了MySQL中關(guān)于超鍵和主鍵及候選鍵的區(qū)別說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • MYSQL將表名稱修改成大寫的存儲(chǔ)過(guò)程

    MYSQL將表名稱修改成大寫的存儲(chǔ)過(guò)程

    這篇文章主要為大家詳細(xì)介紹了MYSQL將表名稱修改成大寫的存儲(chǔ)過(guò)程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Mysql使用kill命令解決死鎖問(wèn)題

    Mysql使用kill命令解決死鎖問(wèn)題

    這篇文章主要介紹了Mysql使用kill命令解決死鎖問(wèn)題的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • 如何給mysql數(shù)據(jù)庫(kù)重新命名(操作步驟)

    如何給mysql數(shù)據(jù)庫(kù)重新命名(操作步驟)

    這篇文章主要介紹了如何給mysql數(shù)據(jù)庫(kù)重新命名,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • Windows版Mysql5.6.11的安裝與配置教程

    Windows版Mysql5.6.11的安裝與配置教程

    這篇文章詳細(xì)介紹了Windows下Mysql5.6.11的下載、安裝與配置教程,需要的朋友可以參考下
    2013-06-06
  • MySQL中慢SQL優(yōu)化方法小結(jié)

    MySQL中慢SQL優(yōu)化方法小結(jié)

    這篇文章主要為大家詳細(xì)介紹了MySQL中慢SQL優(yōu)化方法的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的小伙伴可以參考一下
    2024-04-04
  • MySQL分庫(kù)分表詳情

    MySQL分庫(kù)分表詳情

    互聯(lián)網(wǎng)項(xiàng)目中常用到的關(guān)系型數(shù)據(jù)庫(kù)是MySQL,隨著用戶和業(yè)務(wù)的增長(zhǎng),傳統(tǒng)的單庫(kù)單表模式難以滿足大量的業(yè)務(wù)數(shù)據(jù)存儲(chǔ)以及查詢,單庫(kù)單表中大量的數(shù)據(jù)會(huì)使寫入、查詢效率非常之慢,此時(shí)應(yīng)該采取分庫(kù)分表策略來(lái)解決。本篇文章主要介紹MySQL分庫(kù)分表,需要的朋友可以參考一下
    2021-09-09

最新評(píng)論

霞浦县| 贺兰县| 蕲春县| 西吉县| 乌海市| 房产| 南汇区| 卢湾区| 胶南市| 阳朔县| 高唐县| 宣汉县| 柯坪县| 海兴县| 宁津县| 紫金县| 冷水江市| 双桥区| 乐至县| 荆门市| 怀仁县| 来安县| 抚州市| 克什克腾旗| 台南市| 杭州市| 即墨市| 叙永县| 左权县| 长乐市| 德格县| 临邑县| 乌恰县| 堆龙德庆县| 中江县| 大方县| 交口县| 天镇县| 京山县| 湘阴县| 遂平县|