Java:无法使用 jdbc 从 servlet 的 doPost 插入数据



我有一个

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的数据库插入不起作用,即使它与BaseRunnerTestBRmain方法执行的插入没有什么不同。

由于您正在插入数据,它将更新数据库记录,因此您不应该使用query而是需要在insertLetter方法中使用update

改变

preparedStatement.executeQuery();

preparedStatement.executeUpdate();

最新更新