Java面試2019常考題系列——jdbc 數據訪問技術(四)

1、JDBC 如何做事務處理?

Con.setAutoCommit(false)

Con.commit();

Con.rollback();

 

2、寫出幾個在 Jdbc 中常用的接口

preparedStatement,callableStatement,statement,Connection,ResultSet

 

3、簡述你對 Statement,PreparedStatement,CallableStatement 的理解

statement 用於執行靜態 SQL 語句並返回它所生成結果的對象,在執行時確定 sql。

PreparedStatement 表示預編譯的 SQL 語句的對象。 SQL 語句被預編譯並且存儲在

PreparedStatement 對象中。然後可以使用此對象高效地多次執行該語句,可以傳參數,在得到

PreparedStatement 對象時確定 sql.

CallableStatement 用於執行 SQL 存儲過程的接口。如果有輸出參數要註冊說明是輸出參數。

 

4、Java 中訪問數據庫的步驟?

1 連接 Oracle 數據庫

Class.forName(“oracle.jdbc.driver.OracleDriver”);

Connection

con=DriverManager.openConnection(“jdbc:oracle:thin:@localhost:1521:DataBase ”,”

UserName”,”Password ”)

1. 利用 JDBC 檢索出表中的數據

Class.forName(“”);

Connection con=DriverManager.openConnection(“ ”,” ”,” ”)

preparedStatment ps=Con.preparedStatment(“select * from [table]”);

ResultSet rs=ps.executeQuery();

While(rs.next)

{

Rs.getString(1) 或 rs.getString(“字段名”)

}

 

 

5、JDBC 中的核心類及其作用是什麼?

DriverManager

Class.forName();

DriverManager.openConnection(“”,”sa”,””)

Connection

PreparedStatement(Statement)

ResultSet rs=executeQuery() dql

While(rs.next())

{

}

executeUpdate() dml ddl

 

6、執行存儲過程用那一個類,如何操作輸出參數?(操作)

CallableStatement c=con. prepareCall ("{call getCustomerName(?,?)}");

c.setString(1,"1");

c.registerOutParameter(2,java.sql.Types.VARCHAR);

c.execute();

c.getString(2);

 

7、可能會讓你寫一段 Jdbc 連 Oracle 的程序.

Class.forName("oracle.jdbc.driver.OracleDriver");

Connection

con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:accp","system",

"system");

 

8、Class.forName 的作用?爲什麼要用?

註冊一個數據庫驅動,將驅動加載到當前的 JVM 中。

 

9、Jdo 是什麼?

JDO 是 Java 對象持久化的新的規範,爲 java data object 的簡稱,也是一個用於存取某種數據倉庫中的對象的標準化 API。JDO 提供了透明的對象存儲,因此對開發人員來說,存儲數據對象完全不需要額外的代碼(如 JDBC API 的使用)。這些繁瑣的例行工作已經轉移到 JDO 產品提供商身上,使開發人員解脫出來,從而集中時間和精力在業務邏輯上。另外,JDO 很靈活,因爲它可以在任何數據底層上運行。JDBC 只是面向關係數據庫(RDBMS)JDO 更通用,提供到任何數據底層的存儲功能,比如關係數據庫、文件、XML 以及對象數據庫(ODBMS)等等,使得應用可移植性更強。(o/rMapping 工具 集合處理)

 

10、在 ORACLE 大數據量下的分頁解決方法。一般用截取 ID 方法,還有是三層嵌套方法

create or replace package myPack

is

type c_type is ref cursor;

procedure getPage(v_sql varchar2,pageSize number,pageIndex number,c out c_type);

end;

create or replace package body myPack

is

procedure getPage(v_sql varchar2,pageSize number,pageIndex number,c out c_type)

is

pageTotal int:=0;

pageFirstRow int:=0;

pageLastRow int:=0;

rowTotal int:=0;

begin

execute immediate 'select count(*) from ('||v_sql||')' into rowTotal;

pageTotal:=ceil(rowTotal/pageSize);

if(pageIndex<1) then

raise_application_error(-20001,'頁數不能小於 1');

end if;

if(pageIndex>pageTotal) then

raise_application_error(-20001,'頁數太大,不能讀取');

end if;

pageFirstRow:=(pageIndex-1)*pageIndex+1;

pageLastRow:=pageFirstRow+pageSize;

open c for ' select * from '||v_sql||' where rownum<'||

pageLastRow||'minus select * from '||v_sql

||' where rownum<'||pageFirstRow;

end;

end;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章