JDBC學習隨筆

-------------------------------------------------------------------------------------------------------------------------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(); }
相關文章
相關標籤/搜索