国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

1、JDBC 2、DBUtils

galaxy_robot / 3566人閱讀

摘要:是訪問數(shù)據(jù)庫的標準規(guī)范提供了一種基準據(jù)此可以構建更高級的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應用程序。在將此值發(fā)送到數(shù)據(jù)庫時,驅動程序將它轉換成一個類型值。例如值不支持中文,如果需要使用非英文字符,將進行轉換。

01JDBC概念和數(shù)據(jù)庫驅動程序
* A: JDBC概念和數(shù)據(jù)庫驅動程序
    * a: JDBC概述        
        * JDBC(Java Data Base Connectivity,java數(shù)據(jù)庫連接)是一種用于執(zhí)行SQL語句的Java API,
            可以為多種關系數(shù)據(jù)庫提供統(tǒng)一訪問,它由一組用Java語言編寫的類和接口組成。是Java訪問數(shù)據(jù)庫的標準規(guī)范
        * JDBC提供了一種基準,據(jù)此可以構建更高級的工具和接口,使數(shù)據(jù)庫開發(fā)人員能夠編寫數(shù)據(jù)庫應用程序。
        * JDBC需要連接驅動,驅動是兩個設備要進行通信,滿足一定通信數(shù)據(jù)格式,數(shù)據(jù)格式由設備提供商規(guī)定,
            設備提供商為設備提供驅動軟件,通過軟件可以與該設備進行通信。
        * 我們使用的是mysql的驅動mysql-connector-java-5.1.39-bin.jar
    * b: 總結
        * JDBC是java提供給開發(fā)人員的一套操作數(shù)據(jù)庫的接口
        * 數(shù)據(jù)庫驅動就是實現(xiàn)該接口的實現(xiàn)類
        
02JDBC原理
* A: JDBC原理
    * a: 描述
        * Java提供訪問數(shù)據(jù)庫規(guī)范稱為JDBC,而生產廠商提供規(guī)范的實現(xiàn)類稱為驅動
        * DBC是接口,驅動是接口的實現(xiàn),沒有驅動將無法完成數(shù)據(jù)庫連接,從而不能操作數(shù)據(jù)庫!
            每個數(shù)據(jù)庫廠商都需要提供自己的驅動,用來連接自己公司的數(shù)據(jù)庫,也就是說驅動一般都由數(shù)據(jù)庫生成廠商提供。
        * 圖解見day29_source/JDBC實現(xiàn)原理.JPG
                
03準備數(shù)據(jù)
* A: 準備數(shù)據(jù)
    * a: 創(chuàng)建數(shù)據(jù)庫和表結構
        #創(chuàng)建數(shù)據(jù)庫
        create database mybase;
        #使用數(shù)據(jù)庫
        use mybase;
        ###創(chuàng)建分類表
        create table sort(
          sid int PRIMARY KEY AUTO_INCREMENT,
          sname varchar(100),
          sprice DOUBLE,
          sdesc VARCHAR(500)
        );
        
    * b: 向表中插入數(shù)據(jù)
        #初始化數(shù)據(jù)
        insert into sort(sname,sprice,sdesc) values("家電",2000, "優(yōu)惠的促銷");
        insert into sort(sname,sprice,sdesc) values("家具",8900, "家具價格上調,原材料漲價");
        insert into sort(sname,sprice,sdesc) values("兒童玩具",290, "賺家長的錢");
        insert into sort(sname,sprice,sdesc) values("生鮮",500.99, "生鮮商品");
        insert into sort(sname,sprice,sdesc) values("服裝",24000, "換季銷售");
        insert into sort(sname,sprice,sdesc) values("洗滌",50, "洗發(fā)水促銷");            
        
04JDBC的開發(fā)步驟
* A: JDBC的開發(fā)步驟
    * a: 步驟介紹
        1.注冊驅動
            告知JVM使用的是哪一個數(shù)據(jù)庫的驅動
        2.獲得連接
            使用JDBC中的類,完成對MySQL數(shù)據(jù)庫的連接
        3.獲得語句執(zhí)行平臺
            通過連接對象獲取對SQL語句的執(zhí)行者對象
        4.執(zhí)行sql語句
            使用執(zhí)行者對象,向數(shù)據(jù)庫執(zhí)行SQL語句
            獲取到數(shù)據(jù)庫的執(zhí)行后的結果
        5.處理結果
        6.釋放資源  一堆close()
                    
