JDBC笔记(1)
JDBC第一天
上午:
一.JDBC原理概述
1,JDBC是一套協(xié)議,是JAVA開發(fā)人員和數(shù)據(jù)庫廠商達(dá)成的協(xié)議,也就是由Sun定義一組接口,由數(shù)據(jù)庫廠商來實現(xiàn),并規(guī)定了JAVA開發(fā)人員訪問數(shù)據(jù)庫所使用的方法的調(diào)用規(guī)范。
2,JDBC的實現(xiàn)是由數(shù)據(jù)庫廠商提供,以驅(qū)動程序形式提供。
3,JDBC在使用前要先加載驅(qū)動。
JDBC對于使用者要有一致性,對不同的數(shù)據(jù)庫其使用方法都是相同的。
驅(qū)動開發(fā)必須要實現(xiàn)Driver接口。
數(shù)據(jù)庫驅(qū)動的實現(xiàn)方式
JDBC-ODBC橋接式
JDBC網(wǎng)絡(luò)驅(qū)動,這種方式是通過中間服務(wù)器的協(xié)議轉(zhuǎn)換來實現(xiàn)的
JDBC+本地驅(qū)動,這種方式的安全性比較差。
JDBC驅(qū)動,由數(shù)據(jù)庫廠商實現(xiàn)。
二.JDBC的API
java.sql包和javax.sql包
Driver接口(驅(qū)動),在加載某一 Driver 類時,它應(yīng)該創(chuàng)建自己的實例并向 DriverManager 注冊該實例。這意味著用戶可以通過調(diào)用以下程序加載和注冊一個驅(qū)動程序?
Class.forName("oracle.jdbc.driver.OracleDriver")
DriverManager類(驅(qū)動管理器),它可以創(chuàng)建連接,它本身就是一個創(chuàng)建Connection的工廠(Factory)。
Connection接口,會根據(jù)不同的驅(qū)動產(chǎn)生不同的連接
Statement接口,發(fā)送sql語句
ResultSet接口(結(jié)果集),是用來接收select語句返回的查詢結(jié)果的。其實質(zhì)類似于集合。
下午:
三.JDBC應(yīng)用步驟
1,注冊加載一個driver驅(qū)動
2,創(chuàng)建數(shù)據(jù)庫連接(Connection)
3,創(chuàng)建一個Statement(發(fā)送sql)
4,執(zhí)行sql語句
5,處理sql結(jié)果(select語句)
6,關(guān)閉Statement
7,關(guān)閉連接Connection。
注意:6,7兩個步驟勢必須要做的,因為這些資源是不會自動釋放的,必須要自己關(guān)閉
訪問Oracle的數(shù)據(jù)庫的驅(qū)動名字叫ojdbc14.jar,要使用這個驅(qū)動程序,要先將他加到環(huán)境變量CLASSPATH中。
? ? 注冊加載驅(qū)動driver,也就是強制類加載
? ? Class.forName(Driver包名.Driver類名)。
? ? Driver d=new Driver類();//注意:這個方法不能用參數(shù)來構(gòu)造
? ? DriverManager.registerDriver(d);
? ? Oracle的Driver的全名oracle.jdbc.driver.OracleDriver
? ? mysql的Driver的全名com.mysql.jdbc.Driver
? ? SQLServer的Driver的全名com.microsoft.jdbc.sqlserver.SQLServerDriver
? ? 創(chuàng)建連接
? ? DriverManager.getConnection(String url,String username,String password);
? ? Connection連接是通過DriverManager的靜態(tài)方法getConnection(.....)來得到的,這個方法的實質(zhì)是把參數(shù)傳到實際的Driver中的connect()方法中來獲得數(shù)據(jù)庫連接的。
? ? Oracle的URL值是由連接數(shù)據(jù)庫的協(xié)議和數(shù)據(jù)庫的IP地址及端口號還有要連接的數(shù)據(jù)庫的庫名(DatebaseName)
? ? Oracle URL的格式
? ? jdbc:oracle:thin:(協(xié)議)@XXX.XXX.X.XXX:XXXX(IP地址及端口號):XXXXXXX(所使用的庫名)
? ? 例:jdbc:oracle:thin:@192.168.0.20:1521:tarenadb
? ? MySql URL的寫法
? ? 例: jdbc:mysql://localhost:3306/tarena
? ? SQLServer URL的寫法
? ? 例:jdbc:microsoft:sqlserver://localhost:1433/test
? ? java -Djdbc.drivers=驅(qū)動的完整類名
? ? 使用虛擬機參數(shù),加載驅(qū)動 -D表示為虛擬機參數(shù)賦值
? ? java -Djdbc.drivers=oracle.jdbc.driver.OracleDriver:com.mysql.jdbc.Driver
? ?
四.JDBC基本方法?
? ? DriverManager:如果有多個驅(qū)動可用的話,DriverManager會根據(jù)URL選擇其中一個可用的驅(qū)動. ?
? ??
? ? Driver:可以選擇固定的驅(qū)動
? ? Driver driver = new oracle.jdbc.driver.OracleDriver();
? ? String user = "sd0613";
String password = "sd0613";
Properties prop = new Properties();
prop.setProperty("user",user);
prop.setProperty("password",password);
? ? driver.connect(url,properties);?
? ??
? ? executeQuery(sqlString);//返回結(jié)果集
? ? executeUpdate(sqlString);//返回值為該次操作影響的記錄條數(shù),create table返回0
? ? execute(sqlString);
? ? //適用于不知道具體的操作是什么,返回值是boolean類型的
? ? //如果返回值是true,代表執(zhí)行查詢操作;否則代表執(zhí)行更新操作.
? ??
? ? ResultSet
? ? next()方法:
? ? 1.判斷是否存在下一條記錄
? ? 2.將游標(biāo)移向下一條記錄 ??
? ? getXXX(字段名或字段序號)//注意:字段序號從1開始
? ??
? ? 關(guān)閉問題:
? ? 使用Connection對象獲得一個Statement,Statement中的executeQuery(String sql) 方法可以使用select語句查詢,并且返回一個結(jié)果集 ResultSet通過遍歷這個結(jié)果集,可以獲得select語句的查詢結(jié)果,ResultSet的next()方法會操作一個游標(biāo)從第一條記錄的前邊開始讀取,直到最后一條記錄。executeUpdate(String sql) 方法用于執(zhí)行DDL和DML語句,可以update,delete操作。
注意:要按先ResultSet結(jié)果集,后Statement,最后Connection的順序關(guān)閉資源,因為Statement和ResultSet是需要連接時才可以使用的,所以在使用結(jié)束之后有可能其他的Statement還需要連接,所以不能先關(guān)閉Connection。
上午:
一.JDBC原理概述
1,JDBC是一套協(xié)議,是JAVA開發(fā)人員和數(shù)據(jù)庫廠商達(dá)成的協(xié)議,也就是由Sun定義一組接口,由數(shù)據(jù)庫廠商來實現(xiàn),并規(guī)定了JAVA開發(fā)人員訪問數(shù)據(jù)庫所使用的方法的調(diào)用規(guī)范。
2,JDBC的實現(xiàn)是由數(shù)據(jù)庫廠商提供,以驅(qū)動程序形式提供。
3,JDBC在使用前要先加載驅(qū)動。
JDBC對于使用者要有一致性,對不同的數(shù)據(jù)庫其使用方法都是相同的。
驅(qū)動開發(fā)必須要實現(xiàn)Driver接口。
數(shù)據(jù)庫驅(qū)動的實現(xiàn)方式
JDBC-ODBC橋接式
JDBC網(wǎng)絡(luò)驅(qū)動,這種方式是通過中間服務(wù)器的協(xié)議轉(zhuǎn)換來實現(xiàn)的
JDBC+本地驅(qū)動,這種方式的安全性比較差。
JDBC驅(qū)動,由數(shù)據(jù)庫廠商實現(xiàn)。
二.JDBC的API
java.sql包和javax.sql包
Driver接口(驅(qū)動),在加載某一 Driver 類時,它應(yīng)該創(chuàng)建自己的實例并向 DriverManager 注冊該實例。這意味著用戶可以通過調(diào)用以下程序加載和注冊一個驅(qū)動程序?
Class.forName("oracle.jdbc.driver.OracleDriver")
DriverManager類(驅(qū)動管理器),它可以創(chuàng)建連接,它本身就是一個創(chuàng)建Connection的工廠(Factory)。
Connection接口,會根據(jù)不同的驅(qū)動產(chǎn)生不同的連接
Statement接口,發(fā)送sql語句
ResultSet接口(結(jié)果集),是用來接收select語句返回的查詢結(jié)果的。其實質(zhì)類似于集合。
下午:
三.JDBC應(yīng)用步驟
1,注冊加載一個driver驅(qū)動
2,創(chuàng)建數(shù)據(jù)庫連接(Connection)
3,創(chuàng)建一個Statement(發(fā)送sql)
4,執(zhí)行sql語句
5,處理sql結(jié)果(select語句)
6,關(guān)閉Statement
7,關(guān)閉連接Connection。
注意:6,7兩個步驟勢必須要做的,因為這些資源是不會自動釋放的,必須要自己關(guān)閉
訪問Oracle的數(shù)據(jù)庫的驅(qū)動名字叫ojdbc14.jar,要使用這個驅(qū)動程序,要先將他加到環(huán)境變量CLASSPATH中。
? ? 注冊加載驅(qū)動driver,也就是強制類加載
? ? Class.forName(Driver包名.Driver類名)。
? ? Driver d=new Driver類();//注意:這個方法不能用參數(shù)來構(gòu)造
? ? DriverManager.registerDriver(d);
? ? Oracle的Driver的全名oracle.jdbc.driver.OracleDriver
? ? mysql的Driver的全名com.mysql.jdbc.Driver
? ? SQLServer的Driver的全名com.microsoft.jdbc.sqlserver.SQLServerDriver
? ? 創(chuàng)建連接
? ? DriverManager.getConnection(String url,String username,String password);
? ? Connection連接是通過DriverManager的靜態(tài)方法getConnection(.....)來得到的,這個方法的實質(zhì)是把參數(shù)傳到實際的Driver中的connect()方法中來獲得數(shù)據(jù)庫連接的。
? ? Oracle的URL值是由連接數(shù)據(jù)庫的協(xié)議和數(shù)據(jù)庫的IP地址及端口號還有要連接的數(shù)據(jù)庫的庫名(DatebaseName)
? ? Oracle URL的格式
? ? jdbc:oracle:thin:(協(xié)議)@XXX.XXX.X.XXX:XXXX(IP地址及端口號):XXXXXXX(所使用的庫名)
? ? 例:jdbc:oracle:thin:@192.168.0.20:1521:tarenadb
? ? MySql URL的寫法
? ? 例: jdbc:mysql://localhost:3306/tarena
? ? SQLServer URL的寫法
? ? 例:jdbc:microsoft:sqlserver://localhost:1433/test
? ? java -Djdbc.drivers=驅(qū)動的完整類名
? ? 使用虛擬機參數(shù),加載驅(qū)動 -D表示為虛擬機參數(shù)賦值
? ? java -Djdbc.drivers=oracle.jdbc.driver.OracleDriver:com.mysql.jdbc.Driver
? ?
四.JDBC基本方法?
? ? DriverManager:如果有多個驅(qū)動可用的話,DriverManager會根據(jù)URL選擇其中一個可用的驅(qū)動. ?
? ??
? ? Driver:可以選擇固定的驅(qū)動
? ? Driver driver = new oracle.jdbc.driver.OracleDriver();
? ? String user = "sd0613";
String password = "sd0613";
Properties prop = new Properties();
prop.setProperty("user",user);
prop.setProperty("password",password);
? ? driver.connect(url,properties);?
? ??
? ? executeQuery(sqlString);//返回結(jié)果集
? ? executeUpdate(sqlString);//返回值為該次操作影響的記錄條數(shù),create table返回0
? ? execute(sqlString);
? ? //適用于不知道具體的操作是什么,返回值是boolean類型的
? ? //如果返回值是true,代表執(zhí)行查詢操作;否則代表執(zhí)行更新操作.
? ??
? ? ResultSet
? ? next()方法:
? ? 1.判斷是否存在下一條記錄
? ? 2.將游標(biāo)移向下一條記錄 ??
? ? getXXX(字段名或字段序號)//注意:字段序號從1開始
? ??
? ? 關(guān)閉問題:
? ? 使用Connection對象獲得一個Statement,Statement中的executeQuery(String sql) 方法可以使用select語句查詢,并且返回一個結(jié)果集 ResultSet通過遍歷這個結(jié)果集,可以獲得select語句的查詢結(jié)果,ResultSet的next()方法會操作一個游標(biāo)從第一條記錄的前邊開始讀取,直到最后一條記錄。executeUpdate(String sql) 方法用于執(zhí)行DDL和DML語句,可以update,delete操作。
注意:要按先ResultSet結(jié)果集,后Statement,最后Connection的順序關(guān)閉資源,因為Statement和ResultSet是需要連接時才可以使用的,所以在使用結(jié)束之后有可能其他的Statement還需要連接,所以不能先關(guān)閉Connection。
總結(jié)
- 上一篇: 【备忘】传智播客ios第五期
- 下一篇: ik与拼音分词器,拓展热词/停止词库