JSP程序往往要与数据库打交道。JSP与数据库的连接通常通过JavaBean来实现。要注意的是,以前存取数据库的程序往往在一、两个方法中实现了所有的操作,而JSP对应的JavaBean往往包含很多方法,每个方法完成一个较小的功能,以便在JSP程序中调用。
例:设数据库(类型不限,可以是Oracle, SQL Server等)中有一个用户名、口令和电话号码的对照表psyref:
表psyref:
字段名
|
类型
|
描述
|
name
|
varchar(20)
|
用户名
|
password
|
varchar(20)
|
用户口令
|
phone
|
varchar(8)
|
用户的电话号码
|
设程序使用类型1的driver来存取数据库,并假设数据库对应的ODBC driver的DSN名为myodbc,数据库的用户名和口令均为dbuser,下例采用JSP和JavaBean从表中取得用户名和电话号码显示在网页上。
例13.6: 使用JSP和Bean存取数据库的实例
Bean程序: AddrBook.java
package test;
import java.sql.*;
public class AddrBook {
Connection conn;
Statement stmt;
ResultSet rs ;
public void init(String dburl,String db_user,String db_passwd) {
try {
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn = DriverManager.getConnection(dburl,db_user,db_passwd);
} catch(java.lang.ClassNotFoundException e) {
System.err.println("Load Driver Error: " + e.getMessage());
} catch(SQLException ex) {
System.err.println("Get Connection Error: " + ex.getMessage());
}
}
public ResultSet executeQuery(String sql) {
try {
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
} catch(SQLException ex) {
System.err.println("SQL Error: " + ex.getMessage());
}
return rs;
}
public void close() throws SQLException {
stmt.close();
conn.close();
}
}
编译AddrBook.java以后,在/webpages/目录下创建JSP文件AddrBook.jsp,其内容如下:
JSP程序: AddrBook.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title></title>
</head>
<body>
<center>
<h2>Phone Number List:</h2>
<%@ page language="java" import="java.sql.*" %>
<jsp:useBean id="workM" scope="page" class="test.AddrBook" />
<% workM.init("jdbc:odbc:myodbc","dbuser","dbuser");
%>
<br><br>
<table boder=2>
<tr><th>name</th><th>phone</th></tr>
<%
ResultSet RS = workM.executeQuery("SELECT name,phone FROM psyref");
while (RS.next()) {
out.print("<tr><td>" + RS.getString("name") + "</td>");
out.print("<td>" + RS.getString("phone") + "</td></tr>");
}
RS.close();
%>
</table>
<% workM.close(); %>
</center>
</body>
</html>
在浏览器的地址栏中键入http://localhost:8080/AddrBook.jsp,对应的JSP文件会调用JavaBean,从数据库中读出用户的名字和电话号码并将结果输出在网页上。