日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網(wǎng)站首頁 編程語言 正文

使用JDBC連接數(shù)據(jù)庫執(zhí)行sql語句,創(chuàng)建數(shù)據(jù)庫連接池

作者:qq_48475590 更新時間: 2022-09-26 編程語言
JDBC俗稱java數(shù)據(jù)庫連接(java database connectivity)

我們使用IDEA開發(fā)工具,準備工作如下:
pom.xml配置mysql:<!--配置mysql驅動-->
               <dependency>
                   <groupId>mysql</groupId>
                   <artifactId>mysql-connector-java</artifactId>
                   <version>8.0.27</version>
               </dependency>
完成以上配置即可在.java文件中進行操作了

首先我們應該清楚知道java開發(fā)工具連接數(shù)據(jù)庫有什么好處
    1、將數(shù)據(jù)放數(shù)據(jù)庫能更好的保存數(shù)據(jù),數(shù)據(jù)庫里的數(shù)據(jù)也更好操作管理
    2、可以用java語言操縱sql語句去調用數(shù)據(jù)庫數(shù)據(jù)到程序中
    3、JDBC是有SUM提供的一套API,是使用java連接數(shù)據(jù)的一套標準API接口,各個數(shù)據(jù)庫提供上都實現(xiàn)了這一條接口提供了
      連接其提供的數(shù)據(jù)庫產品的實現(xiàn)類(以jar包形式,又稱為連接該數(shù)據(jù)庫的驅動包)

使用JDBC連接數(shù)據(jù)庫分為以下三步:
        1、加載驅動: Class.forName("數(shù)據(jù)庫包名")
        2、連接數(shù)據(jù)庫:DriverManager.getConnection("數(shù)據(jù)庫url(每種數(shù)據(jù)庫有指定格式)",用戶名,密碼);
        3、獲取執(zhí)行對象:有兩種方式,一種是預編譯執(zhí)行對象prepareStatement(sql語句);還有一種是直接編譯創(chuàng)建createStatement(sql語句);

