2014-06-26 64 views
0

我想從數據庫中刪除特定記錄。下面使用jsp從數據庫刪除數據

我的代碼給出:

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

但它不會從數據庫中刪除數據。

任何人都可以指導我,代碼的問題在哪裏?

+0

您的連接字符串應該是'JDBC:SQLSERVER://本地主機:1433的databaseName = MYDATABASE與用戶=沙基爾和密碼= shakir123'也許這不是唯一的錯誤。請發佈您的堆棧跟蹤。 – Nailgun

+0

'ResultSet rs = st.executeQuery(「DELETE * FROM qesco_table WHERE Meter_No =」+ v);' –

+0

檢查是否建立了與數據庫的連接,因爲查詢字符串似乎沒問題。 –

回答

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. 你不需要有結果集在本期節目裏你的查詢不將返回任何數據存儲。

  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(); 
    } 
%> 
+0

兄弟:上面給我一個錯誤請幫我解決。這是我的最後一個項目。謝謝 –

+0

@ user274910你得到了什麼錯誤? – gprathour

+0

服務器遇到阻止其履行此請求的內部錯誤。這是錯誤發生。 –

0

要使用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); 
0
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(); 
} 
+0

你爲什麼用單引號括起v?再次看看代碼,v是int。 – gprathour

+0

哦雅更新它謝謝btw – SparkOn

0

我建議避免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> 
0

試試這個兄弟!它的工作是肯定的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()); 
} 
%> 
+0

它也不能正常工作,並給出一個錯誤,請幫助我謝謝 –

+0

@ user274910什麼樣的錯誤是?它對我的工作很好,我會再次發佈我的整個代碼 – wrecklez

+0

@ user274910再試一次!複製並粘貼它 – wrecklez