05導入mysql數(shù)據(jù)庫驅動程序jar包
* A: 導入mysql數(shù)據(jù)庫驅動程序jar包
    * a: 步驟
        * 創(chuàng)建lib目錄,用于存放當前項目需要的所有jar包
        * 選擇jar包,右鍵執(zhí)行build path / Add to Build Path
06注冊數(shù)據(jù)庫驅動程序
* A: 注冊數(shù)據(jù)庫驅動程序
    * a: 案例代碼
        public class JDBCDemo {
            public static void main(String[] args)throws ClassNotFoundException,SQLException{
                //1.注冊驅動 反射技術,將驅動類加入到內容
                // 使用java.sql.DriverManager類靜態(tài)方法 registerDriver(Driver driver)
                // Diver是一個接口,參數(shù)傳遞,MySQL驅動程序中的實現(xiàn)類
                //DriverManager.registerDriver(new Driver());
                //驅動類源代碼,注冊2次驅動程序
                Class.forName("com.mysql.jdbc.Driver");                    
            }
        }

        
    
07獲取數(shù)據(jù)庫的連接對象
* A:獲取數(shù)據(jù)庫的連接對象
    * a: 案例代碼
        public class JDBCDemo {
            public static void main(String[] args)throws ClassNotFoundException,SQLException{
                //1.注冊驅動 反射技術,將驅動類加入到內容
                // 使用java.sql.DriverManager類靜態(tài)方法 registerDriver(Driver driver)
                // Diver是一個接口,參數(shù)傳遞,MySQL驅動程序中的實現(xiàn)類
                //DriverManager.registerDriver(new Driver());
                //驅動類源代碼,注冊2次驅動程序
                Class.forName("com.mysql.jdbc.Driver");
                
                //2.獲得數(shù)據(jù)庫連接  DriverManager類中靜態(tài)方法
                //static Connection getConnection(String url, String user, String password)  
                //返回值是Connection接口的實現(xiàn)類,在mysql驅動程序
                //url: 數(shù)據(jù)庫地址  jdbc:mysql://連接主機IP:端口號//數(shù)據(jù)庫名字
                String url = "jdbc:mysql://localhost:3296/mybase";
                //用戶名和密碼用自己的
                String username="root";
                String password="123";
                Connection con = DriverManager.getConnection(url, username, password);
                System.out.println(con);                    
            }
        }

            
08獲取SQL語句的執(zhí)行對象對象
* A: 獲取SQL語句的執(zhí)行對象對象
    * a: 案例代碼
        public class JDBCDemo {
            public static void main(String[] args)throws ClassNotFoundException,SQLException{
                //1.注冊驅動 反射技術,將驅動類加入到內容
                // 使用java.sql.DriverManager類靜態(tài)方法 registerDriver(Driver driver)
                // Diver是一個接口,參數(shù)傳遞,MySQL驅動程序中的實現(xiàn)類
                //DriverManager.registerDriver(new Driver());
                //驅動類源代碼,注冊2次驅動程序
                Class.forName("com.mysql.jdbc.Driver");
                
                //2.獲得數(shù)據(jù)庫連接  DriverManager類中靜態(tài)方法
                //static Connection getConnection(String url, String user, String password)  
                //返回值是Connection接口的實現(xiàn)類,在mysql驅動程序
                //url: 數(shù)據(jù)庫地址  jdbc:mysql://連接主機IP:端口號//數(shù)據(jù)庫名字
                String url = "jdbc:mysql://localhost:3296/mybase";
                String username="root";
                String password="123";
                Connection con = DriverManager.getConnection(url, username, password);
                
                //3.獲得語句執(zhí)行平臺, 通過數(shù)據(jù)庫連接對象,獲取到SQL語句的執(zhí)行者對象
                // con對象調用方法   Statement createStatement() 獲取Statement對象,將SQL語句發(fā)送到數(shù)據(jù)庫
                // 返回值是 Statement接口的實現(xiàn)類對象,,在mysql驅動程序
                Statement stat = con.createStatement();
                System.out.println(stat);
            }
        }
