代码之家  ›  专栏  ›  技术社区  ›  parsecer

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

  •  0
  • parsecer  · 技术社区  · 6 年前

    我有一个

    BaseRunner 类:连接到数据库,并具有从数据库插入/选择数据的方法,进行测试插入,其中 工作正常

    LetterServlet 类:从表单中获取数据,将其放入数据库,然后将其发送到显示输入数据的页面-插入 不起作用

    TestBR :将测试插入数据库- 工作正常

    跑垒员 类别:

    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);
    
        }
    }
    

    测试br :

    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 的数据库插入不起作用,即使它与 跑垒员 的或 测试br main 方法。

    1 回复  |  直到 6 年前
        1
  •  2
  •   flyingfox    6 年前

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

    改变

    preparedStatement.executeQuery();
    

    preparedStatement.executeUpdate();