在JSP技术中,对数据库的操作都是通过JDBC组件完成的。JDBC在java程序和数据库之间起到桥梁的作用。
一 JDBC的概念
1. JDBC(Java DataBase Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问。它由一组用JAVA语言编写的类和接口组成。JDBC是一个“低级”接口,可以直接调用SQL命令,也可以在它之上建立高级接口和工具,提供对用户更友好的接口。
2. JDBC API支持数据库访问的两层模型和三层模型。
两层模型:客户程序<-->数据库;三层模型:客户程序<-->中间层<-->数据库。
中间层的好处是
- 可以控制对公司数据的访问和可做的更新种类。
- 用户可以利用高级API,由中间层负责把它转换为相应的低级调用
3. JDBC的驱动程序有四种:JDBC-ODBC桥,本地API驱动,网络协议驱动,本地协议驱动。
二 JDBC API介绍
- DriverManager类,负责加载不同驱动程序,根据不同请求,返回数据库连接(Connection).
a. 使用DriverManager.getConnection()建立与数据库的连接。
b. 包含一系列Driver类,Driver类有静态部分,它创建该类实例,通过调用DriverManager.registerDriver对自己进行注册,不需用户直接调用注册方法。
c. 通过Class.forName()方法显示加载驱动程序类如:Class.forName("acme.db.Driver");通过将驱动程序加
java.lang.System的jdbc.drivers属性中,这是一个DriverManager类加载的驱动程序类名的列表,冒号分隔,初始化DriverManager类时,搜索该属性,试图加载驱动程序。当加载Driver类并在DriverManger类注册后( 先加载,再注册 ),在DriverManager.getConnection()发出连接请求时,DriverManager检查每个驱动程序,找到最近的驱动程序(可能有多个可以的)与URL连接。 URL 表示标示数据库的方法。URL语法:jdbc:<子协议>:<子名称>
如
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");// 加载驱动程序
String url="jdbc:odbc:fred";
DriverManager.getConnection(url,"userID","passwd");
- Connection对象代表与数据库的连接,连接 过程 包含所执行的SQL语句和在该连接上返回的结果。
- Statement、PreparedStatement(带或不带参数的预编译SQL)、CallableStatement对象(调用数据库存储过程),将SQL语句发送到数据库中。
a. excuteQuery()返回单个结果集,如select语句
b. excuteUpdate()返回受影响的行数,如insert,update,delete
c. excute()返回多个结果集
Connection con = DriverManager.getConnection(url,
"userID","passwd");
Statement stmt = con.createStatement();
ResultSet st = stmt.excuteQuery("select a,b form Table1");
注:Statement对象会由Java垃圾回收程序自动关闭,作为良好编程风格需显示关闭它,及时释放DBMS资源。
- ResultSet 数据库的结果集常用方法如next()等,控制游标在结果集中的移动。
三 应用实例:采用JDBC-ODBC方式访问Access数据库
1.先在access数据库中创建数据库test,并创建表user,字段信息,username,userpwd,userxian
2.创建odbc数据源连接,方法略
3.完成数据库添加记录操作,需要两个JSP页面,一个为数据输入页面 in1.jsp ,一个为数据处理页面 in2.jsp 。
代码如下:
in1.jsp
<%@page contentType="text/html; charset=GB2312" language="java"
import="java.io.*"%>
<html>
<body>
<center>
<h3>添加用户页面</h3>
<form method=post action=in2.jsp>
用户名:<input name=username><br>
密 码: <input type=password name=userpwd><br>
<input type=submit value="提交"><input type=reset value="重置">
</form>
</center>
</body>
</html>
in2.jsp
<%@page contentType="text/html; charset=GB2312" language="java"
import="java.sql.*"%>
<%!String getS(String str) {
try {
byte b[] = str.getBytes("iso-8859-1");
str = new String(b);
} catch (Exception e) {
str = "出现异常";
}
return str;
}%>
<%
try {
String str1 = request.getParameter("username");
String str2 = request.getParameter("userpwd");
str1 = getS(str1.trim());
str2 = getS(str2.trim());
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con1 = DriverManager.getConnection("jdbc:odbc:test");
Statement stmt1 = con1.createStatement();
stmt1
.executeUpdate("INSERT INTO user(username,userpwd) VALUES ('"
+ str1 + "','" + str2 + "')");
out.println("新用户已经成功添加");
con1.close();
} catch (Exception e) {
}
%>