import java.sql.*; //导入数据库操作的类
import   javax.servlet.*; 
import   javax.servlet.http.*; 
import   java.io.*; 
import   java.util.*;
import javax.servlet.http.HttpSession;public class DBConnAccess { //构造方法,初始化
private Connection conn; //连接对象
    private Statement stmt; //语句对象
    private ResultSet rs; //结果集对象
    private String accessdriver; //保存Access驱动程序字符串
    private String accessURL; //保存Access连接字符串
    public DBConnAccess(){
        //Access驱动程序
        accessdriver = "sun.jdbc.odbc.JdbcOdbcDriver";
        //连接字符串
        accessURL = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=";
        conn = null;
    }
    public Connection getConnToAccess(String dbpath){
        try{
         HttpSession session = request.getSession();         Object sPath = session.getAttribute("dbpath");
         accessURL = accessURL + dbpath;
            Class.forName(accessdriver);
            conn = DriverManager.getConnection(accessURL);
        }catch(Exception e){
            System.out.println("Error");
            System.err.println(e.getMessage());
        }
        return conn;
    }
}
在么导入servlet.api.jar包之前 HttpSession session = request.getSession();都错
导入之后request.getSession报错 
高手能告诉我原因吗?

解决方案 »

  1.   

    package com.groundhog.codingmouse;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    /**
    * 数据库管理类
    * @author CodingMouse
    * 2009.2.20
    */
    public final class DBManager {
    /**
    * 数据库连接对象
    */
    private Connection dbConnection = null;
    /**
    * 数据库命令执行对象
    */
    private PreparedStatement preStatement = null;
    /**
    * 结果集对象
    */
    private ResultSet rsSet = null;
    /**
    * 数据库驱动版本号
    */
    private static String driverVersion = null;
    /**
    * 数据库服务器登录用户名和密码字符串常量(默认值均
    为'sa')
    */
    private static String databaseUser = "sa";
    private static String databasePassword = "sa";
    /**
    * 数据库驱动完整类名字符串常量
    */
    private static final String
    DRIVER_CLASS_SQLSERVER2000 =
    "com.microsoft.jdbc.sqlserver.SQLServerDriver";  // SQL
    Server 2000 直连
    private static final String
    DRIVER_CLASS_SQLSERVER2005 =
    "com.microsoft.sqlserver.jdbc.SQLServerDriver";  // SQL
    Server 2005 直连
    private static final String
    DRIVER_CLASS_BRIDGECONNECT = "sun.jdbc.odbc.JdbcOdbcDriver";
    // ODBC 桥连
    /**
    * 数据库连接字符串常量
    */
    private static final String
    DATABASE_URL_SQLSERVER2000 =
    "jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=stuD
    B";  // SQL Server 2000 直连
    private static final String
    DATABASE_URL_SQLSERVER2005 =
    "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=stuDB";
    // SQL Server 2005 直连
    private static final String
    DATABASE_URL_BRIDGECONNECT = "jdbc:odbc:stuDBSource";
    // ODBC 桥连
    /**
    * 定义类自身的实例静态变量(作用于单例[件]模式的应用)
    */
    private static DBManager connectionManager = null;
    /**
    * 私有化默认构造(作用于单例[件]模式的应用,防止类被直
    接使用new关键字实例化)
    */
    private DBManager() {
    super();
    }
    /**
    * 获取数据库连接管理类实例的方法(单例[件]模式的应用)
    * @param version 数据库驱动版本号,取值:(version =
    2000 | version = 2005 | version = odbc)
    * @param user 数据库服务器登录用户名
    * @param password 数据库服务器登录密码
    * @return 数据库连接管理对象
    * @throws Exception 参数错误异常
    */
    public static DBManager getInstance(
    String version,
    String user,
    String password)
    throws Exception {
    if (!(version == "2000" || version == "2005"
    || version == "odbc")) {
    throw new Exception("数据库驱动版本号
    不正确,取值只能是“2000/2005/odbc”!");
    }
    // 保存数据库驱动版本号
    driverVersion = version;
    if (user == null || user.equals("")) {
    throw new Exception("数据库服务器登录
    用户名不能为空!");
    }
    // 保存数据库服务器登录用户名和密码
    databaseUser = user;
    databasePassword = password;
    // 应用单例[件]模式确保类本身只有一个实例
    if (connectionManager == null) {
    connectionManager = new DBManager();
    }
    // 返回类本身的实例
    return connectionManager;
    }
    /**
    * 获取数据库连接的方法
    * @return 数据库连接对象
    */
    private Connection getConnection() {
    try {
    Class.forName(
    driverVersion ==
    "2000"
    ?
    DRIVER_CLASS_SQLSERVER2000
    : (driverVersion ==
    "2005"
    ?
    DRIVER_CLASS_SQLSERVER2005
    :
    DRIVER_CLASS_BRIDGECONNECT));
    this.dbConnection =
    DriverManager.getConnection(
    driverVersion ==
    "2000"
    ?
    DATABASE_URL_SQLSERVER2000
    : (driverVersion ==
    "2005"
    ?
    DATABASE_URL_SQLSERVER2005
    :
    DATABASE_URL_BRIDGECONNECT),
    databaseUser,
    databasePassword);
    } catch (ClassNotFoundException ex) {
    System.err.println("未找到SQL Server
    " + driverVersion + "数据库驱动类:" + ex.getMessage());
    // 在控制台输出异常堆栈信息
    // ex.printStackTrace();
    } catch (Exception ex) {
    System.err.println("获取数据库连接错
    误:" + ex.getMessage());
    // 在控制台输出异常堆栈信息
    // ex.printStackTrace();
    }
    // 返回数据库连接对象
    return this.dbConnection;
    }
    /**
    * 获取数据库命令执行对象的方法
    * @param sql 要执行的SQL命令拼装语句字符串
    * @return 数据库命令执行对象
    */
    private PreparedStatement getPreparedStatement
    (String sql) {
    try {
    // 根据获取的数据库连接对象创建数据库
    命令执行对象
    this.preStatement = getConnection
    ().prepareStatement(sql);
    } catch (Exception ex) {
    System.err.println("获取数据库命令执
    行对象错误:" + ex.getMessage());
    // 在控制台输出异常堆栈信息
    // ex.printStackTrace();
    }
    // 返回数据库命令执行对象
    return this.preStatement;
    }
    /**
    * 执行更新语句(Insert|Update|Delete)
    * @param sql 要执行的SQL命令拼装语句字符串
    * @return 受影响的行数
    */
    public int executeUpdate(String sql){
    try {
    // 置空结果集对象的原有内容
    this.rsSet = null;
    // 执行语句并返回受影响行数
    return this.getPreparedStatement
    (sql).executeUpdate();
    } catch (SQLException e) {
    System.err.println("更新数据错误:" +
    e.getMessage());
    return 0;
    }finally{
    // 关闭数据库连接资源
    closeDBResource();
    }
    }
    /**
    * 执行查询语句(Select)
    * @param sql 要执行的SQL命令拼装语句字符串
    * @return 查询后的结果集对象
    */
    public ResultSet executeQuery(String sql){
    try {
    // 置空结果集对象的原有内容
    this.rsSet = null;
    // 执行sql语句获得结果集
    this.rsSet =
    this.getPreparedStatement(sql).executeQuery();
    } catch (SQLException e) {
    System.err.println("查询数据错误:" +
    e.getMessage());
    }
    // 返回结果集对象
    return this.rsSet;
    }
    /**
    * 获取执行指定sql语句后的返回结果集的记录条数
    * @param sql 要执行的SQL命令拼装语句字符串
    * @return 查询结果得到的记录条数
    */
    public int getResultSetCount(String sql) {
    // 保存得到指定的sql语句执行后返回记录行数的计数器变量
    int count = 0;
    try {
    // 置空结果集对象的原有内容
    this.rsSet = null;
    // 执行sql语句获得结果集
    this.rsSet = this.getPreparedStatement
    (sql).executeQuery();
    // 遍历结果集并累加计数器
    while (this.rsSet.next()) {
    count++;
    }
    } catch (SQLException e) {
    e.printStackTrace();
    }
    return count;
    }
    /**
    * 关闭数据库连接资源(包括结果集对象、命令执行对象、连
    接对象)
    */
    public void closeDBResource() {
    try {
    closeResultSet();
    closePreparedStatement();
    closeConnection();
    } catch (SQLException sqlEx) {
    System.err.println(sqlEx.getMessage
    ());
    // 在控制台输出异常堆栈信息
    // sqlEx.printStackTrace();
    }
    }
    /**
    * 关闭结果集对象的方法
    * @throws SQLException
    */
    private void closeResultSet() throws SQLException {
    try {
    if (this.rsSet != null) {
    this.rsSet.close();
    this.rsSet = null;
    }
    } catch (SQLException sqlEx) {
    throw new SQLException("关闭结果集对
    象错误:" + sqlEx.getMessage());
    // 在控制台输出异常堆栈信息
    // sqlEx.printStackTrace();
    }
    }
    /**
    * 关闭数据库命令执行对象的方法
    * @throws SQLException
    */
    private void closePreparedStatement() throws
    SQLException {
    try {
    if (this.preStatement != null) {
    this.preStatement.close();
    this.preStatement = null;
    }
    } catch (SQLException sqlEx) {
    throw new SQLException("关闭数据库命
    令执行对象错误:" + sqlEx.getMessage());
    // 在控制台输出异常堆栈信息
    // sqlEx.printStackTrace();
    }
    }
    /**
    * 关闭数据库连接的方法
    * @throws SQLException
    */
    private void closeConnection() throws SQLException {
    try {
    if (this.dbConnection != null && (!
    this.dbConnection.isClosed())) {
    this.dbConnection.close();
    }
    } catch (SQLException sqlEx) {
    throw new SQLException("关闭数据库连
    接错误:" + sqlEx.getMessage());
    // 在控制台输出异常堆栈信息
    // sqlEx.printStackTrace();
    }
    }
    }文章出处:飞诺网(www.diybl.com):http://www.diybl.com/course/4_webprogram/jsp/jsp_js/20090222/156148.html
    你参考一下
      

  2.   

    谢谢你的回帖
    你给的例子是如何连接数据库 而我想知道的其实是java中如何取得session的问题
    想解决HttpSession session = request.getSession();这句话为什么错了
    请指教
      

  3.   

    很简单啊,仔细看代码.
    没导入jar之前,在你的开发环境下没有HttpSession这个类,肯定会爆错了,
    加入jar之后request,getSession()报错也很容易明白,你没发现你的代码中不存在request参数吗?
    在servlet当中,request参数是在post,get方法中作为方法传输引入的,在你的代码中,明显不存在这个东西。
      

  4.   

    只是普通的java类怎么可能获取到HttpSession呢  
      

  5.   

    你是想问如何取得session是吗?但是你给的代码是数据库连接的代码。
    我觉得你这地方应该好好在看看,session应该从servlet中获得import   java.io.*;
    import   javax.servlet.*;
    import   javax.servlet.http.*;
    public   class   TestServlet   extends   HttpServlet
      {
        public   void   doPost(HttpServletRequest   req,HttpServletResponse   res)   throws   ServletException,IOException
          {
       //获得session
          HttpSession session = request.getSession();
    //获得session中保留的信息
         String userId= session.getAttribute("userId").toString();//取出为Object类型
    //给session中存储数据
         session.setAttribute("name","JACK")
          }
      } 
      

  6.   

    我给你找找 纯 JSP代码去在学校的时候也是那样写代码的  嘿嘿!
      

  7.   

    yanghuiyu123:extends HttpServlet加上之后好像也不对哎
      

  8.   

    lkclkc88:请问 如何改正呢?
      

  9.   

    a13489905321:jsp中使用 我会了 putvalue什么的
    我现在只是想在javabean中去实现
      

  10.   

    HttpSession是和浏览器对应的,一个浏览器一个session,必须是通过浏览器访问才有session,否则无效
      

  11.   

    extends HttpServlet之后重写public void doGet(HttpServletRequest request, HttpServletResponse response)方法.
      

  12.   

    没有看到你的request从那里来的呢
    一个对象不能凭空产生的
      

  13.   


    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {     HttpSession session = request.getSession();
         Object sPath = session.getAttribute("dbpath");
        }新加了个doGet方法 编译正确了 但是如何执行呢?
    我在执行别的method的时候去debug一下 session.getAttribute("dbpath")还是不正确的
    java新手 望指教
      

  14.   

    HttpServletRequest request, HttpServletResponse response
    这是http用到的,搞明白这俩个参数。
    然后才是HttpSession
      

  15.   

    HttpSession session = request.getSession();
    当中request因为一直是null 所以一直报错 
    怎么才能让request不是null呢?
    能不能给个具体的例子?
      

  16.   

    session是保存在服务器上的一定要先运行服务器端
    然后写个servlet或者JSP,在这个页面设置session值,然后不要关闭浏览器,在另外一个页面或者servlet中读取 
      

  17.   

    都没有跟前台交互 哪来的request  新手啊  把request和session的意思搞明白了再来用  别指望提个问题就给你全弄明白了。
      

  18.   

    添加一个DOget的方法看看行吗??
      

  19.   

    从你的代码中跟么没有找到哪里有定义过request这个对象所报错,第二你用了servlet那么你就得用浏览器去访问这个servlert这样得到的request就不会是空的了  好好去看一些servlet吧
      

  20.   

    还有jdbc类应该只 打开和关闭数据库连接 别的业务应该分开到别的bean中去  servlet更是应该单独开来  现在大多数人都应用mvc模式开发