亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

JDBC

2019-11-11 02:07:28
字體:
來源:轉載
供稿:網友

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

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

1、Class.forName()加載數據庫連接驅動。

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

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

4、執行SQL處理結果集,執行SQL前如果有參數值就設置參數值setXXX()。

5、關閉結果集、關閉會話、關閉連接。

[java] view plain copy print?在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、加載數據庫驅動,包名一般為域名反寫              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、獲取數據連接對象,DriverManager.getConnection方法有3個重載方法              */  //          Connection conn1 = DriverManager.getConnection(url3, user, password);//將連接的用戶名、密碼放到方法參數中  //          Connection conn2 = DriverManager.getConnection(url2,info);//將連接的屬性鍵值對放在Properties對象中              conn3 = DriverManager.getConnection(url1);//將所有連接信息都放在URL中              /*              * 3、根據SQL獲取sql會話對象,有2種方式 Statement、PreparedStatement              *      1、 PreparedStatement接口繼承Statement, PreparedStatement 實例包含已編譯的 SQL 語句,所以其執行速度要快于 Statement 對象。              *      2、作為 Statement 的子類,PreparedStatement 繼承了 Statement 的所有功能。三種方法  execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要參數              *      3、在JDBC應用中,如果你已經是稍有水平開發者,你就應該始終以PreparedStatement代替 Statement.也就是說,在任何時候都不要使用Statement.              *          一.代碼的可讀性和可維護性.Statement需要不斷地拼接,而PreparedStatement不會。              *          二.PreparedStatement盡最大可能提高性能.DB有緩存機制,相同的預編譯語句再次被調用不會再次需要編譯。              *          三.最重要的一點是極大地提高了安全性.Statement容易被SQL注入,而PreparedStatementc傳入的內容不會和sql語句發生任何匹配關系。              * 最常用的api              * addBatch()/addBatch(String sql) 預編譯SQL語句,只編譯一回哦,效率高啊。剝瓜子,一個一個剝,最后一口吃。              * setXXX(parameterIndex,value) 設置指定參數的值。              * execute()  執行 SQL 語句,該語句可以是任何種類的 SQL 語句。              * executeQuery() 執行查詢語句返回ResultSet              * executeUpdate() 執行增刪改,返回影響的行數。              *               */              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);//關閉自動提交              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, ”我是錯誤的嘗試”);                  }                  preparedStatement_insert.addBatch();              }              //一次性插入100條記錄,如果中間有出錯,那么這一次性的插入都不會成功              int[] updateInt = preparedStatement_insert.executeBatch();              conn3.commit();              point1 = conn3.setSavepoint(”point1”);              System.out.println(updateInt.length);                            preparedStatement_query.setInt(1, 50);              //4、執行SQL語句,查詢語句就獲取結果集              ResultSet result = preparedStatement_query.executeQuery();              while(result.next()){                  int a = result.getInt(“id”);                  int b = result.getInt(1);                  System.out.println(”第一列值,通過列名:”+a+“,通過下標:”+b);                                }              /*              * 5、關閉結果集、關閉會話、關閉連接              */              result.close();              preparedStatement_other.close();              preparedStatement_insert.close();              preparedStatement_query.close();              conn3.close();                        } catch (ClassNotFoundException e) {              System.out.println(”驅動沒有加載到。。?!?;              e.printStackTrace();          } catch (SQLException e) {              System.out.println(”出現sql異常。。?!?;              try {                  conn3.rollback(point1);;              } catch (SQLException e1) {                                    e1.printStackTrace();              }              e.printStackTrace();          }      }  }  
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、加載數據庫驅動,包名一般為域名反寫            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、獲取數據連接對象,DriverManager.getConnection方法有3個重載方法             *///          Connection conn1 = DriverManager.getConnection(url3, user, password);//將連接的用戶名、密碼放到方法參數中//          Connection conn2 = DriverManager.getConnection(url2,info);//將連接的屬性鍵值對放在Properties對象中            conn3 = DriverManager.getConnection(url1);//將所有連接信息都放在URL中            /*             * 3、根據SQL獲取sql會話對象,有2種方式 Statement、PreparedStatement             *      1、 PreparedStatement接口繼承Statement, PreparedStatement 實例包含已編譯的 SQL 語句,所以其執行速度要快于 Statement 對象。             *      2、作為 Statement 的子類,PreparedStatement 繼承了 Statement 的所有功能。三種方法  execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要參數             *      3、在JDBC應用中,如果你已經是稍有水平開發者,你就應該始終以PreparedStatement代替 Statement.也就是說,在任何時候都不要使用Statement.             *          一.代碼的可讀性和可維護性.Statement需要不斷地拼接,而PreparedStatement不會。             *          二.PreparedStatement盡最大可能提高性能.DB有緩存機制,相同的預編譯語句再次被調用不會再次需要編譯。             *          三.最重要的一點是極大地提高了安全性.Statement容易被SQL注入,而PreparedStatementc傳入的內容不會和sql語句發生任何匹配關系。             * 最常用的api             * addBatch()/addBatch(String sql) 預編譯SQL語句,只編譯一回哦,效率高啊。剝瓜子,一個一個剝,最后一口吃。             * setXXX(parameterIndex,value) 設置指定參數的值。             * execute()  執行 SQL 語句,該語句可以是任何種類的 SQL 語句。             * executeQuery() 執行查詢語句返回ResultSet             * executeUpdate() 執行增刪改,返回影響的行數。             *              */            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);//關閉自動提交            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, "我是錯誤的嘗試");                }                preparedStatement_insert.addBatch();            }            //一次性插入100條記錄,如果中間有出錯,那么這一次性的插入都不會成功            int[] updateInt = preparedStatement_insert.executeBatch();            conn3.commit();            point1 = conn3.setSavepoint("point1");            System.out.println(updateInt.length);            preparedStatement_query.setInt(1, 50);            //4、執行SQL語句,查詢語句就獲取結果集            ResultSet result = preparedStatement_query.executeQuery();            while(result.next()){                int a = result.getInt("id");                int b = result.getInt(1);                System.out.println("第一列值,通過列名:"+a+",通過下標:"+b);            }            /*             * 5、關閉結果集、關閉會話、關閉連接             */            result.close();            preparedStatement_other.close();            preparedStatement_insert.close();            preparedStatement_query.close();            conn3.close();        } catch (ClassNotFoundException e) {            System.out.println("驅動沒有加載到。。。");            e.printStackTrace();        } catch (SQLException e) {            System.out.println("出現sql異常。。。");            try {                conn3.rollback(point1);;            } catch (SQLException e1) {                e1.printStackTrace();            }            e.printStackTrace();        }    }}JDBC 進一步封裝

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