09執(zhí)行insert語句獲取結果集
* A: 執(zhí)行insert語句獲取結果集
    * a: 案例代碼
        public class JDBCDemo {
            public static void main(String[] args)throws ClassNotFoundException,SQLException{
                //1.注冊驅動 反射技術,將驅動類加入到內容
                // 使用java.sql.DriverManager類靜態(tài)方法 registerDriver(Driver driver)
                // Diver是一個接口,參數(shù)傳遞,MySQL驅動程序中的實現(xiàn)類
                //DriverManager.registerDriver(new Driver());
                //驅動類源代碼,注冊2次驅動程序
                Class.forName("com.mysql.jdbc.Driver");
                
                //2.獲得數(shù)據(jù)庫連接  DriverManager類中靜態(tài)方法
                //static Connection getConnection(String url, String user, String password)  
                //返回值是Connection接口的實現(xiàn)類,在mysql驅動程序
                //url: 數(shù)據(jù)庫地址  jdbc:mysql://連接主機IP:端口號//數(shù)據(jù)庫名字
                String url = "jdbc:mysql://localhost:3296/mybase";
                String username="root";
                String password="123";
                Connection con = DriverManager.getConnection(url, username, password);
                
                //3.獲得語句執(zhí)行平臺, 通過數(shù)據(jù)庫連接對象,獲取到SQL語句的執(zhí)行者對象
                // con對象調用方法   Statement createStatement() 獲取Statement對象,將SQL語句發(fā)送到數(shù)據(jù)庫
                // 返回值是 Statement接口的實現(xiàn)類對象,,在mysql驅動程序
                Statement stat = con.createStatement();
                //    4.執(zhí)行sql語句
                // 通過執(zhí)行者對象調用方法執(zhí)行SQL語句,獲取結果
                // int executeUpdate(String sql)  執(zhí)行數(shù)據(jù)庫中的SQL語句, insert delete update
                // 返回值int,操作成功數(shù)據(jù)表多少行
                int row = stat.executeUpdate
                        ("INSERT INTO sort(sname,sprice,sdesc) VALUES("汽車用品",50000,"瘋狂漲價")");
                System.out.println(row);
                
                //6.釋放資源  一堆close()
                stat.close();
                con.close();
            }
        }
        
10執(zhí)行select語句獲取結果集
* A: 執(zhí)行select語句獲取結果集
    * a: 案例代碼
        public class JDBCDemo1 {
            public static void main(String[] args) throws Exception{
                //1. 注冊驅動
                Class.forName("com.mysql.jdbc.Driver");
                //2. 獲取連接對象
                String url = "jdbc:mysql://localhost:3296/mybase";
                String username="root";
                String password="123";
                Connection con = DriverManager.getConnection(url, username, password);
                //3 .獲取執(zhí)行SQL 語句對象
                Statement stat = con.createStatement();
                // 拼寫查詢的SQL
                String sql = "SELECT * FROM sort";
                //4. 調用執(zhí)行者對象方法,執(zhí)行SQL語句獲取結果集
                // ResultSet executeQuery(String sql)  執(zhí)行SQL語句中的select查詢
                // 返回值ResultSet接口的實現(xiàn)類對象,實現(xiàn)類在mysql驅動中
                ResultSet rs = stat.executeQuery(sql);
                //5 .處理結果集
                // ResultSet接口方法 boolean next() 返回true,有結果集,返回false沒有結果集
                while(rs.next()){
                    //獲取每列數(shù)據(jù),使用是ResultSet接口的方法 getXX方法參數(shù)中,建議寫String列名
                    System.out.println(rs.getInt("sid")+"   "+rs.getString("sname")+
                            "   "+rs.getDouble("sprice")+"   "+rs.getString("sdesc"));
                }
                
                rs.close();
                stat.close();
                con.close();
            }
        }
