-------------------------------------------------------------------------------------------------------------------------java
概念sql
JDBC Java Database Connectivity 提供Java訪問各類數據庫的API。 而後由這個數據庫廠商來完成這些藉口。數據庫
JDBC API中的幾個重要的接口併發
DriverManger 咱們要鏈接一個或N個數據庫,DriverManger就是管理就一個或多個數據庫用的,咱們要什麼鏈接,就從它這取就好了oracle
Connection 提供了與數據庫交互的方法(自我理解,向DriverManger索要的一個鏈接)url
Statement 提供了與SQL相關的操做(自我理解,就是用來操做SQL語句的)spa
ResultSet 提供了SQL返回結果集的操做(SQL語句執行的結果。)code
SQLException 處理在上面幾個操做中的異常。對象
概念總以爲很難理解。我是這麼理解,不對的地方請你們指出blog
數據庫在對面,中間有條河,我要操做數據庫,分爲幾個步驟
1.我須要鏈接數據庫,我先問問數據庫怎麼鏈接你。而後數據庫給我個驅動。
2.MangerDriver爸爸告訴我怎麼修,而後我修好這個通道。
3.橋修好了找個對象就能夠和數據庫進行操做了。
4.對象取來了我執行數據庫操做結果
-------------------------------------------------------------------------------------------------------------------------
變成代碼
1 //註冊驅動 2 Class.forName("oracle.jdbc.driver.OracleDriver"); 3 //創建簡介 4 Connectoin connection = DriverManger.getConnecton("jdbc:oracle.thin://192.168.93.93:1521/orcl"); 5 //獲取操做sql的對象 6 Statement statement = connection.createStatement(); 7 //執行sql語句 8 ResultSet resultSet = statament.executeUpdate(sql);
-------------------------------------------------------------------------------------------------------------------------
主要方法
1.註冊驅動
DriverManager.registerDriver(new DriverManager.registerDriver());不推薦使用這種方式來加載驅動 Class.forName("oracle.jdbc.driver.OracleDriver");
2.Connection能夠經過倆個累得到
--DriverManger 在Java.sql 這個鏈接底層拿到鏈接
--DataSource 在Javax.sql 這個容器封裝成數據源,而後獲取鏈接。訪問量大的時候最好用這個(其實我也不知道 我看網上查的,最後試試)
connection = DriverManager.getConnection(url, user, password);
//url 三種格式 String url = null ; //1 推薦 url = jdbc:oracle:thin:@//<host>:<port>/<service_name> ;
//2 url =jdbc:oracle:thin:@<host>:<port>:<SID>;
//3 url =jdbc:oracle:thin:@<TNSName>;
//注意
connection.setAutoCommit(false); //這句話意思是把事務設置成不自動提交,若是在statement操做sql語句時,不會出現第N句語句出現異常以後,N後面的語句執行不到的狀況
statement.executeUpdate(sql);
statement.executeUpdate(sql);
statement.executeUpdate(sql);
connection.commit();//提交
conection.rollback();//若是上面sql語句中有任何語句錯誤,可總體回滾
3.Statement preparedStatement CallableStatement (步驟 建立對象 執行sql語句 關閉statement)
第三個繼承第二個 第二個繼承第一個
Statement 提供最基本的sql操做 適合靜態的sql語句,且傳入的sql語句沒法接受參數
preparedStatement 能夠在sql中傳遞參數 適合屢次使用sql語句,能夠防止SQL注入
//建立方法
statement = connection.createStatement(resultSetType, resultSetConcurrency, resultSetHoldabliity);
//建立一個statement對象,該對象生成具備給定類型,併發性,可保存的result對象
//resultSetType參數主要描述倆件事,遊標是否能夠左右移動,已經取出的結果集對數據庫的改動是否要更新
//resultSetType有三種能夠取值:resultSet.TYPE_FORWARD_ONLY,遊標只能向前移動,默認是這種;
//resultSet.TYPE_SCROLL_INSENSITIVE能夠先後移動,對數據的改動不關心(如你正在讀取數據的時候,有其餘一我的操做數據庫,對你查詢的結果集作出改變,次改變對你不影響);resultSet.TYPE_SCROLL_SENSITIVE(哈哈 這個單詞我認識,打CS調節鼠標速度的)能夠先後移//動,而且數據庫發生改動時候,resultSet也發生變化。 這種狀況下resultSet能夠複用。
//resultSetConcurrency,是否更新結果集中的數據到數據庫
//能夠有倆種取值,resultSet.CONCUR_READ_ONLY是隻讀,resultSet.CONCUR_UPDATEABLE能夠更改的
//method //若是有result 返回爲true,不然爲flase,通常用於drop alter create boolean execute(String SQL) //返回影響的行數,通常用於insert update delete int executeUpdate(String SQL) //返回一個結果集result 通常用於查詢select ResultSet executeQuery(String SQL)
4.ResultSet
當對數據庫進行查詢操做的時候, 數據庫返回的數據經過 ResultSet 接口獲取. ResultSet就是SQL執行的結果,ResultSet 內部管理了一個 cursor(遊標), cursor 指向當前要讀的數據,
ResultSet 提供瞭如下三類接口:
遊標移動接口, 用來操做移動遊標.
獲取數據接口, 用來從當前遊標指向位置的數據
更新數據接口, 用來更新當前遊標指向位置的數據, 並能夠更改對應數據庫中的數據.
//方法
resultSet.next();//把光標移動到下一行。(從上到下)
resultSet.previous();//把光標移動到上一行。
resultSet.absolute(int row) //移動到指定行
resultSet.beforeFirst();移動到最前面
resultSet.afterLast();移動到最後面
resultSet.getObject("id");
resultSet.getInt(1); 或者但是resultSet.getInt("id");//取第一colum或者是取id這個colum
connection statement resultset 要釋放。
-------------------------------------------------------------------------------------------------------------------------
案例 讀取數據
ID NAME PASSWORD EMAIL BIRTHDAY AGE
---------- ------------------------------ -------------------------------------------------- -------------------------------------------------------------------------------- ----------- ----
4 張三 admin 123qq.com 2015/11/15 30
1 李四 admin 455@qq.com 2015/11/14 20
5 王五 admin 123@qq.com 2015/11/17 10
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import oracle.jdbc.driver.OracleDriver; public class JDBCDemo { public static void main(String[] args) { // Connection connection = null; Statement statement = null; ResultSet resultSet = null; String url = "jdbc:oracle:thin:@//192.168.93.93:1521/orcl"; String user = "user"; String password = "passowrd"; try { //1.註冊驅動 - - Class.forName("oracle.jdbc.driver.OracleDriver"); //2.獲取與數據庫的鏈接 connection = DriverManager.getConnection(url, user, password); //3.得要操做sql的對象 statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); //4.得sql語句結果集 resultSet = statement.executeQuery("select * from user1"); //5.獲取查詢結果 while(resultSet.next()){ System.out.println(resultSet.getObject("id")); System.out.println(resultSet.getObject("name")); System.out.println(resultSet.getObject("password")); System.out.println(resultSet.getObject("birthday")); System.out.println(resultSet.getObject("age")); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); // 聽別人說要關閉它們 } finally{ try { if(connection != null){ connection.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } connection = null; try { if(statement != null){ statement.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } statement = null; try { if(resultSet != null){ resultSet.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } resultSet = null; } } }
//DataSource獲取Connection對象
public static Connection getOralceConnectionWithDataSource() throws SQLException{ OracleDataSource dataSource = new OracleDataSource(); driver = properties.getProperty(driver); url = properties.getProperty(url); user = properties.getProperty(user); password = properties.getProperty(password); dataSource.setURL(url); dataSource.setUser(user); dataSource.setPassword(password); return dataSource.getConnection(); }