[java] view plain copy print?在CODE上查看代碼片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://主機名稱:連接端口/數據庫的名稱?參數=值      * String url = “jdbc:mysql://localhost:3306/JAVA?user=root&password=root&useUnicode=true&characterEncoding=UTF8”;      * 也可在獲取連接的時候使用用戶名和密碼      * 避免中文亂碼要指定useUnicode和characterEncoding, 執行數據庫操作之前要在數據庫管理系統上創建一個數據庫,名字自己定,      */      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;      //靜態代碼塊,類加載時就加載驅動      static {          //1、加載驅動          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獲取連接的方法,只產生一個連接      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){//關閉結果集                  result.close();              }          } catch (SQLException e) {              e.printStackTrace();          }finally{              try {                  if(statement!=null){//關閉statement會話                      statement.close();                  }              } catch (SQLException e) {                  e.printStackTrace();              }finally{                  try {                      if(connection!=null){                          connection.close();//關閉連接                      }                  } catch (SQLException e) {                      e.printStackTrace();                  }              }                        }                }  }  
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://主機名稱:連接端口/數據庫的名稱?參數=值     * String url = "jdbc:mysql://localhost:3306/JAVA?user=root&password=root&useUnicode=true&characterEncoding=UTF8";     * 也可在獲取連接的時候使用用戶名和密碼     * 避免中文亂碼要指定useUnicode和characterEncoding, 執行數據庫操作之前要在數據庫管理系統上創建一個數據庫,名字自己定,     */    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;    //靜態代碼塊,類加載時就加載驅動    static {        //1、加載驅動        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獲取連接的方法,只產生一個連接    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){//關閉結果集                result.close();            }        } catch (SQLException e) {            e.printStackTrace();        }finally{            try {                if(statement!=null){//關閉statement會話                    statement.close();                }            } catch (SQLException e) {                e.printStackTrace();            }finally{                try {                    if(connection!=null){                        connection.close();//關閉連接                    }                } catch (SQLException e) {                    e.printStackTrace();                }            }        }    }}使用工具類操作數據處理

