2013-10-01 83 views
-1

我在網上找到一個例子後寫了這段代碼,但它不起作用,請告訴我可能有什麼問題。它似乎做了一些事情並打印出結果,但沒有任何變化。PreparedStatement不會改變任何東西

package com.company.Start; 

import java.sql.*; 

public class PreparedStmt 
{ 

public static void main(String[] args) throws Exception 
{ 
    Class.forName("oracle.jdbc.OracleDriver"); 
    Connection con = DriverManager.getConnection("jdbc:oracle:thin:@PC:1521/XE","ACCOUNT", "password"); 
    PreparedStatement updateDB = con.prepareStatement("UPDATE Customers SET lname=? WHERE name=?"); 
    updateDB.setString(1, "Meier"); 
    updateDB.setString(2, "Peter"); 
    updateDB.execute(); 
    Statement smt = con.createStatement(); 
    String query = "SELECT * FROM customers"; 
    ResultSet rs = smt.executeQuery(query); 
    System.out.println("NAME LNAME ADRESS"); 
    while (rs.next()) { 
    String name = rs.getString("name"); 
    String lname = rs.getString("lname"); 
    System.out.println(name + " " + lname); 
    } 
} 
} 
+0

打印結果是什麼?你確定你正在檢查相同的數據庫進行更改嗎? –

+0

打印結果有什麼問題? – Thilo

+0

@HariShankar他重複使用相同的連接,所以我會說這是同一個數據庫。 – Thomas

回答

0

試試「... WHERE name LIKE?」和價值把「%彼得%」

我猜這個名字不匹配,因爲有一個空白或什麼的。

請注意,上述內容也會改變「Peter-Alexander」或「Hans-Peter」的條目。 所以這只是一個證明,它是沒有完全匹配的值。

+0

我想這是因爲列允許更多的字符比「彼得」包括 – nochnichda

+0

當你直接在數據庫上運行時,它是如何工作的? – stepanian

+0

我不知道,但與代碼中添加的空白它工作 – nochnichda

0

嘗試使用的updateDB.executeUpdate()代替updateDB.execute()。在大多數情況下,奇怪execute不適用於數據更新。

+0

它不會改變任何東西 – nochnichda

+0

@nochnichda是你得到一些異常? –

0

你的代碼似乎很好。
updateDB.executeUpdate();返回的值(int)是什麼?
DB實用程序(如SQLFront)在給定相同語句的情況下生成了什麼?
嘗試con.setAutoCommit(true);updateDB.close();

+0

它給出'o' – nochnichda

+0

@nochnichda 這意味着您的語句不會更改數據庫中的任何內容,即錯誤是數據庫中沒有名稱「Peter」。這不是一個Java問題。 – AlexR