PreparedStatement不会改变任何东西

时间:2013-10-01 09:06:03

标签: java sql prepared-statement

我在网上找到的一个例子之后编写了这段代码,但它不起作用,请你告诉我它可能有什么问题。它似乎做了一些事情并打印出结果但没有任何改变。

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

3 个答案:

答案 0 :(得分:0)

尝试使用updateDB.executeUpdate()代替updateDB.execute()。奇怪的是,execute在大多数情况下不适用于数据更新。

答案 1 :(得分:0)

你的代码似乎很好。
updateDB.executeUpdate();返回的值(int)是什么? DB实用程序(如SQLFront)在给出相同的语句时会产生什么? 试试con.setAutoCommit(true);updateDB.close();

答案 2 :(得分:0)

尝试“......名字就像?”为了价值“%Peter%”

我猜这个名字不匹配,因为有空白或其他东西。

请注意,上述内容也会改变“Peter-Alexander”或“Hans-Peter”等条目。 所以这只是证明它的价值不完全匹配。