11SQL注入攻擊
* A: SQL注入攻擊
    * a: 注入問題
        * 假設有登錄案例SQL語句如下:
        * SELECT * FROM 用戶表 WHERE NAME = 用戶輸入的用戶名 AND PASSWORD = 用戶輸?shù)拿艽a;
        * 此時,當用戶輸入正確的賬號與密碼后,查詢到了信息則讓用戶登錄。
            但是當用戶輸入的賬號為XXX 密碼為:XXX’  OR ‘a’=’a時,則真正執(zhí)行的代碼變?yōu)椋?            * SELECT * FROM 用戶表 WHERE NAME = ‘XXX’ AND PASSWORD =’ XXX’  OR ’a’=’a’;
        * 此時,上述查詢語句時永遠可以查詢出結果的。那么用戶就直接登錄成功了,顯然我們不希望看到這樣的結果,這便是SQL注入問題。
    * b: 案例演示
        CREATE TABLE users(
             id INT PRIMARY KEY AUTO_INCREMENT,
             username VARCHAR(100),
             PASSWORD VARCHAR(100)
        );

        INSERT INTO users (username,PASSWORD) VALUES ("a","1"),("b","2");

        SELECT * FROM users;

        -- 登錄查詢
        SELECT * FROM users WHERE username="dsfsdfd" AND PASSWORD="wrethiyu"1 
        OR 1=1

        SELECT * FROM users WHERE username="a" AND PASSWORD="1"OR"1=1"
        鍵盤錄入:
        1
        1"OR" 1=1
        

        
12SQL注入攻擊用戶登錄案例
* A: SQL注入攻擊用戶登錄案例
    * a: 案例代碼
        public class JDBCDemo2 {
            public static void main(String[] args)throws Exception {
                Class.forName("com.mysql.jdbc.Driver");
                String url = "jdbc:mysql://localhost:3296/mybase";
                String username = "root";
                String password = "123";
                Connection con = DriverManager.getConnection(url, username, password);
                Statement stat = con.createStatement();
                
                Scanner sc = new Scanner(System.in);
                String user = sc.nextLine();
                String pass = sc.nextLine();
                
                //執(zhí)行SQL語句,數(shù)據(jù)表,查詢用戶名和密碼,如果存在,登錄成功,不存在登錄失敗
        //        String sql = "SELECT * FROM users WHERE username="dsfsdfd" AND PASSWORD="wrethiyu" OR 1=1";
                String sql = "SELECT * FROM users WHERE username=""+user+"" AND PASSWORD=""+pass+""";
                System.out.println(sql);
                ResultSet rs = stat.executeQuery(sql);
                while(rs.next()){
                    System.out.println(rs.getString("username")+"   "+rs.getString("password"));
                }
                
                rs.close();
                stat.close();
                con.close();
            }
        }

    
