我有一个
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方法执行的插入没有区别。

最佳答案

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

preparedStatement.executeQuery();


preparedStatement.executeUpdate();

10-06 16:20
查看更多