【问题标题】:Delete data from database using jsp使用jsp从数据库中删除数据
【发布时间】:2014-06-26 11:23:33
【问题描述】:

我想从数据库中删除一条特定记录。

我的代码如下:

<%
String value = request.getParameter("Meter_No");
int v=Integer.parseInt(value);
try{

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDirver");
Connection conn = DriverManager.getConnection ("jdbc:sqlserver://localhost:1433;databaseName=myDatabase;
user=shakir;password=shakir123");
Statement st = conn.createStatement();
ResultSet rs =st.executeQuery("DELETE * FROM qesco_table 
  WHERE Meter_No ="+v+"");
rs.close();
conn.close();
  }catch(Exception e){
System.out.print(e.getMessage());
}
%>

但它不会从数据库中删除数据。

谁能指导我代码的问题在哪里?

【问题讨论】:

  • 你的连接字符串应该是jdbc:sqlserver://localhost:1433?databaseName=myDatabase&amp;user=shakir&amp;password=shakir123 也许这不是唯一的错误。请发布您的堆栈跟踪。
  • ResultSet rs =st.executeQuery("DELETE * FROM qesco_table WHERE Meter_No ="+v);
  • 检查是否建立了与数据库的连接,因为查询字符串似乎没问题。
  • 永远不要将数据库逻辑放入您的 JSP!您将演示文稿、业务甚至数据库逻辑混合在一个文件中,哎哟。

标签: java jsp


【解决方案1】:

你的代码中的每一件事都很好。

但您需要使用st.executeUpdate() 运行查询。

所以修改下面这行

ResultSet rs =st.executeQuery("DELETE * FROM qesco_table WHERE Meter_No ="+v+"");

st.executeUpdate("DELETE * FROM qesco_table WHERE Meter_No ="+v);

PLUS

  1. 您不需要在此程序中使用 ResultSet,因为您的查询不会返回任何要存储的数据。

  2. 您不需要在查询末尾使用空的“”(双引号)。

  3. 您应该关闭finally 块中的连接和其他连接,而不是尝试块本身。

如果你尝试使用PreparedStatements 来编写动态查询会更好。所以它会变成这样,

<%
    String value = request.getParameter("Meter_No");
    int v=Integer.parseInt(value);
    Connection conn = null;
    PreparedStatement pst = null;
    try{

        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDirver");
        conn = DriverManager.getConnection ("jdbc:sqlserver://localhost:1433;databaseName=myDatabase;user=shakir;password=shakir123");
        pst = conn.prepareStatement("delete from qesco_table where Meter_No = ?");
        pst.setInt(1,v);

        pst.executeUpdate();
      }catch(Exception e){
        System.out.print(e.getMessage());
    }finally{
        pst.close();
        conn.close();
    }
%>

【讨论】:

  • 兄弟:上面给我一个错误请帮助我。这是我的最后一个项目。谢谢
  • 服务器遇到一个内部错误,阻止它完成这个请求。这是发生错误。
  • @user274910 您收到 HTTP 错误 500,表明您的服务器端代码中发生了错误。请彻底检查是否会抛出一些异常(我怀疑 java.lang.NullPointerException)或其他东西。给我那个异常堆栈跟踪,然后我就能帮你。
【解决方案2】:

要使用 JDBC 从数据库中删除记录,您需要使用 executeUpdate("your query") 方法。当您要从数据库中检索数据时,使用 executeQuery() 查询。

那么查询应该是

DELETE FROM qesco_table 
  WHERE Meter_No ="+v+"

不是Delete * from table,正确的是Delete from table

改成

st.executeUpdate("DELETE FROM qesco_table WHERE Meter_No ="+v);

【讨论】:

    【解决方案3】:
    try{
    
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDirver");
        Connection conn = DriverManager.getConnection ("jdbc:sqlserver://localhost:1433;databaseName=myDatabase;user=shakir;password=shakir123");
        Statement st = conn.createStatement();
        ResultSet rs =st.executeUpdate("DELETE * FROM qesco_table WHERE Meter_No ="+v);
    
      }
      catch(SQLException e){
       System.out.print(e.getMessage());
     }
     finally
     { 
       rs.close();
       conn.close();
     }
    

    【讨论】:

    • 为什么用单引号将 v 括起来?再看一下代码,v是int。
    【解决方案4】:

    我建议避免使用 Scriplet,而是使用 JSP Standard Tag Library 和易于使用且不易出错的表达式语言。

    还有一件事,您应该将这个数据库代码移动到一个 servlet 中并从 JSP 中调用它。如果您仍然有兴趣在 JSP 中执行此操作,那么您应该使用专为从 JSP 访问数据库而设计的 SQL Tag Library

    示例代码:

    <sql:setDataSource var="dataSource"
        driver="com.microsoft.sqlserver.jdbc.SQLServerDirver"
        url="jdbc:sqlserver://localhost:1433;databaseName=myDatabase"
        user="shakir" password="shakir123" />
    
    <sql:update dataSource="${dataSource}"
        sql="DELETE FROM qesco_table WHERE Meter_No =?">
        <sql:param value="${param.Meter_No }" />
    </sql:update>
    

    【讨论】:

      【解决方案5】:

      试试这个兄弟!它肯定会工作 101%

      <%
      String value = request.getParameter("Meter_No");
      int v=Integer.parseInt(value);
      try{
          Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDirver");
          Connection conn = DriverManager.getConnection ("jdbc:sqlserver://localhost:1433;databaseName=myDatabase;user=shakir;password=shakir123");
          Statement st = conn.createStatement();
          String sql = "DELETE FROM qesco_table WHERE Meter_No= '"+v+"'";
          st.executeUpdate(sql);
        }
      catch(Exception e){
          System.out.print(e.getMessage());
      }
      %>
      

      【讨论】:

      • 它也无法正常工作并给出错误请帮助我谢谢
      • @user274910 这是什么错误?它对我来说工作正常,我将再次发布我的整个代码
      • @user274910 再试一次!复制粘贴
      • int v=Integer.parseInt(value);在这一行它给了我一个这样的错误:服务器遇到一个内部错误,阻止它完成这个请求。请帮帮我
      【解决方案6】:
      Class.forName("com.mysql.cj.jdbc.Driver");
      
      Connection c=DriverManager.getConnection("jdbc:mysql://localhost:3306/advjava", "root", "root");
      
      Statement stat=c.createStatement();
      int del=stat.executeUpdate("Delete from Cart where U_Id="+uid);
      

      【讨论】:

      • OP 的问题是关于 sqlserver,而不是 mysql。并且有一个非常不同的名字。
      猜你喜欢
      • 1970-01-01
      • 2015-09-21
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多