【问题标题】:Unable to update mysql database through servlets无法通过 servlet 更新 mysql 数据库
【发布时间】:2013-02-06 11:31:57
【问题描述】:

我编写了一个 servlet 文件 SignUp.java 和一个帮助文件 Updater.java。 SignUp 从用户填写的表单中收集用户信息。然后它将信息发送到 Updater,以便 Updater 使用该信息更新数据库中的表。但是当我填写表格并单击提交时,没有任何变化。奇怪的是,当我编写一个测试文件并用它为更新程序提供一些虚拟值时,表格被这些虚拟值更新了。 -
SignUp.java

package com.onlineshopping.web;

import com.onlineshopping.model.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SignUp extends HttpServlet
{
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException
{
    String[] month = {"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};

    InfoHolder userInfo = new InfoHolder();
    userInfo.name = req.getParameter("name");
    userInfo.email = req.getParameter("email");
    userInfo.date = Integer.parseInt(req.getParameter("date"));
    userInfo.month = Arrays.asList(month).indexOf(req.getParameter("month")) + 1;
    userInfo.year = Integer.parseInt(req.getParameter("year"));
    userInfo.pwd = req.getParameter("pwd");
    userInfo.subscribe = "n";
    try
    {
        userInfo.subscribe = req.getParameter("subscribe");
    }
    catch(Exception e)
    {}

    Updater u = new Updater();
    u.update(userInfo);
}
}

InfoHolder 只保存信息。

Updater.java

package com.onlineshopping.model;

import java.io.*;
import java.sql.*;
import java.util.*;
public class Updater
{
private static final String DRIVER = "com.mysql.jdbc.Driver";

private static final String CONNECTION = "jdbc:mysql://localhost/onlineshopping";

public void update(InfoHolder userInfo)
{

    try
    {
        Class.forName(DRIVER);

        Properties p = new Properties();
        p.put("user","****");
        p.put("password","****");

        Connection c = DriverManager.getConnection(CONNECTION,p);

        Statement s = c.createStatement();

        ResultSet rs = s.executeQuery("SELECT MAX(userid)+1 FROM user_info");
        rs.next();
        int id = rs.getInt(1);

        PreparedStatement ps = c.prepareStatement("INSERT INTO user_info VALUES (?,?,?,?,?,?,?)");
        ps.setInt(1,id);
        ps.setString(2,userInfo.name);
        ps.setString(3,userInfo.email);
        ps.setInt(4,userInfo.date);
        ps.setInt(5,userInfo.month);
        ps.setInt(6,userInfo.year);
        ps.setString(7,userInfo.subscribe);
        ps.executeUpdate();

        c.close();
    }

    catch(Exception e)
    {
        try
        {
            PrintWriter out = new PrintWriter(new FileWriter("err", true));
            out.println("Error: "+ e);
            out.close();
        }
        catch(IOException e)
        {}
    }
}
}


test.java

import com.onlineshopping.model.*;

public class test
{

public static void main(String[] args)
{
    Updater u = new Updater();

    InfoHolder xyz = new InfoHolder();
    xyz.name = "check";
    xyz.email = "checkmail";
    xyz.date = 1;
    xyz.month = 1;
    xyz.year = 2;
    xyz.pwd = "pw";
    xyz.subscribe = "n";

    u.update(xyz);
}
}

Updater 类文件不断抛出 - java.lang.ClassNotFoundException: com.mysql.jdbc.Driver. 但是当我从终端运行测试类文件时,相同的 Updater 类运行顺利。
我的 CLASSPATH 变量是否有问题:
它有这个价值—— .:/usr/share/java/mysql.jar:/usr/share/java/mysql-connector-java-5.1.16.jar:/usr/lib/tomcat6/lib/servlet-api.jar:classes. 请帮忙。

【问题讨论】:

  • 应用程序的前端是一些 JSP/JSF 吗?您将应用程序创建为 Java EE 应用程序还是 Java SE 应用程序?:) 因为您的测试类可以工作而 servlet 不能工作的事实可能是因为您在使用测试类查询数据库时使用了 Java SE。跨度>
  • 您应该通过 JNDI 数据源使用连接池,而不是将连接参数硬连接到模型中。
  • @Reshi 我不确定它是 java SE 还是 EE。我所做的就是编写这些文件,编译它们并使用 tomcat6 运行它们。从理论上讲,如果测试文件可以毫无问题地运行更新程序文件,那么容器 tomcat6 应该也可以。无论如何,你能告诉我应该如何解决这个问题吗?

标签: java mysql servlets jdbc java-server


【解决方案1】:

尝试将mysql-connector-java-5.1.16.jar复制到/usr/lib/tomcat6/lib/中

【讨论】:

  • 是的,您的回答有效。而且我猜问题是tomcat没有查看CLASSPATH变量(因为我的类路径变量确实提到了Driver包的路径)来查找所有源。它所做的只是在自己的库中查找所需的类。但是如果你能告诉我如何让tomcat查看classpath变量并从那里找到包,那就更好了。
  • 我从来没有需要做这样的事情,所以我无法即时回答。尝试查看 Tomcat 文档:tomcat.apache.org/tomcat-7.0-doc/class-loader-howto.html
猜你喜欢
  • 2015-01-08
  • 2016-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-02
  • 2016-03-22
  • 2012-05-30
相关资源
最近更新 更多