我寫了一個servlet文件SignUp.java和幫助程序文件Updater.java。 SignUp從用戶填寫的表單收集用戶信息。然後它將信息發送到更新程序,以便更新程序使用信息更新數據庫中的表。但是當我填寫表單並點擊提交時,沒有任何變化。奇怪的是,當我編寫一個測試文件並使用它爲Updater提供一些虛擬值時,該表就被這些虛擬值更新了。 -
SignUp.java
無法通過servlets更新mysql數據庫
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:類。
請幫忙。
應用程序的前端是一些JSP/JSF嗎?您是否將應用程序創建爲Java EE應用程序或Java SE應用程序?:)因爲您的測試類的工作原理和servlet的事實並不符合您在使用測試類查詢數據庫時使用Java SE的事實。 – Reshi 2013-02-21 08:31:42
您應該通過JNDI數據源使用連接池,而不是將連接參數硬連線到模型中。 – 2013-02-21 08:54:34
@Reshi我不確定它是Java SE還是EE。我所做的只是編寫這些文件,編譯它們並使用tomcat6運行它們。從理論上講,如果測試文件可以在沒有問題的情況下運行updater文件,那麼容器tomcat6也應該可以。無論如何,你能告訴我應該如何糾正這個問題嗎? – 2013-02-21 09:56:40