日期:2014-05-20  浏览次数:20878 次

帮忙看下这段servlet是什么意思啊?
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class GetDBInfoServlet extends HttpServlet {
private String url;
private String user;
private String password;

public void init()throws ServletException{
ServletContext sc=getServletContext();
String driverClass=sc.getInitParameter("driverClass");
url=sc.getInitParameter("url");
user=sc.getInitParameter("user");
password=sc.getInitParameter("password");

try {
Class.forName(driverClass);
} catch (ClassNotFoundException e) {
// TODO 自动生成 catch 块
throw new ServletException("数据库加载失败!");
}
}

public void doGet(HttpServletRequest req,HttpServletResponse resp)throws ServletException,IOException{
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
try {
conn=DriverManager.getConnection(url,user,password);
resp.setContentType("text/html;charset=gb2312");
PrintWriter out=resp.getWriter();
out.println("<html><head>");
out.println("<title>数据库表的信息</title>");
out.println("</head><body>");
String tableName=req.getParameter("tableName");//这句第一次运行应该是返回null,应该执行if里的语句 stmt=conn.createStatement();
stmt.executeUpdate("use bookstore");
if(tableName==null||tableName.equals("")){
DatabaseMetaData dbMeta=conn.getMetaData();
rs=dbMeta.getTables(null, null, null, new String[]{"TABLE"});
out.println("<form action=\"getdbinfo\" method=\"get\">");
out.println("<select size=1 name=tableName");//size=1是什么意思?
while(rs.next()){
out.println("<option value="+rs.getString("TABLE_NAME"));
out.println(rs.getString("TABLE_NAME"));//这句是什么意思?不明白
out.println("</option>");
}
out.println("</select><p>");
out.println("<input type=\"submit\" value=\"提交\">");
out.println("</form>");

out.println("</body></html>");
out.close();
}
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}finally{
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
rs=null;

}
if(stmt!=null){
try {
stmt.close();
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
stmt=null;
}
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
conn=null;
}
}

  }
}

按道理程序应该从数据库中读出所有表格填入select中,但是我提交后什么反应都没有,而且下拉框是空的,

------解决方案--------------------
Java code


conn=DriverManager.getConnection(url,user,password); 
resp.setContentType("text/html;charset=gb2312"); 
PrintWriter out=resp.getWriter(); 
out.println(" <html> <head>"); 
out.println(" <title>数据库表的信息 </title>"); 
out.println(" </head> <body>"); 
String tableName=req.getParameter("tableName");// 
stmt.executeUpdate("use bookstore");     //我想. 用的应该是MySql数据库吧.. 这里是表示使用名字为bookstore的数据库
if(tableName==null||tableName.equals("")){ 
DatabaseMetaData dbMeta=conn.getMetaData(); // 这是得到了数据源对象..MetaData包含了这个表的基本信息,比如说,表名,列的名字,列的个数..
rs=dbMeta.getTables(null, null, null, new String[]{"TABLE"}); 
out.println(" <form action=\"getdbinfo\" method=\"get\">"); 
out.println(" <select size=1 name=tableName");//  size=1 是说明.. Select 就只有1行.. 这样也说不明白.. 把这个size设成大写的数字,比如5,就明白是什么意思了..
while(rs.next()){ 
out.println(" <option value="+rs.getString("TABLE_NAME")); 
out.println(rs.getString("TABLE_NAME"));//结果集里面有个列,列名是TABLE_NAME,通过这个可以得到改列的值
out.println(" </option>");