我有一个BaseRunner
类:连接到数据库并具有从数据库插入/选择数据的方法,使测试插入工作正常LetterServlet
类:从窗体获取数据,将其放入数据库,然后将其发送到显示所输入数据的页-插入不起作用TestBR
:将测试插入数据库-工作正常BaseRunner
等级:
public class BaseRunner
{
static Connection connection;
public static void main(String[] args)
{
BaseRunner br = new BaseRunner();
br.insertLetter("TestUser3", "TestLetter3"); //works fine
}
public BaseRunner() {
makeConnection("url",
"postgres", "pass");
}
public boolean makeConnection(String DB_URL, String USER, String PASS)
{
connection = null;
try {
Class.forName("org.postgresql.Driver");
connection = DriverManager.getConnection(DB_URL, USER, PASS);
System.out.println("Opened database successfully");
return true;
} catch (Exception e) {
e.printStackTrace();
System.err.println(e.getClass().getName()+": "+e.getMessage());
System.exit(0);
return false;
}
}
public void insertLetter(String userName, String letterText) {
try {
Statement statement = connection.createStatement();
PreparedStatement preparedStatement = null;
preparedStatement=connection.prepareStatement("INSERT INTO letters VALUES (?, ?, ?)");
preparedStatement.setInt(1, 0);
preparedStatement.setString(2, userName);
preparedStatement.setString(3, letterText);
preparedStatement.executeQuery();
}
catch (Exception e) {
System.out.println("Exception insert");
e.printStackTrace();
System.err.println(e.getClass().getName()+": "+e.getMessage());
System.exit(0);
}
}
}
LetterServlet
:package com.web;
import com.util.BaseRunner;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class LetterServlet extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
String userName = request.getParameter("userName");
String letterText = request.getParameter("letterText");
BaseRunner br = new BaseRunner();
br.insertLetter("TestServletUserReal", "TestServletTextReal"); //doesn't work
RequestDispatcher view= request.getRequestDispatcher("letter_sent_view.jsp");
view.forward(request, response);
}
}
TestBR
:package com.web;
import com.util.BaseRunner;
public class TestBR {
public static void main(String[] args) {
BaseRunner br = new BaseRunner();
br.insertLetter("TestBR", "TestBRText"); //works fine
}
}
我不明白为什么
LetterServlet
的数据库插入不起作用,即使它与BaseRunner
或TestBR
的main
方法执行的插入没有区别。 最佳答案
由于您是insert data,它将更新数据库记录,因此您不应该使用query
,而需要在update
方法中使用insertLetter
改变
preparedStatement.executeQuery();
到
preparedStatement.executeUpdate();