前兩步是固定操作(隨著數(shù)據(jù)庫的改變而改變),我們重點學習第3步驟
    首先我們介紹執(zhí)行sql語句的方法有:
                execute是執(zhí)行DDL(create、drop、alter)語句;
                executeUpdate是執(zhí)行DML(delete、update、insert)語句; 返回int數(shù)據(jù),插入N條數(shù)據(jù)成功返回值就返回成功值N
                executeQuery是執(zhí)行DQL(select)語句;返回結果集ResultSet,可以查詢表中get對應字段信息。
    1、createStatement用法:
                Statement st = Connection連接對象.createStatement();
                int num = st.executeUpdate(sql語句);
                ResultSet rs = st.executeQuery(sql語句);
                while(ResultSet返回值結果集.next()){
                    字段類型 name = get[字段類型](字段名/字段位置);
                    ...
                };

     執(zhí)行方法:① 創(chuàng)建Statement執(zhí)行對象。
              ② 執(zhí)行Statement執(zhí)行對象方法execute(傳入拼接好的sql語句)。
              ③ 多次執(zhí)行同一條語句每次執(zhí)行的是將整個執(zhí)行對象發(fā)送給數(shù)據(jù)庫服務器(耗性能)
              ④ 判斷返回值要是碰到DQL語句executeQuery的話返回ResultSet結果集還需要進行操作。
              ⑤ ResultSet結果集拿取數(shù)據(jù)首先要獲取下一個行next()(這是mysql的操作,一次只能拿取一行信息,數(shù)據(jù)庫不同拿取操作和內容也不徑相同)。
              ⑥ 可以通過next()拿取一行數(shù)據(jù)來獲取字段信息。當然我們可加個while循環(huán)判斷就可以拿取查詢的全部行信息了。
              ⑦ 在next拿到數(shù)據(jù)行之后,使用get字段類型("字段名"/字段位置)來獲取當前一行中某個字段(相當于指定行指定列找到單元格一樣),不同的字段需要不同的類型接收。


    2、prepareStatement用法:
                String sql = "sql語句 可變參數(shù)用?表示[不能代表字段或表來使用,只能做一  ????????????????????????????????個參數(shù)變量]"
                PreparedStatement ps = Connection連接對象.prepareStatement(sql);
                ps.set[字段類型](第幾個?號位置,傳入字段數(shù)據(jù));
                ...
                int返回值 = ps.execteUpdate();

                ResultSet返回值結果集 = ps.execteQuery();
                while(ResultSet返回值結果集.next()){
                    字段類型 name = get[字段類型](字段名/字段位置);
                    ...
                };
     執(zhí)行方式:① 先將帶參(占位符?)的sql語句prepareStatement預處理(同條sql語句只執(zhí)行一次,在不斷變化的是參數(shù)值)
              ② 將參數(shù)用set方式給?占位符傳遞,可以不同的位置多次傳遞,傳遞對象是判斷條件中的字面量或者字段值,但是不能將占位符看做表來使用。
              ③ 用不同的execte執(zhí)行方法執(zhí)行不同的sql語句,預編譯時傳了sql語句,且返回值也不同。
              ④ 判斷返回值要是碰到DQL語句executeQuery的話返回ResultSet結果集還需要進行操作。
              ⑤ ResultSet結果集拿取數(shù)據(jù)首先要獲取下一個行next()(這是mysql的操作,一次只能拿取一行信息,數(shù)據(jù)庫不同拿取操作和內容也不徑相同)。
              ⑥ 可以通過next()拿取一行數(shù)據(jù)來獲取字段信息。當然我們可加個while循環(huán)判斷就可以拿取查詢的全部行信息了。
              ⑦ 在next拿到數(shù)據(jù)行之后,使用get字段類型("字段名"/字段位置)來獲取當前一行中某個字段(相當于指定行指定列找到單元格一樣),不同的字段需要不同的類型接收。

    如此我們可以兩者區(qū)分得出以下結論:
            1、PreparedStatement的sql語句可通過?占位來傳參。Statement是通過字符串拼接的方式傳遞參數(shù)。
                兩者最大的區(qū)別是什么呢?
            2、?占位傳參的話是需要指定?號位置和傳入對應參數(shù)指定字段類型的。而字符串拼接是連sql句都可以傳入進去(易被sql注入風險)直接更改執(zhí)行語句。
            3、在執(zhí)行性能上,如果執(zhí)行N條相同的sql語句時Statement(傳n條執(zhí)行語句)執(zhí)行效率是比不上PreparedStatement(傳n條語句的每個占位符實參)的。
            4、多次執(zhí)行同一條[傳參]sql語句的話不建議使用Statement,無論從語法可讀性、安全考慮還是性能考慮都應該使用預編譯執(zhí)行方式PreparedStatement。




數(shù)據(jù)庫連接池
pom配置:<!-- 數(shù)據(jù)庫連接池 -->
          <dependency>
              <groupId>com.alibaba</groupId>
              <artifactId>druid</artifactId>
              <version>1.1.21</version>
          </dependency>

Druid是阿里提供的數(shù)據(jù)庫連接池。
連接池的主要作用:
    1、控制連接數(shù)量
    2、重用連接
常用操作語法: DruidDataSource dds = new DruidDataSource(); //設置連接池
            //設置連接池數(shù)據(jù)庫的基本信息:
            dds = new DruidDataSource(); //實例化連接池對象
            dds.setUrl(數(shù)據(jù)庫Url地址(不同的數(shù)據(jù)庫有不同的地址));
            dds.setUsername(數(shù)據(jù)庫用戶名);
            dds.setPassword(數(shù)據(jù)庫密碼);
            dds.setInitialSize(初始線程數(shù));
            dds.setMaxActive(最大連接數(shù)(當初始線程數(shù)不夠用時才使用));
          //就可以開始連接數(shù)據(jù)庫了
          Connection connection = dds.getConnection(可以設置連接超時間隔時間);

原文鏈接:https://blog.csdn.net/qq_48475590/article/details/127041394

欄目分類
最近更新