13PrepareStatement接口預編譯SQL語句
* A: PrepareStatement接口預編譯SQL語句
    * a: 預處理對象
        * 使用PreparedStatement預處理對象時,建議每條sql語句所有的實際參數(shù),都使用逗號分隔。
        * String sql = "insert into sort(sid,sname) values(?,?)";;
        * PreparedStatement預處理對象代碼:
        * PreparedStatement psmt = conn.prepareStatement(sql)
        
    * b: 執(zhí)行SQL語句的方法介紹
        * int executeUpdate(); --執(zhí)行insert update delete語句.
        * ResultSet executeQuery(); --執(zhí)行select語句.
        * boolean execute(); --執(zhí)行select返回true 執(zhí)行其他的語句返回false.
    * c: 設置實際參數(shù)
        * void setXxx(int index, Xxx xx) 將指定參數(shù)設置為給定Java的xx值。在將此值發(fā)送到數(shù)據(jù)庫時,驅動程序將它轉換成一個 SQL Xxx類型值。
        * 例如:
            * setString(2, "家用電器") 把SQL語句中第2個位置的占位符? 替換成實際參數(shù) "家用電器"
    * d: 案例代碼
        /*
         *  Java程序實現(xiàn)用戶登錄,用戶名和密碼,數(shù)據(jù)庫檢查
         *  防止注入攻擊
         *  Statement接口實現(xiàn)類,作用執(zhí)行SQL語句,返回結果集
         *  有一個子接口PreparedStatement  (SQL預編譯存儲,多次高效的執(zhí)行SQL) 
         *  PreparedStatement的實現(xiàn)類數(shù)據(jù)庫的驅動中,如何獲取接口的實現(xiàn)類
         *  
         *  是Connection數(shù)據(jù)庫連接對象的方法
         *  PreparedStatement prepareStatement(String sql) 
                  
         */
        public class JDBCDemo3 {
            public static void main(String[] args)throws Exception {
                Class.forName("com.mysql.jdbc.Driver");
                String url = "jdbc:mysql://localhost:3296/mybase";
                String username = "root";
                String password = "123";
                Connection con = DriverManager.getConnection(url, username, password);
                Scanner sc = new Scanner(System.in);
                String user = sc.nextLine();
                String pass = sc.nextLine();
                
                //執(zhí)行SQL語句,數(shù)據(jù)表,查詢用戶名和密碼,如果存在,登錄成功,不存在登錄失敗
                String sql = "SELECT * FROM users WHERE username=? AND PASSWORD=?";
                //調用Connection接口的方法prepareStatement,獲取PrepareStatement接口的實現(xiàn)類
                //方法中參數(shù),SQL語句中的參數(shù)全部采用問號占位符
                PreparedStatement pst =  con.prepareStatement(sql);
                System.out.println(pst);
                //調用pst對象set方法,設置問號占位符上的參數(shù)
                pst.setObject(1, user);
                pst.setObject(2, pass);
                
                //調用方法,執(zhí)行SQL,獲取結果集
                ResultSet rs = pst.executeQuery();
                while(rs.next()){
                    System.out.println(rs.getString("username")+"   "+rs.getString("password"));
                }
                
                rs.close();
                pst.close();
                con.close();
            }
        }
14PrepareStatement接口預編譯SQL語句執(zhí)行修改
* A: PrepareStatement接口預編譯SQL語句執(zhí)行修改
    * 案例代碼
        /*
         *  使用PrepareStatement接口,實現(xiàn)數(shù)據(jù)表的更新操作
         */
        public class JDBCDemo {
            public static void main(String[] args) throws Exception{
                Class.forName("com.mysql.jdbc.Driver");
                String url = "jdbc:mysql://localhost:3296/mybase";
                String username="root";
                String password="123";
                Connection con = DriverManager.getConnection(url, username, password);    
                
                //拼寫修改的SQL語句,參數(shù)采用?占位
                String sql = "UPDATE sort SET sname=?,sprice=? WHERE sid=?";
                //調用數(shù)據(jù)庫連接對象con的方法prepareStatement獲取SQL語句的預編譯對象
                PreparedStatement pst = con.prepareStatement(sql);
                //調用pst的方法setXXX設置?占位
                pst.setObject(1, "汽車美容");
                pst.setObject(2, 49988);
                pst.setObject(3, 7);
                //調用pst方法執(zhí)行SQL語句
                pst.executeUpdate();
                
                pst.close();
                con.close();
            }
        }

        
15PrepareStatement接口預編譯SQL語句執(zhí)行查詢
* A: PrepareStatement接口預編譯SQL語句執(zhí)行查詢
    * a: 案例代碼
        /*
         *  PrepareStatement接口實現(xiàn)數(shù)據(jù)表的查詢操作
         */
        public class JDBCDemo1 {
            public static void main(String[] args) throws Exception{
                Class.forName("com.mysql.jdbc.Driver");
                String url = "jdbc:mysql://localhost:3296/mybase";
                String username="root";
                String password="123";
                Connection con = DriverManager.getConnection(url, username, password);    
                
                String sql = "SELECT * FROM sort";
                
                PreparedStatement pst = con.prepareStatement(sql);
                
                //調用pst對象的方法,執(zhí)行查詢語句,Select
                ResultSet rs=pst.executeQuery();
                while(rs.next()){
                    System.out.println(rs.getString("sid")+"  "+rs.getString("sname")+"  "+rs.getString("sprice")+"  "+rs.getString("sdesc"));
                }
                rs.close();
                pst.close();
                con.close();
            }
        }

        
