lark----2005.7.30
********************************************************************
第十一章:数据库及JDBC技术
1.JDBC初步:
JDBC API为Java开发者使用数据库提供了一个统一的编程接口,由一组Java类和接口组成.
在JDBC 3.0中包括两个包:
(1)java.sql:主要针对基本的数据库编程服务,如生成连接,执行语句以及准备语句和运行批处理查询等,同时也有一些
高级的处理,如批处理更新,事务隔离和可滚动结构集等.
(2)javax.sql:主要针对数据库高级服务,如连接管理的连接池,分布式事务处理和行集等.
有四种类型的数据库驱动程序:JDBC-ODBC桥;部分java部分本机驱动程序;中间数据服务访问服务器;纯java驱动程序.
2.JDBC常用接口:
(1)Driver
装载特定厂商提供的数据库驱动程序.如:
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//使用JDBC-ODBC Bridge Driver
Class,forName("jdbc.driver_class_name");//使用JDBC Driver
import java.sql.*;
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");//MS SQL Server
Class.forName("org.gjt.mm.mysql.Driver");//Mysql JDBC
Class.forName("oracle.jdbc.driver.OracleDriver");//Oracle JDBC
(2)DriverManager
DriverManager是JDBC的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立
连接,处理诸如驱动程序登录时间限制及登陆和跟踪消息的显示等事务.
一个很重要的方法是:getConnection():
static Connection getConnection(String url);
static Connection getConnection(String url, Properties info);
static Connection getConnection(String url, String user, String password);
其中的url参数格式为:jdbc:<subprotocol>:<subname>
ex:
MS SQL Sqlserver:jdbc:microsoft:sqlserver://[ip]:[port];user=[user];password=[password]
JDBC-ODBC:jdbc:odbc:[odbcsource]
Oracle oci8:jdbc:oracle:oci8:@[sid]
Mysql:jdbc:mysql:/ip/database,user,password
(3)Connection
Connection对象代表与数据库的连接,一般从DriverManager的getConnection()得到.
主要方法有:close(),commit(),createStatement(),isClosed(),prepareCall(),getMetaData(),
prepareStatement(),rollback(),serAutoCommit(),
(4)Statement
Statement提供在基层连接上运行SQL语句,并访问结果,一般通过Connection的creatStatement()返回Statement实例.
主要方法有:execute(),executeQuery(),executeUpdate(),addBatch(),executeBatch(),clearBatch(),
A.Statement对象用于执行不带参数的简单SQL语句,如
Connection conn=DatabaseConnection.getConnection();
Statement stmt=conn.createStatement();
ResultSet rst=stmt.executeQuery("select * from sometable");
B.PreparedStatement对象用于执行带或不带IN参数的预编译SQL语句,如
Connection conn=DatabaseConnection.getConnection();
PreparedStatement pstmt=conn.preparedStatement("insert into sometable values(?,?,?)");
pstmt.setString(1,"lark");
pstmt.setInt(2,3);
pstmt.setBoolean(3,true);
pstmt.executeUpdate();
C.CallableStatement对象用于执行对数据库已存储过程的调用,如
Connection conn=DatabaseConnection.getConnection();
strSQL="{call demo_exe(?,?,?)}";
java.sql.CallableStatement sqlStmt=conn.prepareCall(strSQL);
sqlStmt.setString(1,"some_1");
sqlStmt.setString(2,"some_2");
sqlStmt.setString(3,"some_3");
int i=sqlStmt.executeUpdate();
(5)ResultSet
ResultSet包含的是数据库操作返回的结果集.
主要方法:getString(),getFloat(),getDouble(),getDate(),getBoolean(),getObject(),getBlob(),getClob(),
如
while(rst.next())
{
out.println(rst.getString("username"));
out.println(rst.getDate("regDate"));
out.println(rst.getString(4));
out.println(rst.getInt("age"));
}
3.配置和连接不同的数据库
*****************************************************************************************************
第十二章:在JSP和Servlet中使用JDBC
*****************************************************************************************************
第十三章:JDBC数据库编程高级问题
1.一个用于查找数据源的工具类:
package com.lark.util;
import java.sql.*;
import javax.naming.*;
import javax.sql.DataSource;
public class DatabaseConn
{
public static synchronized Connection getConnection()
throws Exception
{
try
{
Context initContext=new javax.naming.InitialContext();
Context envContext=(Context)initContext.lookup("java:comp/env");
DataSource ds=(DataSource)envContext.lookup("jdbc/lark");
return ds.getConnection();
}
catch(SQLException e)
{
throw e;
}
catch(NamingException e)
{
throw e;
}
}
}
2.分页显示解决方案:
(一个页面信息Bean,一个业务处理Bean,一个控制servlet,一个显示信息jsp,一个可重用分页动作jsp)
过程:分页动作jsp发出请求,控制servlet调用业务处理Bean生成页面信息Bean,
并把这生成的Bean保存到Request中,派发到信息显示的jsp页面显示出来.