J2EE技术规范(二)——JDBC
分类: java
一、了解JDBC
(1) JDBC是以统一方式访问数据库的API
(2) JDBC提供:
独立于平台的数据库访问
位置透明
对专有数据库的问题时透明的
二、了解JDBC驱动程序
(1) JDBC Drivers是实现数据库操作的类
(2) Drivers分成两类:
2-层——客户直接和数据库会话
3-层——客户与代表数据库的中间层(WebLogic Server)会话
其实也就是:两层架构直接与数据库进行处理
三层架构加载数据库的中间层
这些跟.net几乎没什么差别。我们继续来看一个图:
我们看这个图有什么想发?
第4种:居于Java特色的。不需要安装软件和客户端;跟位置与平台是没有关系的。,
第1、2、4:都是两层的类型,直接连接到数据库的
第3种:基于NetworkServer集中式的监控,屏蔽丢不同的平台。在1、2、4的基础上,通过webserver来连接的一种资源。是一种特殊的jdbC的类型
三、使用JDBC直接访问数据库
(1) 直接访问数据库由下列组成:
加载JDBC驱动器类
我们看一下直接连接数据库的示例:
(2) 使用基本的JDBC命令
[java]view plaincopyprint?
1. import java.sql.*;
2. try{
3. class.forName("com.pointbase.jdbc.jdbcUniversalDriver");
4. Connection con=DriverManager.getConnect("jdbc:pointbase;//server:port/MyDatabase");
5. Statement stmt=con.createStatement();
6. String sql="select * from mytable";
7. ResultSet res=stmt.executeQuery(sql);
8. while(res.next()){
9. String col1=res.getString("MYCOLUMN1");
10. int col2=res.getInt("MYCOLUMN2");
11. }catch(Exception e){...}
12. }
import java.sql.*;try{
class.forName("com.pointbase.jdbc.jdbcUniversalDriver");
Connection con=DriverManager.getConnect("jdbc:pointbase;//server:port/MyDatabase");
Statement stmt=con.createStatement();
String sql="select * from mytable";
ResultSet res=stmt.executeQuery(sql);
while(res.next()){
String col1=res.getString("MYCOLUMN1");
int col2=res.getInt("MYCOLUMN2");
}catch(Exception e){...}
}
四、使用多层(Type3)Drivers
要使用多层体系结构,必须至少配置一个连接池(Connection Pool和一个数据源(DataSource)
五、连接池Connection
连接池:
消除频繁建立连接所需的负载
是用于管理数据库连接的管理对象
提供可共享,安全的连接
六、数据源Data Sources
Data Sources是:
从连接池中提供连接的被管理的工厂对象
绑定到JNDI并使用管理控制台配置
七、我们通过数据源Data Sources访问数据库
(1) 使用DataSource:
先在JNDI中查找到它
然后从DataSource获得一个连接
使用数据源连接数据库的示例:
[java]view plaincopyprint?
1. import java.sql.*;import javax.sql.*;import javax.naming.*;...
2. try{
3.
4. context ctx=new InitialContext();
5. DataSource ds=(DataSource)ctx.lookup("TestDataSource");
6. Connection con=ds.getConnection();
7. Statement stmt=con.createStatement();
8. String sql="SELECT * FROM MYTABLE";
9. ResultSet res=stmt.executeQuery(sql);
10. While(res.next()){
11. String col1=res.getString("MYCOLUM1");
12. ...
13. }
14. con.close();
15. }catch(Exception e){...}
import java.sql.*;import javax.sql.*;import javax.naming.*;...try{
context ctx=new InitialContext();
DataSource ds=(DataSource)ctx.lookup("TestDataSource");
Connection con=ds.getConnection();
Statement stmt=con.createStatement();
String sql="SELECT * FROM MYTABLE";
ResultSet res=stmt.executeQuery(sql);
While(res.next()){
String col1=res.getString("MYCOLUM1");
...
}
con.close();
}catch(Exception e){...}
八、Statements和Prepared Statements
(1) Statement对象含有与数据库交互的SQL查询或更新语句
使用Statement对象查询数据库的示例:
[java]view plaincopyprint?
1. Statement stmt=con.createStatement();
2. String sql="SELECT * FROM MYTABLE";
3. ResultSet res=stmt.excuteQuery(sql);
Statement stmt=con.createStatement();String sql="SELECT * FROM MYTABLE";
ResultSet res=stmt.excuteQuery(sql);
使用PreparedStatement对象查询数据库的示例:
[java]view plaincopyprint?
1. String sql="SELECT * FROM MYTABLE WHERE COL1=? AND COL2=?";
2. PreparedStatement pStatement=con.prepareStatement(sql);
3. pStatement.setString(1,searchVariableString);
4. pStatement.setInt(2,searchVariableInt);
5. ResultSet rs=pStatement.executeQuery();