16JDBC的工具類和測試
* A: JDBC的工具類和測試
    * a: 案例代碼
        //JDBCUtils工具類代碼
        public class JDBCUtils {
            private JDBCUtils(){}
            private static Connection con ;
            
            static{
                try{
                    Class.forName("com.mysql.jdbc.Driver");
                    String url = "jdbc:mysql://localhost:3296/mybase";
                    String username="root";
                    String password="123";
                    con = DriverManager.getConnection(url, username, password);
                }catch(Exception ex){
                    throw new RuntimeException(ex+"數(shù)據(jù)庫連接失敗");
                }
            }
            
            /*
             * 定義靜態(tài)方法,返回數(shù)據(jù)庫的連接對象
             */
            public static Connection getConnection(){
                return con;
            }
            
            
            public static void close(Connection con,Statement stat){
                 
                 if(stat!=null){
                     try{
                         stat.close();
                     }catch(SQLException ex){}
                 }
                 
                 if(con!=null){
                     try{
                         con.close();
                     }catch(SQLException ex){}
                 }
                 
            }
            
            
            public static void close(Connection con,Statement stat , ResultSet rs){
                 if(rs!=null){
                     try{
                         rs.close();
                     }catch(SQLException ex){}
                 }
                 
                 if(stat!=null){
                     try{
                         stat.close();
                     }catch(SQLException ex){}
                 }
                 
                 if(con!=null){
                     try{
                         con.close();
                     }catch(SQLException ex){}
                 }
                 
            }
        }
    //測試JDBCUtils工具類的代碼
    public class TestJDBCUtils {
        public static void main(String[] args)throws Exception {
            Connection con = JDBCUtils.getConnection();
            PreparedStatement pst = con.prepareStatement("SELECT sname FROM sort");
            ResultSet rs = pst.executeQuery();
            while(rs.next()){
                System.out.println(rs.getString("sname"));
            }
            JDBCUtils.close(con, pst, rs);
        }
    }
    
17數(shù)據(jù)表數(shù)據(jù)存儲對象
* A: 數(shù)據(jù)表數(shù)據(jù)存儲對象
    * a: 準備工作
        * 導入jar包
        * 拷貝day32定義的工具類JDBCUtils
        
    * b: 案例代碼
        //定義實體類Sort
        public class Sort {
            private int sid;
            private String sname;
            private double sprice;
            private String sdesc;
            public Sort(int sid, String sname, double sprice, String sdesc) {
                this.sid = sid;
                this.sname = sname;
                this.sprice = sprice;
                this.sdesc = sdesc;
            }
            public Sort(){}
            public int getSid() {
                return sid;
            }
            public void setSid(int sid) {
                this.sid = sid;
            }
            public String getSname() {
                return sname;
            }
            public void setSname(String sname) {
                this.sname = sname;
            }
            public double getSprice() {
                return sprice;
            }
            public void setSprice(double sprice) {
                this.sprice = sprice;
            }
            public String getSdesc() {
                return sdesc;
            }
            public void setSdesc(String sdesc) {
                this.sdesc = sdesc;
            }
            @Override
            public String toString() {
                return "Sort [sid=" + sid + ", sname=" + sname + ", sprice=" + sprice + ", sdesc=" + sdesc + "]";
            }                
        }
        
        /*
         *  JDBC讀取數(shù)據(jù)表sort,每行數(shù)據(jù)封裝到Sort類的對象中
         *  很多個Sort類對象,存儲到List集合中
         */
        public class JDBCDemo {
            public static void main(String[] args) throws Exception{
                //使用JDBC工具類,直接獲取數(shù)據(jù)庫連接對象
                Connection con = JDBCUtils.getConnection();
                //連接獲取數(shù)據(jù)庫SQL語句執(zhí)行者對象
                PreparedStatement pst = con.prepareStatement("SELECT * FROM sort");
                //調用查詢方法,獲取結果集
                ResultSet rs = pst.executeQuery();
                //創(chuàng)建集合對象
                List list = new ArrayList();
                while(rs.next()){
                    //獲取到每個列數(shù)據(jù),封裝到Sort對象中
                    Sort s = new Sort(rs.getInt("sid"),rs.getString("sname"),rs.getDouble("sprice"),rs.getString("sdesc"));
                    //封裝的Sort對象,存儲到集合中
                    list.add(s);
                }
                JDBCUtils.close(con, pst, rs);
                //遍歷List集合
                for(Sort s : list){
                    System.out.println(s);
                }
            }
        }

        
