【发布时间】:2021-12-29 16:20:21
【问题描述】:
我是 Java 新手,尤其是 JDBC 新手。我正在尝试为 GUI 开发一个简单的 DAO 实现,其中面板中的字段被填写,数据存储在名为 EventList 的 Oracle DB 表中。目前,它适用于 Event (Model) 类的所有字段,EventID 列除外。
我正在尝试通过语句 GENERATED KEYS 生成一个自增整数,但是,即使我尝试了不同的方法来重新组织方法 saveData2() 中的“INSERT”查询,记录仍然为空并且没有生成任何键.我做错了什么?每一个提示都会非常感激!
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
public class EventDAOImpl implements EventDAO {
@Override
public void saveData2(Event event) {
OracleDsSingleton ora = OracleDsSingleton.getInstance();
int primKey = 0;
try {
Connection connection = ora.getConnection();
String addQuery = "INSERT INTO EventList(EventName, EventPlace, EventDate, EventDescription, EventCategory) VALUES (?,?,?,?,?)";
//PreparedStatement ptmt = connection.prepareStatement(addQuery, Statement.RETURN_GENERATED_KEYS);
// ResultSet generatedKey = ptmt.getGeneratedKeys();
// if (generatedKey.next()) {
// int key = generatedKey.getInt(1);
// System.out.println(key);
// }
String columnNames [] = new String [] {"EventId"};
PreparedStatement ptmt = connection.prepareStatement(addQuery, columnNames);
ptmt.setString(1, event.getName());
ptmt.setString(2, event.getPlace());
ptmt.setString(3, event.getDate());
ptmt.setString(4, event.getDescription());
ptmt.setString(5, event.getCategory());
//ptmt.executeUpdate();
if(ptmt.executeUpdate() > 0) {
java.sql.ResultSet generatedKey = ptmt.getGeneratedKeys();
if (generatedKey.next() ) {
event.setEventID(generatedKey.getInt(1));
}
}
System.out.println("Data successfully added!");
//System.out.println("Table updated with EventID = " + primKey);
System.out.println(event.getName());
} catch (SQLException e) {
e.printStackTrace();
}
}
}
【问题讨论】:
-
请删除所有不需要演示问题的代码,尤其是与UI相关的代码,这些代码无关紧要。见How to ask。
-
请向我们展示
EventList的创建表语句,特别是EventId是如何定义的(如果 DB 没有在插入时自动生成字段 - 没有什么可以返回) -
EventList 表是使用 SQL 查询直接在数据库中创建的。 EventID 被简单地定义为 Integer。
-
您使用的是哪个Oracle版本和哪个Oracle JDBC驱动版本?