JavaWeb——JDBC八股文、JSBC使用儲存過程、儲存函式、處理CLOB/BLOB型別

cool_cool_coo1發表於2019-01-14

1.jdbc總結(模板、八股文):

try{
a.匯入驅動包、載入具體驅動類Class.forName("具體驅動類");
b.與資料庫建立連線connection = DriverManager.getConnection(...);
c.通過connection,獲取運算元據庫的物件(Statement\preparedStatement\callablestatement)
          stmt = connection.createStatement();
d.(查詢)處理結果集rs = pstmt.executeQuery()

while(rs.next()){ rs.getXxx(..) ;}
}catch(ClassNotFoundException e  )
{ ...}
catch(SQLException e)
{...
}
catch(Exception e)
{...
}
finally
{
    //開啟順序,與關閉順序相反
    if(rs!=null)rs.close()
    if(stmt!=null) stmt.close();
    if(connection!=null)connection.close();
}

--jdbc中,除了Class.forName() 丟擲ClassNotFoundException,其餘方法全部拋SQLException


2.CallableStatement:呼叫 儲存過程、儲存函式

connection.prepareCall(引數:儲存過程或儲存函式名)

引數格式:
儲存過程(無返回值return,用out引數替代):
    { call  儲存過程名(引數列表) }
儲存函式(有返回值return):
    { ? = call  儲存函式名(引數列表) }

儲存過程:

create or replace procedure addTwoNum ( num1  in number,num2  in number,result out number )  -- 1 + 2 ->3
as
begin
    result := num1+num2 ;
end ;

強調:
如果通過sqlplus 訪問資料庫,只需要開啟:OracleServiceSID
通過其他程式訪問資料(sqldevelop、navicate、JDBC),需要開啟:OracleServiceSID、XxxListener

JDBC呼叫儲存過程的步驟:

a.產生 呼叫儲存過程的物件(CallableStatement) cstmt =     connection.prepareCall(   "..." ) ;
b.通過setXxx()處理 輸出引數值 cstmt.setInt(1, 30);
c.通過 registerOutParameter(...)處理輸出引數型別
d.cstmt.execute()執行
e.接受 輸出值(返回值)getXxx()


JDBC調儲存函式:

create or replace function addTwoNumfunction ( num1  in number,num2  in number)  -- 1 + 2 
return number
as
    result number ;    
begin
    result := num1+num2 ;
    return result ;
end ;
/
JDBC呼叫儲存函式:與調儲存過程的區別:
在呼叫時,注意引數:"{? =  call addTwoNumfunction    (?,?) }"

3.處理CLOB/BLOB型別

處理稍大型資料:
    
a.儲存路徑    E:\JDK_API_zh_CN.CHM
    通過JDBC儲存檔案路徑,然後 根據IO操作處理
    例如:JDBC將 E:\JDK_API_zh_CN.CHM 檔案 以字串形式“E:\JDK_API_zh_CN.CHM”儲存到資料庫中
        獲取:1.獲取該路徑“E:\JDK_API_zh_CN.CHM”  2.IO    

b.
    CLOB:大文字資料 (小說->資料)
    BLOB:二進位制


clob:大文字資料   字元流 Reader Writer

1.先通過pstmt 的? 代替小說內容 (佔位符)
2.再通過pstmt.setCharacterStream(2, reader,  (int)file.length());  將上一步的?替換為 小說流, 注意第三個引數需要是 Int型別

取:
1.通過Reader reader = rs.getCharacterStream("NOVEL") ; 將cloc型別的資料  儲存到Reader物件中
2. 將Reader通過Writer輸出即可。


blob:二進位制  位元組流 InputStream OutputStream
與CLOB步驟基本一致,區別:setBinaryStream(...)  getBinaryStream(...)   

相關文章