1. JDBC编程的步骤:
1.注册驱动
a.通过类装载器
Class.forname(driverName)
b.直接实例化驱动
Driver driver = new DriverImpl();
DriverManager.registerDriver(driver);
c.通过jdbc.drivers属性
外部向java程序传递参数的两种方式:
1.program参数:
java Test a b c
程序中通过String[] args获取
2.jvm参数:
java -Dname=briup -Dage=20 Test
程序中通过
Properties props=System.getProperties();
28
J2EE @ zxw
String param=props.getProperty("XXXX");获取
java -Djdbc.drivers=driverName[:driverName2:...]
例如:-Djdbc.drivers=oracle.jdbc.driver.OracleDriver
2.建立连接
a.通过DriverManager:
Connection con=DriverManager.getConnection(url,user,password);
b.通过java.sql.Driver
Driver driver = new DriverImpl();
Connection con=driver.connect(String url,Properties info);
知道properties的使用方法;
3.创建statement:statement用来发送要执行的sql语句
a.Statement:执行不带参数的sql语句,创建:connection.createStatement()
b.PreParedStatement:执行带参数或不带参数的预编译的SQL语句,
下次执行的时候就不要编译和优化了;
创建:connection.prepareStatement()
c.CallableStatement:调用数据库中的存储过程或函数等等,PL/SQL
创建:connection.parpareCall();
b和c称为同构的Statement,a称为异构的Statement.
面试》》 4.执行sql语句
statement.executeQuery(); 返回类型ResultSet
statement.executeUpdate();返回类型int,执行此sql语句所影响的记录数。
statement.execute();返回类型boolean,代表执行此语句是否有resultset
返回,有就是ture。
5.处理结果集
只有select语句才会有结果集返回;
while(rs.next()){ //rs是一个游标,初始时在第一条记录的上面一行。
//每next一次,向下一行。
rs.getString(1);
rs.getInt(2);
}
可以使用位置标识,也可以使用列名来标识(当结果集字段比较多的时候用列名标识法,可以增强程序
的可读性)。
6.释放资源
一般写在finally语句块中。所释放的资源一般有ResultSet,Statement,Connection
2.建立连接的步骤:
String driver="oracle.jdbc.driver.OracleDriver";
String url="jdbc:oracle:thin:@192.168.1.200:1521:briupdb";
String user="briup";
String password="briup";
//建立几个以后关闭几个哦
Connection con=null;
Statement stm=null;
ResultSet rs=null;
try{
29
J2EE @ zxw
//1.注册驱动
Class.forName(driver);
//2.建立连接
con=DriverManager.getConnection(url,user,password);
//3.创建statement
stm=con.createStatement();
//4.执行sql语句
rs=stm.executeQuery("select * from student");
//5.处理结果集
while(rs.next()){
String name=rs.getString(1);
int age =rs.getInt(2);
System.out.println("name:"+name+"age:"+age);
}
}catch(Exception e){
e.printStackTrace();
}finally{
//6.释放资源,将其放在finally中
if(rs!=null){
try{
rs.close();
}catch(SQLException e){
e.printStackTrace();
}
}
if(stm!=null){
try{
stm.close();
}catch(SQLException e){
e.printStackTrace();
}
}
if(con!=null){
try{
con.close();
}catch(SQLException e){
e.printStackTrace();
}
}
3. Statement接口的比较
答: | Statement | PreparedStatement | CallableStatement
--------------------------------------------------------------------------------------------
写代码位置 | 客户端 | 客户端 | 服务器端
--------------------------------------------------------------------------------------------
存放代码的位置| 客户端 | 服务器端 | 服务器端
--------------------------------------------------------------------------------------------
编写代码技术 | Java,SQL操作 |Java,SQL操作 | 数据库的程序语言,如PL/SQL
--------------------------------------------------------------------------------------------
可配置性 | 高 |第一次高,以后低 | 低
30
J2EE @ zxw
--------------------------------------------------------------------------------------------
可移植性 | 高 |假设支持pstmt的话高 | 低
--------------------------------------------------------------------------------------------
传输效率 | 低 |第一次低,以后高 | 高
------------------------------------------------------------------------------------------------------------------------------------
java中的异常是对象,所有异常的父类是java.lang.Throwable。
java中异常采用冒泡处理机制。
Error:没有办法处理;
Exception:可以进行处理。
uncheck exception:不需要进行处理,如:空指针异常,数组越界等等。
check exception:所有实现了exception,必须对其进行处理,否则报错;
要么用try...catch捕获;要么继续向上抛出。
Java Database Connectivity(JDBC)JDBC以一种统一的方式来对各种各样的数据库进行存取。和ODBC一样,JDBC为开发人员隐藏了不同数据库的不同特性。另外,由于JDBC建立在Java的基础上,因此还提供了数据库存取的平台独立性。JDBC定义了4种不同的驱动程序:JDBC-ODBCBridge、JDBC-native driverbridge、JDBC-networkbridge、PureJavadriver。在一个多层的企业级应用中,更大的可能是在客户端和一个EJB进行通信,采用EJB建立数据库连接。为了实现和改进可伸缩性和系统性能, 也可以采用连接缓冲池(connection pool)优化数据库连接。Java Naming and Directory Interface (JNDI)JNDI API被用于执行名字和目录服务。它提供了一致的模型来存取和操作企业级的资源如DNS和LDAP,本地文件系统,后者在应用服务器中的对象。在JNDI中,在目录结构中的每一个结点称为context。每一个JNDI名字都是相对于context的。应用可以通过这个初始化的context经有这个目录树来定位它所需要的资源或对象。
JNDI相对与JDBC来说是他的灵活性,程序员不需要关心“具体的数据库后台是什么?JDBC驱动程序是什么?JDBC URL格式是什么?访问数据库的用户名和口令是什么?”等等这些问题,程序员编写的程序应该没有对 JDBC 驱动程序的引用,没有服务器名称,没有用户名称或口令 —— 甚至没有数据库池或连接管理。而是把这些问题交给J2EE容器来配置和管理,程序员只需要对这些配置和管理进行引用即可。