[java] view plain copy print?在CODE上查看代碼片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、加載驅動、獲取連接          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、根據sql語句獲取 獲取預編譯語句對象              ps_init = connection.prepareStatement(sql_init);              ps_insert = connection.prepareStatement(sql_insert);              ps_query = connection.prepareStatement(sql_query);                            ps_init.execute();//可以執行任何種類的SQL語句              //3、有參數值,就設置參數值,然后執行預編譯語句,獲取結果集              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();//增加的批處理隊列中              }              ps_insert.executeBatch();//一次性執行                            ps_query.setInt(1, 50);              //查詢記錄,獲取結果集              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();          }                }    }  
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、加載驅動、獲取連接        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、根據sql語句獲取 獲取預編譯語句對象            ps_init = connection.prepareStatement(sql_init);            ps_insert = connection.prepareStatement(sql_insert);            ps_query = connection.prepareStatement(sql_query);            ps_init.execute();//可以執行任何種類的SQL語句            //3、有參數值,就設置參數值,然后執行預編譯語句,獲取結果集            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();//增加的批處理隊列中            }            ps_insert.executeBatch();//一次性執行            ps_query.setInt(1, 50);            //查詢記錄,獲取結果集            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();        }    }}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品福利在线观看网址| 亚洲午夜未满十八勿入免费观看全集| 国产在线观看精品| 亚洲欧美成人一区二区在线电影| 久久精品国产欧美亚洲人人爽| 欧美精品在线播放| 亚洲综合在线小说| 日韩免费视频在线观看| 日韩电影中文字幕在线| 欧美激情国产精品| 亚洲欧美第一页| 欧美激情亚洲国产| 精品无人区太爽高潮在线播放| 亚洲欧美日韩中文在线| 精品成人在线视频| 日韩中文字幕免费看| 91午夜理伦私人影院| 亚洲欧美日韩网| 亚洲天堂色网站| 97av在线视频| 亚洲国产精品大全| 成人xxxxx| 亚洲桃花岛网站| 亚洲国产精品一区二区三区| 国产精品丝袜视频| 国产一区二区三区在线观看视频| 91精品国产91久久久| 茄子视频成人在线| 91精品国产成人www| 久久国产天堂福利天堂| 91av视频在线免费观看| 国产精品欧美亚洲777777| 激情av一区二区| 国产精品视频在线播放| 久久精品亚洲国产| 国产精品久久久久高潮| 久久九九有精品国产23| 国产精品流白浆视频| 91久热免费在线视频| 2024亚洲男人天堂| 亚洲人成网站777色婷婷| 韩剧1988在线观看免费完整版| 欧美日韩在线另类| 91视频免费网站| 日韩成人小视频| 92福利视频午夜1000合集在线观看| 精品毛片网大全| 亚洲精品欧美日韩| 日韩av手机在线看| 欧美日韩在线第一页| 日韩电影免费观看在线观看| 欧美日韩性视频在线| 国产成人91久久精品| 日本免费在线精品| 精品久久久久久亚洲国产300| 久久亚洲欧美日韩精品专区| 亚洲视频在线看| 欧美精品一本久久男人的天堂| 久久国产精品偷| www.午夜精品| 久久久精品国产网站| 亚洲精品国产福利| 午夜精品99久久免费| 国产精品男人爽免费视频1| 国产日韩欧美一二三区| www亚洲欧美| 日韩在线观看免费全| 亚洲精品国产福利| 亚洲黄在线观看| 亚洲国产美女久久久久| 亚洲精品第一国产综合精品| 国产成人小视频在线观看| 久久精品色欧美aⅴ一区二区| 欧美国产一区二区三区| 亚洲自拍偷拍福利| 日韩欧美aaa| 最近2019中文免费高清视频观看www99| 精品福利在线看| 日韩av有码在线| 欧美人在线观看| 欧美国产日韩精品| 日韩欧美中文免费| 亚洲精品久久久久久久久| 日韩免费电影在线观看| 亚洲变态欧美另类捆绑| 亚洲精品网址在线观看| 亚洲系列中文字幕| xvideos亚洲人网站| 久久久免费精品| 欧美性极品少妇精品网站| 中文字幕欧美精品日韩中文字幕| 日韩在线视频导航| 日韩精品视频在线播放| 色婷婷成人综合| 中文日韩电影网站| 日韩免费在线电影| 欧美精品18videos性欧| 黄色一区二区在线观看| 亚洲午夜精品视频| 亚洲欧美精品中文字幕在线| 91av在线免费观看| 亚洲国产美女久久久久| 欧美一区三区三区高中清蜜桃| 日韩电影中文字幕在线观看| 欧美超级乱淫片喷水| 91福利视频在线观看| 亚洲精品日韩久久久| 成人av番号网| 国产日本欧美一区| 亚洲精品成人av| 中文字幕日韩欧美精品在线观看| 九九热在线精品视频| 欧美成人在线影院| 日韩三级影视基地| 亚洲精品电影网在线观看| 国产成人激情视频| 国产ts人妖一区二区三区| 亚洲精品www久久久| 国产精品男女猛烈高潮激情| 欧美成人在线影院| 亚洲精品国产综合区久久久久久久| 亚洲美女自拍视频| 国产中文字幕日韩| 国产精品日韩专区| 亚洲xxxxx电影| 国产精品极品在线| 亚洲一区二区三区乱码aⅴ| 上原亚衣av一区二区三区| 国产在线拍偷自揄拍精品| 亚洲精品之草原avav久久| 成人网在线免费观看| 一夜七次郎国产精品亚洲| 日本精品久久中文字幕佐佐木| 国产69精品久久久久9| 欧美日韩国内自拍| 国产欧美日韩亚洲精品| 亚洲伊人一本大道中文字幕| 国产精品国产亚洲伊人久久| 68精品久久久久久欧美| 日韩少妇与小伙激情| 成人激情视频在线| 5566日本婷婷色中文字幕97| 国产精品永久免费视频| 日韩av在线一区二区| 成人在线视频网站| 91po在线观看91精品国产性色| 欧美激情精品久久久| 欧美日韩国产一区中文午夜| 国产97在线视频| 国产91精品久久久久久久| 久久亚洲精品一区二区| 97视频在线观看亚洲| 日韩一级黄色av| 日韩中文字幕亚洲| 国产一区二区在线免费| 国内精品久久久| 日韩精品极品视频免费观看| 日韩电影免费观看在线| 成人在线激情视频| 久久综合免费视频影院| 亚洲一二在线观看| 亚洲黄色www| 日韩精品在线电影| 全色精品综合影院|