【问题标题】:Inserted rows is not updating in database through JDBC插入的行未通过 JDBC 在数据库中更新
【发布时间】:2013-06-23 14:32:23
【问题描述】:

您好,我正在尝试使用 jdbc 将值插入 SQL 数据库。当前代码能够连接和查询 sql DB。我正在使用 executeupdate 插入值。这段代码没有给出任何错误。但是值没有被插入到 SQL DB 中,即使我厌倦了在执行之后和之前提交代码。我怎样才能将值插入数据库???

    import java.io.IOException;       
   import java.io.PrintWriter;       
   import java.sql.Connection;       
   import java.sql.DriverManager;       
   import java.sql.SQLException;       
   import java.sql.Statement;       
   import oracle.jdbc.driver.*;       

   import javax.servlet.ServletException;       
   import javax.servlet.http.HttpServlet;       
   import javax.servlet.http.HttpServletRequest;       
   import javax.servlet.http.HttpServletResponse;       


   public class Servlet1 extends HttpServlet {       
protected void doGet(HttpServletRequest request,HttpServletResponse response)       
throws ServletException,IOException       
{       
    String p1=request.getParameter("param1");       
    String p2=request.getParameter("param2");       
    String p3=request.getParameter("param3");       
    String p4=request.getParameter("param4");       
    String p5=request.getParameter("param5");       
    String sql="INSERT INTO EMPLOYEES (Id,Name,Post,Salary,Location)  VALUES('" + p1 + "','" + p2 + " ','" + p3 + "','" + p4 + " ','" + p5 + " ')";       
    try       
    {       
        Class.forName("oracle.jdbc.driver.OracleDriver");       
    }       
    catch(ClassNotFoundException ex)       
    {       
        ex.printStackTrace();       
    }       
    Connection con=null;       
    Statement stmt=null;       
    try       
    {       
        con =        DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521/XE","test","Gari!2563");       
        stmt=con.createStatement();       
        stmt.executeUpdate(sql);       
         con.setAutoCommit(true);       
    }       
    catch(SQLException ex)       
    {       
        ex.printStackTrace();       
    }       
    finally       
    {       
        try       
        {       
        if(stmt!=null)       
        {       
            stmt.close();       
            stmt=null;       
        }       
    }       
    catch(SQLException ex)       
    {       
        ex.printStackTrace();       
    }       
    try       
    {       
        if(con!=null)       
        {       
            con.close();       
            con=null;       
        }       
    }       
    catch(SQLException ex)       
    {       
        ex.printStackTrace();       
    }       
}       
PrintWriter out = response.getWriter();       
out.println("done");       
}       

}

我使用的是 jdk1.7,Oracle DB XE 11.2.0。 Apache tomcat 7 eclipse juno EE 版。

【问题讨论】:

  • 你之前问过这个问题 (here)。下次请更新现有问题,而不是提出新问题。我已投票关闭旧版本,因为您在此处提供了更多详细信息。
  • 好的,我会的。不知道我是新来的。但是帮我解决这个浪费了将近 6 个小时的问题。
  • 你有没有检查过你的应用服务器的日志,你正在打印堆栈跟踪然后忽略异常,这很可能意味着你根本没有执行查询
  • 那么,我实际上必须在这段代码中更改什么?
  • 查看你的应用服务器的日志,或者把ex.printStackTrace()全部改成throw new ServletException(ex)看看有没有异常

标签: oracle jdbc insert sql-update commit


【解决方案1】:

好像代码有误。

如果你想使用自动提交模式,那么它应该在查询执行之前设置(通常是在 getConnection() 之后)——而不是在查询执行之后。

如果您不想使用自动提交,那么您需要在语句执行后显式地 con.commit()。您可能想查看at the documentation 了解更多信息。

由于您已经修复了由于缺少 jdbc 驱动程序而导致的异常,它现在应该可以工作了。

【讨论】:

  • 谢谢先生,我刚刚移动了 con.setAutoCommit(true);在连接之前,它确实有效,所有行都被插入到数据库中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多