通过servlet执行数据库操作代码如下:package com.ssit.DB;import java.sql.Connection;import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import javax.naming.Context;//这是命名服务执行查询的入口
import javax.naming.InitialContext;
import javax.sql.DataSource;/**
 * 
 * 外层包:com.ssit
 * @author 
 */
public class DB_Handle { private Connection con = null; private ResultSet rs = null; private Statement stmt = null; public DB_Handle() { } public Connection connectionDatabase() {  try {
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
      String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=MyFirst_system";
      String user="sa";
      String password="sa";
      Connection con= DriverManager.getConnection(url,user,password); 
   return con;
  } catch (Exception e) {
   try {
    if (con != null)
     con.close();
    System.out.println("连接失败:" + e.getMessage());
    return null;
   } catch (Exception e1) {
    System.out.println("释放资源失败:" + e1.getMessage());
    return null;
   }
  }
 } public void freeConnection() {
  try {
   if (rs != null)
    rs.close();
   if (stmt != null)
    stmt.close();
   if (con != null)
    con.close();
  } catch (Exception e) {
   System.out.println(e.getMessage());
  }
 } public ResultSet execQuerySQL(String SQLString) {
  try {
   if (con != null) {
    stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
    rs = stmt.executeQuery(SQLString);
   } else {
    return null;
   }
  } catch (SQLException e) {
   System.out.println(e.getMessage());
   return null;
  }
  return rs;
 } public boolean execUpdateSQL(String SQLString) {
  try {
   stmt = con.createStatement();
   stmt.executeUpdate(SQLString);
  } catch (SQLException e) {
   System.out.println(e.getMessage());
   return false;
  }
  return true;
 }}
jsp页面调用这个java类代码如下:<?xml version="1.0" encoding="GBK" ?>
<%@ page language="java" contentType="text/html; charset=GBK"
    pageEncoding="GBK"%>
<%@ page import="com.ssit.DB.*,java.sql.*" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head><title>Insert title here</title>
</head>
<body>
<%
    
      
    DB_Handle dbHandle1 = new DB_Handle(); 
    Connection con = dbHandle1.connectionDatabase(); 
    out.print(con);
    
    ResultSet rs1 = null;
    
    String sql = "select * from U_UserInfo";
   
    rs1 = dbHandle1.execQuerySQL(sql);
    
    
 %>
 <table width="70%" height="68" border="1" cellpadding="0" cellspacing="0" bordercolor="#FFFFFF" bordercolorlight="#0066FF">
    <tr>
      <td width="7%" align="center" bgcolor="#CCCCCC">用户id</td>
      <td width="36%" align="center" bgcolor="#CCCCCC">登陆名</td>
      <td width="31%" align="center" bgcolor="#CCCCCC">用户名</td>
      <td width="26%" align="center" bgcolor="#CCCCCC">密码</td>
    </tr>
<%
         while(rs1.next()){
 %>    
    <tr>
      <td><%=rs1.getString("U_UserId")%></td>
      <td><%=rs1.getString("U_LoginName")%></td>
      <td><%=rs1.getString("U_UserName")%></td>
      <td><%= rs1.getString("U_PassWord")%></td>
    </tr>
 <%
  }
    if(rs1!=null){rs1.close();}
    dbHandle1.freeConnection();
 %>
 
  </table>
</body>
</html>谢谢大虾们帮忙指点!!!!!

解决方案 »

  1.   

    public Connection connectionDatabase() {   try { 
        Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); 
          String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=MyFirst_system"; 
          String user="sa"; 
          String password="sa"; 
          Connection con= DriverManager.getConnection(url,user,password); 
      return con; 
      } catch (Exception e) { 
      try { 
        if (con != null) 
        con.close(); 
        System.out.println("连接失败:" + e.getMessage()); 
        return null; 
      } catch (Exception e1) { 
        System.out.println("释放资源失败:" + e1.getMessage()); 
        return null; 
      } 
      } 

    Connection con= DriverManager.getConnection(url,user,password); 
    改成 
    con= DriverManager.getConnection(url,user,password); 
      

  2.   

    Connection con= DriverManager.getConnection(url,user,password); 
    应该是这句错了,这样又定义了一个局部的con没有给类的con赋值在执行时引用就空指针了。还有你的数据库处理类封装的好像有问题,获取连接的方法应该改为私有的,然后在执行sql语句的方法里(execQuerySQL(sql))调用这个私有方法。你现在页面上的这句没有什么用啊Connection con = dbHandle1.connectionDatabase(); 
      

  3.   

    Connection con= DriverManager.getConnection(url,user,password); 
    改为 this.con = DriverManager.getConnection(url,user,password); 
      

  4.   

    会用Myclipse里的断点跟踪吗?用断点跟踪一下就知道啦。
    public Connection connectionDatabase() {   try { 
        Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); 
          String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=MyFirst_system"; 
          String user="sa"; 
          String password="sa"; 
          Connection con= DriverManager.getConnection(url,user,password); 
      return con; 
      } catch (Exception e) { 
      try { 
        if (con != null) 
        con.close(); 
        System.out.println("连接失败:" + e.getMessage()); 
        return null; 
      } catch (Exception e1) { 
        System.out.println("释放资源失败:" + e1.getMessage()); 
        return null; 
      } 
      } 

    这段代码写有不怎么合理,不应该在这里就进行异常的抛出,把异常向上抛出就可以啦。
      

  5.   

    就是这里错了,我的理解是全局变量和局部变量的区别,private Connection con = null; 是全局的私有变量,而Connection con = dbHandle1.connectionDatabase(); 中的con是在try中的局部变量,这里的全局变量优先级比try中的优先级,所以con是空的,所以rs1就肯定为空了.
      

  6.   

    在try{}里面定义的变量的作用范围在try中,在外面就不行了!!谢谢大家的帮助!!!
      

  7.   

    在try{}里面定义的变量的作用范围在try中,在外面就不行了!!谢谢大家的帮助!!!