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;

你可能感兴趣的:(纯干货,Java学习资料,Java相关技术文档)