18properties配置文件
* A: properties配置文件        
    * a: 相關介紹
        * 開發(fā)中獲得連接的4個參數(shù)(驅動、URL、用戶名、密碼)通常都存在配置文件中,方便后期維護,程序如果需要更換數(shù)據(jù)庫,
            只需要修改配置文件即可。
        * 通常情況下,我們習慣使用properties文件,此文件我們將做如下要求:
            1.    文件位置:任意,建議src下
            2.    文件名稱:任意,擴展名為properties
            3.    文件內容:一行一組數(shù)據(jù),格式是“key=value”.
                a)    key命名自定義,如果是多個單詞,習慣使用點分隔。例如:jdbc.driver
                b)    value值不支持中文,如果需要使用非英文字符,將進行unicode轉換。
19properties文件的創(chuàng)建和編寫
* A: properties文件的創(chuàng)建和編寫
    * a: properties文件的創(chuàng)建
        * src路徑下建立database.properties(其實就是一個文本文件)
    * b: properties文件的編寫(內容如下)
        driverClass=com.mysql.jdbc.Driver
        url=jdbc:mysql://localhost:3296/mybase
        username=root
        password=123        
20加載配置文件
* A: 加載配置文件
    * a: 案例代碼        
        /*
         *  加載properties配置文件
         *  IO讀取文件,鍵值對存儲到集合
         *  從集合中以鍵值對方式獲取數(shù)據(jù)庫的連接信息,完成數(shù)據(jù)庫的連接
         */
        public class PropertiesDemo {
            public static void main(String[] args) throws Exception{
                FileInputStream fis = new FileInputStream("database.properties");
                System.out.println(fis);
                //使用類的加載器
                InputStream in = PropertiesDemo.class.getClassLoader().getResourceAsStream("database.properties");
                System.out.println(in);
                Properties pro = new Properties();
                pro.load(in);
                System.out.println(in);                    
            }
        }
21通過配置文件連接數(shù)據(jù)庫
* A: 通過配置文件連接數(shù)據(jù)庫
    * a: 案例代碼
        /*
         *  加載properties配置文件
         *  IO讀取文件,鍵值對存儲到集合
         *  從集合中以鍵值對方式獲取數(shù)據(jù)庫的連接信息,完成數(shù)據(jù)庫的連接
         */
        public class PropertiesDemo {
            public static void main(String[] args) throws Exception{
                FileInputStream fis = new FileInputStream("database.properties");
                System.out.println(fis);
                //使用類的加載器
                InputStream in = PropertiesDemo.class.getClassLoader().getResourceAsStream("database.properties");
                System.out.println(in);
                Properties pro = new Properties();
                pro.load(in);
                //獲取集合中的鍵值對
                String driverClass=pro.getProperty("driverClass");
                String url = pro.getProperty("url");
                String username = pro.getProperty("username");
                String password = pro.getProperty("password");
                Class.forName(driverClass);
                Connection con = DriverManager.getConnection(url, username, password);
                System.out.println(con);
                
            }
        }

                
