麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

jdbc一般步驟

2019-11-14 10:10:57
字體:
供稿:網(wǎng)友

java 原生JDBC操作數(shù)據(jù)庫,是比較常見的面試題,所以一定要牢牢掌握住。

記住一般步驟,就好寫代碼了。

1、Class.forName()加載數(shù)據(jù)庫連接驅(qū)動。

2、DriverManager.getConnection()獲取數(shù)據(jù)連接對象。

3、根據(jù)SQL語句獲取會話對象,會話對象一般用PReparedStatement類型,conn.prepareStatement(),注意方法名和類名不一樣喲。

4、執(zhí)行SQL處理結(jié)果集,執(zhí)行SQL前如果有參數(shù)值就設(shè)置參數(shù)值setXXX()。

5、關(guān)閉結(jié)果集、關(guān)閉會話、關(guān)閉連接。

[java] view plain copy 在CODE上查看代碼片package com.lcx.test;    import java.sql.Connection;  import java.sql.DriverManager;  import java.sql.PreparedStatement;  import java.sql.ResultSet;  import java.sql.SQLException;  import java.sql.Savepoint;  import java.util.Properties;    public class Test {      public static void main(String[] args) {          String url1="jdbc:MySQL://localhost:3306/JAVA?user=root&passWord=root&useUnicode=true&charactorEncoding=UTF8";          String url2="jdbc:mysql://localhost:3306/JAVA?useUnicode=true&charactorEncoding=UTF8";          String url3="jdbc:mysql://localhost:3306/JAVA";          String user="root";          String password="root";          Connection conn3 = null;          Savepoint point1 = null;                    try {              //1、加載數(shù)據(jù)庫驅(qū)動,包名一般為域名反寫              Class.forName("com.mysql.jdbc.Driver");              Properties info = new Properties();              info.put("user", "root");              info.put("password", "root");              info.put("useUnicode","true");              info.put("charactorEncoding","utf8");              /*              * 2、獲取數(shù)據(jù)連接對象,DriverManager.getConnection方法有3個(gè)重載方法              */  //          Connection conn1 = DriverManager.getConnection(url3, user, password);//將連接的用戶名、密碼放到方法參數(shù)中  //          Connection conn2 = DriverManager.getConnection(url2,info);//將連接的屬性鍵值對放在Properties對象中              conn3 = DriverManager.getConnection(url1);//將所有連接信息都放在URL中              /*              * 3、根據(jù)SQL獲取sql會話對象,有2種方式 Statement、PreparedStatement              *      1、 PreparedStatement接口繼承Statement, PreparedStatement 實(shí)例包含已編譯的 SQL 語句,所以其執(zhí)行速度要快于 Statement 對象。              *      2、作為 Statement 的子類,PreparedStatement 繼承了 Statement 的所有功能。三種方法  execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要參數(shù)              *      3、在JDBC應(yīng)用中,如果你已經(jīng)是稍有水平開發(fā)者,你就應(yīng)該始終以PreparedStatement代替 Statement.也就是說,在任何時(shí)候都不要使用Statement.              *          一.代碼的可讀性和可維護(hù)性.Statement需要不斷地拼接,而PreparedStatement不會。              *          二.PreparedStatement盡最大可能提高性能.DB有緩存機(jī)制,相同的預(yù)編譯語句再次被調(diào)用不會再次需要編譯。              *          三.最重要的一點(diǎn)是極大地提高了安全性.Statement容易被SQL注入,而PreparedStatementc傳入的內(nèi)容不會和sql語句發(fā)生任何匹配關(guān)系。              * 最常用的api              * addBatch()/addBatch(String sql) 預(yù)編譯SQL語句,只編譯一回哦,效率高啊。剝瓜子,一個(gè)一個(gè)剝,最后一口吃。              * setXXX(parameterIndex,value) 設(shè)置指定參數(shù)的值。              * execute()  執(zhí)行 SQL 語句,該語句可以是任何種類的 SQL 語句。              * executeQuery() 執(zhí)行查詢語句返回ResultSet              * executeUpdate() 執(zhí)行增刪改,返回影響的行數(shù)。              *               */              String sql_other = "TRUNCATE TABLE t_user_info";              String sql_insert = "insert into t_user_info(id,user,sex,age) value(null,?,?,?)";              String sql_query = "select * from t_user_info where id < ?";              conn3.setAutoCommit(false);//關(guān)閉自動提交              PreparedStatement preparedStatement_other = conn3.prepareStatement(sql_other);              PreparedStatement preparedStatement_insert = conn3.prepareStatement(sql_insert);              PreparedStatement preparedStatement_query = conn3.prepareStatement(sql_query);              preparedStatement_other.execute();                                          for(int i=0;i<100;i++){                  preparedStatement_insert.setString(1, "user_"+i);                  preparedStatement_insert.setString(2, "n");                  preparedStatement_insert.setInt(3, i);                  if(i>50){  //                  preparedStatement_insert.setString(3, "我是錯(cuò)誤的嘗試");                  }                  preparedStatement_insert.addBatch();              }              //一次性插入100條記錄,如果中間有出錯(cuò),那么這一次性的插入都不會成功              int[] updateInt = preparedStatement_insert.executeBatch();              conn3.commit();              point1 = conn3.setSavepoint("point1");              System.out.println(updateInt.length);                            preparedStatement_query.setInt(1, 50);              //4、執(zhí)行SQL語句,查詢語句就獲取結(jié)果集              ResultSet result = preparedStatement_query.executeQuery();              while(result.next()){                  int a = result.getInt("id");                  int b = result.getInt(1);                  System.out.println("第一列值,通過列名:"+a+",通過下標(biāo):"+b);                                }              /*              * 5、關(guān)閉結(jié)果集、關(guān)閉會話、關(guān)閉連接              */              result.close();              preparedStatement_other.close();              preparedStatement_insert.close();              preparedStatement_query.close();              conn3.close();                        } catch (ClassNotFoundException e) {              System.out.println("驅(qū)動沒有加載到。。。");              e.printStackTrace();          } catch (SQLException e) {              System.out.println("出現(xiàn)sql異常。。。");              try {                  conn3.rollback(point1);;              } catch (SQLException e1) {                                    e1.printStackTrace();              }              e.printStackTrace();          }      }  }  JDBC%20進(jìn)一步封裝

我們將獲取連接和釋放連接封裝到工具類中,執(zhí)行SQL的感覺沒有必要封裝,這樣更靈活。

[java] view%20plain copy package com.lcx.test;    import java.sql.Connection;  import java.sql.DriverManager;  import java.sql.ResultSet;  import java.sql.SQLException;  import java.sql.Statement;    public class JDBCUtil {      /**      * jdbc:mysql://主機(jī)名稱:連接端口/數(shù)據(jù)庫的名稱?參數(shù)=值      * String url = "jdbc:mysql://localhost:3306/JAVA?user=root&password=root&useUnicode=true&characterEncoding=UTF8";      * 也可在獲取連接的時(shí)候使用用戶名和密碼      * 避免中文亂碼要指定useUnicode和characterEncoding, 執(zhí)行數(shù)據(jù)庫操作之前要在數(shù)據(jù)庫管理系統(tǒng)上創(chuàng)建一個(gè)數(shù)據(jù)庫,名字自己定,      */      private static final String url="jdbc:mysql://localhost:3306/JAVA";      private static final String user="root";      private static final String password="root";      private static Connection conn;      //靜態(tài)代碼塊,類加載時(shí)就加載驅(qū)動      static {          //1、加載驅(qū)動          try {              Class.forName("com.mysql.jdbc.Driver");          } catch (ClassNotFoundException e) {              System.out.println("Exception: com.mysql.jdbc.driver not found Exception");              e.printStackTrace();          }      }      private JDBCUtil(){                }      //2獲取連接的方法,只產(chǎn)生一個(gè)連接      public static Connection getConnection(){          try {              if(conn==null){                  synchronized (JDBCUtil.class) {                      if(conn==null){                          conn = DriverManager.getConnection(url, user, password);                      }                  }              }          } catch (SQLException e) {              System.out.println("Exception: get mysql connection Exception");              e.printStackTrace();          }          return conn;      }      //最后釋放資源,中間操作由preparedStatement 去操作更靈活      public static void free(ResultSet result,Statement statement,Connection connection){          try {              if(result!=null){//關(guān)閉結(jié)果集                  result.close();              }          } catch (SQLException e) {              e.printStackTrace();          }finally{              try {                  if(statement!=null){//關(guān)閉statement會話                      statement.close();                  }              } catch (SQLException e) {                  e.printStackTrace();              }finally{                  try {                      if(connection!=null){                          connection.close();//關(guān)閉連接                      }                  } catch (SQLException e) {                      e.printStackTrace();                  }              }                        }                }  }  使用工具類操作數(shù)據(jù)處理

[java] view%20plain copy 派生到我的代碼片package com.lcx.test;    import java.sql.Connection;  import java.sql.PreparedStatement;  import java.sql.ResultSet;  import java.sql.SQLException;    public class JDBCTest {        public static void main(String[] args) {          //1、加載驅(qū)動、獲取連接          Connection connection = JDBCUtil.getConnection();          String sql_init ="TRUNCATE TABLE t_user_info";          String sql_insert = "insert into t_user_info(id,user,sex,age) value(null,?,?,?)";          String sql_query = "select * from t_user_info where id < ?";          PreparedStatement ps_init;          PreparedStatement ps_insert;          PreparedStatement ps_query;          try {              connection.setAutoCommit(false);              //2、根據(jù)sql語句獲取 獲取預(yù)編譯語句對象              ps_init = connection.prepareStatement(sql_init);              ps_insert = connection.prepareStatement(sql_insert);              ps_query = connection.prepareStatement(sql_query);                            ps_init.execute();//可以執(zhí)行任何種類的SQL語句              //3、有參數(shù)值,就設(shè)置參數(shù)值,然后執(zhí)行預(yù)編譯語句,獲取結(jié)果集              for(int i=0;i<100;i++){                  ps_insert.setString(1, "user_"+i);                  ps_insert.setString(2, "n");                  ps_insert.setInt(3, i);                  ps_insert.addBatch();//增加的批處理隊(duì)列中              }              ps_insert.executeBatch();//一次性執(zhí)行                            ps_query.setInt(1, 50);              //查詢記錄,獲取結(jié)果集              ResultSet result = ps_query.executeQuery();              while(result.next()){                  int a = result.getInt("id");                  int b = result.getInt(1);                  System.out.println("第一列通過列明:"+a+",第一列通過index:"+b);              }              connection.commit();              //5、釋放資源              JDBCUtil.free(result, ps_query, connection);              JDBCUtil.free(result, ps_init, connection);              JDBCUtil.free(result, ps_insert, connection);          } catch (SQLException e) {              try {                  connection.rollback();              } catch (SQLException e1) {                  e1.printStackTrace();              }              e.printStackTrace();          }                }    }  
發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 色无极影院亚洲 | 国产羞羞视频在线观看 | 国产精选电影免费在线观看网站 | 久久精品亚洲欧美日韩精品中文字幕 | 国产精品午夜未成人免费观看 | 久草最新网址 | 人人舔人人舔 | 毛片在线免费观看视频 | 成人羞羞在线观看网站 | 亚洲午夜精品视频 | 亚洲黑人在线观看 | 毛片大全在线观看 | 国产精品久久久久久久久久久久久久久 | 污视频在线免费 | 国产精品成人av片免费看最爱 | 欧美激情精品久久久久 | 欧美黄色大片免费观看 | 一本视频在线观看 | 狠狠干91 | 国产中出在线观看 | 一级毛片在线免费观看视频 | 色网站综合 | 久草视频2| 一级毛片在线免费播放 | 草草免费视频 | 亚洲一区二区三区精品在线观看 | 精品一区二区亚洲 | www.777含羞草 | 日本精品中文字幕 | 日本在线不卡免费 | 国产精品一区视频 | 麻豆国产网站 | 亚州成人在线观看 | 久久中文字幕在线观看 | 精品中文字幕在线播放 | 久久亚洲精品久久国产一区二区 | 在线看免费观看av | 伊人亚洲精品 | 国产无限资源在线观看 | 欧美一级高潮片免费的 | 欧美日韩精品一区二区三区不卡 |