通过Web访问数据库——Java Servlet开发 对于数据库编程，大部分读者的困惑在于自己的计算机上没有数据库或自己对数据库不熟悉。不要紧，本文介绍的例子使用的是用文本文件来进行数据库开发。即使不会数据库编程，按照本文讲述的步骤就可实现整个系统，并可在此基础上作些小的修改，以满足你的需求。 只要有安装了Windows 95/98的PC机，配置IP地址，并安装开发软件：JDK1.2和JSWDK1.0.1，即可用Java Servlet来实现通过Web查询数据库。本文系统实现后，可以直接在Internet上作简单应用，也可将程序不变地移植到实际数据库和Web系统中。

一、配置数据库

数据库软件很多，其实不光SQL、Sybase、Oracle之类的大型数据库，用我们常用的Excel，Foxpro等建立的数据库都可以实现Web查询。本文通过最普通的文本文件来作为数据库实现Web查询，如果你想使用其它数据库，本文中的程序不需要作改动便可以直接使用。所不同的只是数据库配置界面有所不同而已。
1．创建目录和文件
首先在"我的电脑"窗口中单击鼠标右键，在快捷菜单中选"新建/文件夹"命令，创建你自己的目录如D:\app\db，进入该目录执行用同样的方法新建文件文档，文件名设为my。这样，我们就创建了一个空的文件：my.txt，以后数据库中的数据就放在该文件中。
2．添加ODBC数据源

选择"控制面板/ODBC数据源"，出现"ODBC数据源管理器"窗口。(如果在你的机器中"控制面板"下找不到"ODBC数据源"，可到http://developer.java.sun.com/developer/onlineTraining/Database/JDBCShortCourse/jdbc/exercises/Setup/msodbc/DATAACC.EXE下载数据库驱动程序即可。)
在"用户DSN"选项卡中点击"添加"按钮，在"创建新数据源"对话框中选择驱动程序来安装数据源，如用文本方式。

点击"完成"按钮，在出现的对话框中给数据源名任意起一个名称如myd。

点击"使用当前目录"复选框，以去掉其前面的小勾，则"选定目录"按钮可以使用，点击该按钮，弹出"选定目录"对话框。

在左边列表框中选择my.txt文件，按"确定"按钮返回，点击"选项"，则窗口如下：

点击"定义格式"，选中my.txt，可以定义该数据表中的数据格式。如可在"数据类型"中选择类型Char，任意起一个名字如name，定义宽度如6，点击"添加"。继续定义其他类型，如Interger类型名称为age等。这样便定义了数据结构。

二、通过Web添加数据

Servlet程序内容如下：

import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class mys extends HttpServlet
{
public void service(HttpServletRequest rq, HttpServletResponse rp)
throws ServletException,IOException
{
rp.setContentType("text/html");
ServletOutputStream out=rp.getOutputStream();
String nm=rq.getParameter("xx");
String ag=rq.getParameter("yy");
try{
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
// myd 是配置数据库时给数据源起的名称
Connection con =DriverManager-.getConnection("jdbc:odbc:myd","","");
Statement.stmt=con.createStatement ();
// 注意单引号和双引号： ' " +nm+ " '
stmt.executeUpdate( "insert into my values('"+nm+"',"+ag+");");
}
catch (Exception e){
}
out.println("Thank you");
}
}

同《Java Servlet应用Step by Step》所示，编译该程序，拷贝到相应目录中，并运行JSWDK。
编制一个网页，网页内容可以如下：
<form action=http://202.100.127.200:8080/examples/servlet/mys method=get>
输入姓名：<input type=text name=xx> <br>
输入年龄：<input type=text name=yy> <br>
<input type=submit value= "提交">
</form>
其中202.100.127.200是Servlet程序所在计算机的IP地址。用浏览器打开该网页，输入姓名、年龄，点击"提交"按钮，便可以将数据添加到数据库中。（打开my.txt）可以看到数据已经添加到该文本文件中了。
该Java Servlet程序中，Connection con =DriverManager.getConnection("jdbc:odbc:myd","","");
一句中，myd是前面配置数据库时给数据源所起的名称，需要时可用其他名称，后面两个引号中该程序为空，若采用其他数据库系统，这里给出的应该是数据库中的账号和口令。
在stmt.executeUpdate( "insert into my values ('"+nm+"',"+ag+");");一句用stmt.executeUpdate来执行SQL语句进行数据库操作，这里是插入数据的操作，也可执行其他SQL语句。SQL语句的格式和数据表的数据结构有关。这里以两列为例，第一列是字符串，第二列为整数。注意其中的引号用法。

三、通过Web方式列出所有数据

Servlet程序内容如下：

import java.sql.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class mys extends HttpServlet
{
public void service(HttpServletRequest rq, HttpServletResponse rp)
throws ServletException,IOException
{
rp.setContentType("text/html");
ServletOutputStream out=rp.get-OutputStream();
// 下面一句在本例中无用，在下文通过Web方式查询姓名时需要
String nm=rq.getParameter("xx");
try{
DriverManager.registerDriver(new sun.jdbc.odbc.JdbcOdbcDriver());
//change myd to your own
Connection con=DriverManager.get-Connection("jdbc:odbc:myd","","");
Statement stmt=con.createStatement ();
// change my to your own
ResultSet rset = stmt.executeQuery ("select * from my.txt");
while (rset.next ()){
out.println (rset.getString (1));
out.println (rset.getString (2));
}
}
catch (Exception e){
}
out.println("Thank you");
}
}

该程序用stmt.executeQuery ("select * from my.txt");执行查询操作，查询结果通过一个while循环依次打印出来。其中rset.getString (1)是数据表中第一列的值，rset.getString (2)是数据表中第二列的值。
网页内容可以如下：
<form action=http://202.100.127.200:8080/examples/servlet/mys method=get>
<input type=submit value= "点击查询">
</form>

四、通过Web方式查询姓名

只要将上例中
ResultSet rset = stmt.executeQuery ("select * from my.txt");
改为
ResultSet rset = stmt.executeQuery ("select * from my.txt where name='"+nm+"'");
即可按用户在浏览器中输入的姓名进行查询。
网页内容可以如下：
<form action=http://202.100.127.200:8080/examples/servlet/mys method=get>
输入姓名：<input type=text name=xx> <br>
<input type=submit value= "查询">
</form>
(徐迎晓)