一永毅、前期準備工作
主要是下載jar
idea 在mave的pox中
eclipse
1、在根目錄下新建一個lib文件夾
? 2人弓、把下載好的驅(qū)動復制到lib下
? 3沼死、添加jar包到工程中
?
二、基礎步驟
1崔赌、加載驅(qū)動(jdk1.6可省略)
- 加載驅(qū)動方式一(推薦采取)
Class.forName("com.mysql.jdbc.Driver") ;
- 加載驅(qū)動方式二
DriverManager.registerDriver(new Driver())意蛀;
- 注意:在實際開發(fā)中并不推薦采用registerDriver方法注冊驅(qū)動。
? 1健芭、采用方式一的方式加載,這樣不會導致驅(qū)動對象在內(nèi)存中重復出現(xiàn)县钥,并且采用此種方式,程序僅僅只需要一個字符串慈迈,不需要依賴具體的驅(qū)動若贮,即不需要import相關的包,使程序的靈活性更高
? 2、方式二,查看Driver的源代碼可以看到兜看,如果采用此種方式锥咸,會導致驅(qū)動程序注冊兩次,也就是在內(nèi)存中會有兩個Driver對象细移。程序依賴mysql的api搏予,脫離mysql的jar包,程序?qū)o法編譯弧轧,將來程序切換底層數(shù)據(jù)庫將會非常麻煩雪侥。 - 自動加載驅(qū)動
JDK6之后,JDBC已經(jīng)升級到4.0了 自動加載java.sql.Driver精绎,而不需要再調(diào)用class.forName速缨。
2、建立連接
- mysql
Connection connection = DriverManager .getConnection("jdbc:mysql://127.0.0.1:3306/test", "root", "root");
- Oracle
Connection connection = DriverManager .getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl", "scott", "123456");
- 參數(shù)一URL標準語法由三部分組成:
jdbc : 子協(xié)議 : 子名稱 jdbc --- 協(xié)議, jdbc的協(xié)議總是jdbc 子協(xié)議 --- 驅(qū)動程序,各種驅(qū)動程序都有不同的子協(xié)議 子名稱 即數(shù)據(jù)源的名稱,是表示數(shù)據(jù)庫的方法,為定位數(shù)據(jù)庫提供確定的信息,每個子協(xié)議都自己的特有結(jié)構(gòu)
- 常用數(shù)據(jù)庫URL
- mysql
MySQL Connector/J Driver 下載地址:http://central.maven.org/maven2/mysql/mysql-connector-java/5.1.43/mysql-connector-java-5.1.43.jar 驅(qū)動程序包名:MySQL-connector-Java-x.x.xx-bin.jar 驅(qū)動程序類名: com.mysql.jdbc.Driver JDBC URL: jdbc:mysql://<host>:<port>/<database_name> 默認端口3306代乃,如果服務器使用默認端口則port可以省略 MySQL Connector/J Driver 允許在URL中添加額外的連接屬性 jdbc:mysql://<host>:<port>/<database_name>?property1=value1&property2=value2
- oracle
Oracle Thin JDBC Driver 驅(qū)動程序包名:ojdbc6.jar 驅(qū)動程序類名: Oracle.jdbc.driver.OracleDriver JDBC URL: jdbc:oracle:thin:@<host>:<port>:<SID>
3旬牲、創(chuàng)建Statement對象
- 核心代碼
Statement statement = connection.createStatement();
- 說明
創(chuàng)建一個Statement對象主要是調(diào)用該對象的方法執(zhí)行SQL語句返回相應的結(jié)果
4、編寫sql語句
- 示例代碼
String sql = "SELECT * FROM EMP" Statement statement = connection.createStatement(); ResultSet rs = statement.executeQuery(sql1);
- 說明
JDBC沒執(zhí)行一條SQL語句,都需要Connection對象的createStatement相關的方法來創(chuàng)建Statement對象, 利用Statement對象向數(shù)據(jù)庫執(zhí)行sql語句 - Statement對象常用方法(API: java.sql.Statement)
//執(zhí)行查詢操作則返回結(jié)果集 resultSet = statement.executeQuery(sql); //執(zhí)行增刪改操作返回int值 int count = statement.executeUpdate(sql); //理論上可以執(zhí)行任何SQL語句搁吓,一般用來執(zhí)行創(chuàng)建表的語句 boolean execute = statement.execute(sql) if(true){//true 表示執(zhí)行的查詢操作返回結(jié)果集 ResultSet resultSet = statement.getResultSet(); }else{//false 表示執(zhí)行的增刪改的操作 int updateCount = statement.getUpdateCount(); }
- 執(zhí)行DML操作(insert update delete)
int executeUpdate(String sql); //返回影響的行數(shù)
- 執(zhí)行DQL操作
ResultSet executeQuery(String sql); //返回查詢的對象信息
- 返回多個結(jié)果的SQL操作
boolean execute(String sql, int[] columnIndexes) throws SQLException //如果結(jié)果為 ResultSet 對象原茅,則返回 true;如果其為更新計數(shù)或者不存在更多結(jié)果堕仔,則返回 false //一般用于執(zhí)行DDL操作
-
執(zhí)行示例圖
5擂橘、處理結(jié)果
- 執(zhí)行增刪改返回的是本次操作影響到的記錄數(shù)。
int count = statement.executeUpdate(sql);
- 執(zhí)行查詢返回的結(jié)果是一個ResultSet對象摩骨。
- ResultSet包含符合SQL語句中條件的所有行通贞,并且它通過一套get方法提供了對這些行中數(shù)據(jù)的訪問。
- 使用結(jié)果集(ResultSet)對象的訪問方法獲取數(shù)據(jù)
? 1恼五、while()遍歷結(jié)果集
? 2、遍歷結(jié)果集for()while (resultSet.next()) { /** * 獲取值 有兩種方式 * 第一種 通過列名來獲取 * 第二種 通過下標索引來獲取 ----根據(jù)索引下標獲取值 ,效率高一點昌罩,但是維護起來不方便 */ resultSet.getInt(1); long empno = resultSet.getLong("empno"); String ename = resultSet.getString("ENAME"); ... }
//遍歷結(jié)果集for() Statement statement= conn.createStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); //注意唤冈,要設置ResultSet的參數(shù)峡迷,否則默認只能.next()操作,不能往前滾動 ResultSet rs = statement.executeQuery(); for(rs.first();!rs.isAfterLast();rs.next()){ String username = rs.getString("username"); ... }
-
ResultSet示意圖
6、關閉JDBC對象
- 說明
操作完成以后要把所有使用的JDBC對象全都關閉你虹,以釋放JDBC資源,關閉順序和聲明順序相反 - 關閉記錄集
- 關閉聲明
- 關閉連接對象
finally{ if(rs != null){ // 關閉記錄集 try{ rs.close() ; }catch(SQLException e){ e.printStackTrace() ; } } if(stmt != null){ // 關閉聲明 try{ stmt.close() ; }catch(SQLException e){ e.printStackTrace() ; } } if(conn != null){ // 關閉連接對象 try{ conn.close() ; }catch(SQLException e){ e.printStackTrace() ; } } }
7彤避、jdbc開發(fā)步驟圖
三傅物、常用的對應的數(shù)據(jù)類型
mysql | oracle | java |
---|---|---|
TIMESTAMP | Timestamp | java.sql.Timestamp |
VARCHAR | VARCHAR2 CLOB | java.lang.String |
TEXT | VARCHAR2 CLOB | java.lang.String |
INT | NUMBER(10,0) | java.lang.Integer |
date(年月日) | java.sql.Date | |
date(年月日時分秒) | java.sql.Date |