jsp项目开发案例全程实录第八章在线考试系统
发表在JavaWeb图书答疑 2012-04-24
是否精华
版块置顶:
老师:
    您好,当我运行此系统的时候,系统提示数据库连接失败。
    我用的是sql2000,是完全按照视频中操作进行的,出现的错误提示如下:
获取的查询字符串:login
java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at com.wgh.core.ConnDB.getConnection(ConnDB.java:34)
at com.wgh.core.ConnDB.executeQuery(ConnDB.java:56)
at com.wgh.dao.ManagerDAO.checkManager(ManagerDAO.java:15)
at com.wgh.action.Manager.managerLogin(Manager.java:44)
at com.wgh.action.Manager.execute(Manager.java:22)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
at java.lang.Thread.run(Thread.java:619)
警告: DbConnectionManager.getConnection() 获得数据库链接失败.

链接类型:com.microsoft.sqlserver.jdbc.SQLServerDriver
链接位置:jdbc:sqlserver://10.4.10.128:1433;DatabaseName=db_TK
用户/密码sa/

我想问一下这是什么原因,我该如何改正呢?
期待您的回答,谢谢。
分享到:
精彩评论 5
无语_mrkj
学分:3155 LV11
2012-04-26
沙发
请问您是否将程序所需的JDBC驱动包以及其他的Jar包放置到项目的lib文件夹中,另外,SQL Server 2000数据库的登录用户名是否为sa,并且密码为空,也就是没有密码?
muo
学分:0 LV1
TA的每日心情
开心
2021-03-02 22:24:42
2012-04-26
板凳
这些我都知道,不过我把连接数据库的那个connDB类改了后,数据库连接就成功了。

但是改了后还会有以下问题:就是我登陆的时候登陆不成功,而且注册的时候也会出现问题:
获取的查询字符串:studentAdd
返回值ret:miss
这是什么原因呢?

当我默认登陆成功(管理员),对系统进行管理的时候,只有课程管理可正常进行,其他的都会有类似于这样的错误:
获取的查询字符串:managerAdd
添加管理员信息的SQL:INSERT INTO tb_manager (name,PWD) values('sss','sss')
返回值ret:0

我想问着是拿错了呢。我改完后的connDB类的代码如下:
public class ConnDB {
    public Connection conn = null; // 声明Connection对象的实例
    public Statement stmt = null; // 声明Statement对象的实例
    public ResultSet rs = null; // 声明ResultSet对象的实例
    private static String dbClassName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";//定义保存数据库驱动的变量
    private static String dbUrl = "jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=db_TK";
    private static String dbUser = "sa";
    private static String dbPwd = "";
    public ConnDB() {   //定义构造方法
        try {
            Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
        } catch (Exception ex) {
            System.out.println("数据库加载失败");
        }
    }

    public static Connection getConnection() {
        Connection conn = null;
        try {
            conn = DriverManager.getConnection(dbUrl, dbUser, dbPwd);
        } catch (SQLException e) {
            System.out.println(e.getMessage());
            System.out.println("creatConnectionError!");
        }
        if (conn == null) {
            System.err
                    .println("警告: DbConnectionManager.getConnection() 获得数据库链接失败.\r\n\r\n链接类型:"
                            + dbClassName
                            + "\r\n链接位置:"
                            + dbUrl
                            + "\r\n用户/密码"
                            + dbUser + "/" + dbPwd);
        }
        return conn;
    }

    /*
     * 功能:执行查询语句
     */
    public ResultSet executeQuery(String sql) {
        try { // 捕捉异常
            conn = getConnection(); // 调用getConnection()方法构造Connection对象的一个实例conn
            stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_READ_ONLY);
            rs = stmt.executeQuery(sql);
        } catch (SQLException ex) {
            System.err.println(ex.getMessage()); // 输出异常信息
        }
        return rs; // 返回结果集对象
    }

    /*
     * 功能:执行更新操作
     */
    public int executeUpdate(String sql) {
        int result = 0; // 定义保存返回值的变量
        try { // 捕捉异常
            conn = getConnection(); // 调用getConnection()方法构造Connection对象的一个实例conn
            stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_READ_ONLY);
            result = stmt.executeUpdate(sql); // 执行更新操作
        } catch (SQLException ex) {
            result = 0; // 将保存返回值的变量赋值为0
        }
        return result; // 返回保存返回值的变量
    }

    /*
     * 功能:关闭数据库的连接
     */
    public void close() {
        try { // 捕捉异常
            if (rs != null) { // 当ResultSet对象的实例rs不为空时
                rs.close(); // 关闭ResultSet对象
            }
            if (stmt != null) { // 当Statement对象的实例stmt不为空时
                stmt.close(); // 关闭Statement对象
            }
            if (conn != null) { // 当Connection对象的实例conn不为空时
                conn.close(); // 关闭Connection对象
            }
        } catch (Exception e) {
            e.printStackTrace(System.err); // 输出异常信息
        }
    }

}
其实,也没怎么改,只是把conn.properties这个东西去了而已!
无语_mrkj
学分:3155 LV11
2012-04-26
地板
请问您是否修改了数据表的表结构,还有您的数据库是用附加数据的方法添加上去的吗?
根据您的描述,可能是数据库中的ID字段需要采用自动编号,而您的数据表只这个字段不是自动编号,而产生的数据插入失败。
muo
学分:0 LV1
TA的每日心情
开心
2021-03-02 22:24:42
2012-04-27
4L
数据表中,我有三个表的ID不是自动编号的,一个是学生表,一个是成绩表,在一个就是套题表,这个应该没所谓吧。

昨天晚上熬夜的时候改了几个地方,改动如下:
public int checkManager(ManagerForm managerForm) {
        int flag = 1;
        String sql = "SELECT * FROM tb_manager where name='" +
                     managerForm.getName() + "'";
        ResultSet rs = conn.executeQuery(sql);
        try {
            if (rs.next()) {
                String pwd = managerForm.getPwd();
                if (pwd.equals(rs.getString(3))) {
                    rs.last();
                    int rowSum = rs.getRow(); //获取记录总数
                    rs.first();
                    if (rowSum!=1) {
                        flag = 2;
                        System.out.print("获取row的值:" + sql + rowSum);
                    }
                } else {
                    flag = 2;
                }
            }else{
                flag = 2;
            }
        } catch (SQLException ex) {
            flag = 2;
            System.out.println(ex.getMessage());
        }
        return flag;

我把上面的flag除了catch语句中的值,全部改成了1后,就ok了,我想问一下我这样改会不会有什么意想不到的问题发生。

还有就是当我以管理员用户登陆可成功后,添加管理员用户可以,但修改管理员用户密码就不行,总是提示输入的旧密码不正确,我直接从数据库中copy的,这是什么原因引起的呢?

还有就是学生登陆怎么也不行,会不会是这个语句引起的错误:
<html:form action="manage/student.do?action=login" method="post" focus="ID" onsubmit="return check(studentForm)">
如果是,我该如何改正呢?
无语_mrkj
学分:3155 LV11
2012-05-04
5L
由于您自己修改了代码,所以我们很难确定具体是哪里出现了问题,建议您还是运行光盘中提供的源程序。
如果数据库的设置是按我们光盘使用说明书中的要求设置的,那么这个程序是可以正常运行的。
首页上一页 1 下一页尾页 5 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照