22讀取配置文件的工具類
* A: 讀取配置文件的工具類
    * a: 案例代碼
        /*
         *  編寫數(shù)據(jù)庫連接的工具類,JDBC工具類
         *  獲取連接對象采用讀取配置文件方式
         *  讀取文件獲取連接,執(zhí)行一次,static{}
         */
        public class JDBCUtilsConfig {
            private static Connection con ;
            private static String driverClass;
            private static String url;
            private static String username;
            private static String password;
            
            static{
                try{
                    readConfig();
                    Class.forName(driverClass);
                    con = DriverManager.getConnection(url, username, password);
                }catch(Exception ex){
                    throw new RuntimeException("數(shù)據(jù)庫連接失敗");
                }
            }
            
            private static void readConfig()throws Exception{
                InputStream in = JDBCUtilsConfig.class.getClassLoader().getResourceAsStream("database.properties");
                 Properties pro = new Properties();
                 pro.load(in);
                 driverClass=pro.getProperty("driverClass");
                 url = pro.getProperty("url");
                 username = pro.getProperty("username");
                 password = pro.getProperty("password");
            }
            
            
            public static Connection getConnection(){
                return con;
            }
            
        }            
        
23測試工具類
* A: 測試工具類
    * a: 案例代碼
        public class TestJDBCUtils {
            public static void main(String[] args) {
                Connection con = JDBCUtilsConfig.getConnection();
                System.out.println(con);
            }
        }
24總結
* 把今天的知識點總結一遍。
        

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/67182.html

相關文章

  • Java編程基礎34——JDBC&DBUtil

    摘要:不用自己來創(chuàng)建,而是通過池來獲取對象使用完后,調用的方法也不會真的關閉,而是把歸還給池連接池技術可以完成對象的再次利用接口為數(shù)據(jù)庫連接池提供了公共的接口各個廠商需要讓自己的連接池實現(xiàn)這個接口。 1.DButils工具類的介紹個三個核心類 A: 概述 DBUtils是java編程中的數(shù)據(jù)庫操作實用工具,小巧簡單實用。 DBUtils封裝了對JDBC的操作,簡化了JDBC操作,可以少...

    svtter 評論0 收藏0
  • JDBC【數(shù)據(jù)庫連接池、DbUtils框架、分頁】

    摘要:數(shù)據(jù)庫連接池什么是數(shù)據(jù)庫連接池簡單來說數(shù)據(jù)庫連接池就是提供連接的。。。 1.數(shù)據(jù)庫連接池 什么是數(shù)據(jù)庫連接池 簡單來說:數(shù)據(jù)庫連接池就是提供連接的。。。 為什么我們要使用數(shù)據(jù)庫連接池 數(shù)據(jù)庫的連接的建立和關閉是非常消耗資源的 頻繁地打開、關閉連接造成系統(tǒng)性能低下 編寫連接池 編寫連接池需實現(xiàn)java.sql.DataSource接口 創(chuàng)建批量的Connection用Linke...

    dinfer 評論0 收藏0
  • 1、DBUtils 2、連接池

    摘要:不用自己來創(chuàng)建,而是通過池來獲取對象使用完后,調用的方法也不會真的關閉,而是把歸還給池連接池技術可以完成對象的再次利用接口為數(shù)據(jù)庫連接池提供了公共的接口各個廠商需要讓自己的連接池實現(xiàn)這個接口。 01DButils工具類的介紹個三個核心類 * A: DButils工具類的介紹個三個核心類 * a: 概述 * DBUtils是java編程中的數(shù)據(jù)庫操作實用工具,小巧...

    chuyao 評論0 收藏0
  • 用戶登陸注冊【JDBC版】

    前言 在講解Web開發(fā)模式的時候,曾經寫過XML版的用戶登陸注冊案例!現(xiàn)在在原有的項目上,使用數(shù)據(jù)庫版來完成用戶的登陸注冊!如果不了解的朋友,可以看看我Web開發(fā)模式的博文! 本來使用的是XML文件作為小型數(shù)據(jù)庫,現(xiàn)在使用Mysql數(shù)據(jù)庫,代碼究竟要改多少呢?我們拭目以待! 使用C3P0數(shù)據(jù)庫連接池 導入C3P0的開發(fā)包和導入配置文件 開發(fā)包導入的是這個:c3p0-0.9.2-pre1和mcha...

    jayzou 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<