gpt4 book ai didi

java - 如何让 Statement.getGenerateKeys 工作

转载 作者:行者123 更新时间:2023-12-02 05:45:50 25 4
gpt4 key购买 nike

我的方法 getGeneratedKeys() 有问题的java.sql.Statement

首先是我的代码:

创建.sql:(HSQLDB)

create table Ticket (
ticketID INTEGER GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
persID INTEGER NOT NULL REFERENCES Mitarbeiter(persID),
zeitpunkt TIMESTAMP(0) NOT NULL,
betreff VARCHAR(100) NOT NULL,
text VARCHAR(1000) NOT NULL,
wichtig BOOLEAN NOT NULL,
istGeloest BOOLEAN NOT NULL
);

DAO 的创建方法:

@Override
public Ticket create(Ticket t) throws PersistenceException {
if( t == null ) {
log.error("PersistenceTicket.create(Ticket t) wurde ein null parameter übergeben");
throw new PersistenceException("TicketParameter ist null");
}
PreparedStatement pst = null;

try {
pst = con.prepareStatement("INSERT INTO ticket(persID, zeitpunkt, betreff, text, wichtig, istGeloest) VALUES (?,?,?,?,?,?)");

pst.setInt(1, t.getPersID());
pst.setTimestamp(2, t.getZeitpunkt());
pst.setString(3, t.getBetreff());
pst.setString(4, t.getText());
pst.setBoolean(5, t.isWichtig());
pst.setBoolean(6, t.istGeloest());

int result = pst.executeUpdate();
if( result > 1 ) {
return null;
}

ResultSet rs = pst.getGeneratedKeys();
if( rs.next() ) {
t.setTicketID(rs.getInt(1));
}
else {
log.debug("No keys generated");
}
log.info("Ticket mit Betreff " + t.getBetreff() + " in die Datenbank gespeichert" );

pst.close();
} catch (SQLException e) {
log.error("Error beim create: " + e.getMessage());
}
return t;
}

然后我有一个单元测试来测试生成的 key :

@Test
public void specialCreateTest() throws PersistenceException {
Ticket a = this.persT.create(this.testTicket);
Ticket b = this.persT.create(this.testTicket);
log.debug(a.getTicketID() + " < " + b.getTicketID());
assertTrue(a.getTicketID() < b.getTicketID());
}

当我运行测试时,我收到一个失败消息和以下日志:

DEBUG at.ac.tuwien.sepm.persistence.PersistenceTicketImpl  - No keys generated
DEBUG at.ac.tuwien.sepm.persistence.PersistenceTicketImpl - No keys generated
DEBUG at.ac.tuwien.sepm.unittests.APersistenceTicketTest - 0 < 0

所以问题是 .getGeneratedKeys() method returns an empty set, otherwise we wouldn没有看到日志,没有生成 key

最佳答案

改变

pst = con.prepareStatement("INSERT INTO ticket(persID, zeitpunkt, betreff, text, wichtig, istGeloest) VALUES (?,?,?,?,?,?)");

pst = con.prepareStatement("INSERT INTO ticket(persID, zeitpunkt, betreff, text, wichtig, istGeloest) VALUES (?,?,?,?,?,?)", 
Statement.RETURN_GENERATED_KEYS);

否则,PreparedStatement 不会返回键。

关于java - 如何让 Statement.getGenerateKeys 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24082862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com