读书人

真心被JDBC搞死了 MySQL搞了一个星期还

发布时间: 2013-09-11 17:59:59 作者: rapoo

真心被JDBC搞死了 MySQL弄了一个星期还是连接报错
win7 + jdk 1.7 + mySQL 5.5 + Tomcat 6

Mysql 安装没问题,命令行进去 show datebases 新建表 加数据乱七八糟都没问题
Tomcat没问题,叮叮当当调了好多servlet 正常
然后 调了这个噩梦般的程序:

Java code
package org.sunxin.lesson.jsp.bookstore;import javax.servlet.*;import java.io.*;import javax.servlet.http.*;import java.sql.*;public class CreateDBServlet extends HttpServlet{    private String url;    private String user;    private String password;        public String errortext;            public void init() throws ServletException    {        String driverClass=getInitParameter("driverClass");        url=getInitParameter("url");        user=getInitParameter("user");        password=getInitParameter("password");        try        {            Class.forName(driverClass);        }        catch(ClassNotFoundException ce)        {            errortext="加载数据库驱动失败!";        }        }        public void doGet(HttpServletRequest req, HttpServletResponse resp)               throws ServletException,IOException    {        Connection conn=null;        Statement stmt=null;        try        {            conn=DriverManager.getConnection(url,user,password);            stmt=conn.createStatement();            stmt.executeUpdate("create database bookstore");            stmt.executeUpdate("use bookstore");            stmt.executeUpdate("create table bookinfo(id INT not null primary key,title VARCHAR(50) not null,author VARCHAR(50) not null,bookconcern VARCHAR(100) not null,publish_date DATE not null,price FLOAT(4,2) not null,amount SMALLINT,remark VARCHAR(200)) ENGINE=InnoDB");            stmt.addBatch("insert into bookinfo values(1,'Java从入门到精通','张三','张三出版社','2004-6-1',34.00,35,null)");            stmt.addBatch("insert into bookinfo values(2,'JSP深入编程','李四','李四出版社','2004-10-1',56.00,20,null)");            stmt.addBatch("insert into bookinfo values(3,'J2EE高级编程','王五','王五出版社','2005-3-1',78.00,10,null)");            stmt.executeBatch();                        PrintWriter out=resp.getWriter();            out.println(errortext);            out.println("success!");            out.close();        }        catch(SQLException se)        {            se.printStackTrace();        }        finally        {            if(stmt!=null)            {                try                {                    stmt.close();                }                catch(SQLException se)                {                    se.printStackTrace();                }                stmt=null;            }            if(conn!=null)            {                try                {                    conn.close();                }                catch(SQLException se)                {                    se.printStackTrace();                }                conn=null;            }        }    }}


Tomcat6的 web.xml 里配置如下:
Java code
  <context-param>        <param-name>driverClass</param-name>        <param-value>com.mysql.jdbc.Driver</param-value>    </context-param>    <context-param>        <param-name>url</param-name>        <param-value>jdbc:mysql://localhost:3306/mysql</param-value>    </context-param>    <context-param>        <param-name>user</param-name>        <param-value>root</param-value>    </context-param>    <context-param>        <param-name>password</param-name>        <param-value>root</param-value>    </context-param>    <servlet>        <servlet-name>CreateDBServlet</servlet-name>        <servlet-class>org.sunxin.lesson.jsp.bookstore.CreateDBServlet</servlet-class>    </servlet>   



启动tomcat 访问这个servlet 报错:
XML code
HTTP Status 500 -------------------------------------------- type Exception reportmessage description The server encountered an internal error () that prevented it from fulfilling this request.exception javax.servlet.ServletException: Servlet.init() for servlet CreateDBServlet threw exception    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)    java.lang.Thread.run(Unknown Source)root cause java.lang.NullPointerException    java.lang.Class.forName0(Native Method)    java.lang.Class.forName(Unknown Source)    org.sunxin.lesson.jsp.bookstore.CreateDBServlet.init(CreateDBServlet.java:23)    javax.servlet.GenericServlet.init(GenericServlet.java:212)    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)    org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:291)    org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)    org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)    org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)    java.lang.Thread.run(Unknown Source)note The full stack trace of the root cause is available in the Apache Tomcat/6.0.33 logs.


真心调的筋疲力竭了,已经下了 mysql-connector-java-5.1.18-bin.jar 放到了D:\Tomcat\lib



[解决办法]
好吧 ,给你分析一下
1. 空指针一定是你的getInitParameter("driverClass")没有取到值。。。因为你用字符串替代后,没有报错空指针。。。
2. stmt.executeUpdate("create database bookstore");
stmt.executeUpdate("use bookstore");
这两句就是你页面空白的原因。
看看你的连接语句:url="jdbc:mysql://localhost:3306/mysql";这里的mysql指的数据库名吧。。。你连接了mysql数据库,进去操作的却是bookstore,本身这么做 就是有问题的。。。这样写代码怎么行?并在mysql命令行打命令才这么去用,你却把它用到了java连接sql的时候,不规范。。。还有你为什么不能直接连接bookstore数据库?
日志中写的很清楚了。你的bookstore数据库已经存在了。你还要用这条命令create database bookstore去再次创建数据库!!!!就出错啦。。。

修改:
去掉stmt.executeUpdate("create database bookstore");
stmt.executeUpdate("use bookstore");
两行代码。。
然后连接url="jdbc:mysql://localhost:3306/bookstore";

[解决办法]
楼主,你这些语句获得的值都是空的,不信你自己打出来看一下
Java code
String driverClass=getInitParameter("driverClass");        url=getInitParameter("url");        user=getInitParameter("user");        password=getInitParameter("password");
我的异常网推荐解决方案:The server encountered an internal error () that prevented it from fulfilling this request.,http://www.myexception.cn/java-web/317.html

读书人网 >Java Web开发

热点推荐