我正在转换数据库,我需要在生成新数字之前将生成器设置为一个值。
假设生成器被称为gtest。我尝试了以下内容:
PreparedStatement nrps = csource.prepareStatement("alter sequence gtest restart with 100");
和
PreparedStatement nrps = csource.prepareStatement("set gopdracht to 100");
选项1给出了无效的语法,选项2给出了未知的系统变量。
我做错了什么?
答案 0 :(得分:1)
我开始怀疑您正在使用与非firebird数据库的连接,因为没有Firebird错误消息“未知系统变量”(但这是一个MySQL错误)。
我在Firebird 2.5上使用Jaybird 2.2.4进行了测试,ALTER SEQUENCE ... RESTART WITH ...
和SET GENERATOR ... TO ...
都可以正常工作。
我使用了以下示例程序:
private static final String fileName = "D:/data/db/alterseq.fdb";
public static void main(String[] args) throws Exception {
FBManager manager = new FBManager();
manager.setCreateOnStart(true);
manager.setDropOnStop(true);
manager.setUserName("sysdba");
manager.setPassword("masterkey");
manager.setFileName(fileName);
manager.start();
try (Connection con = DriverManager.getConnection(
"jdbc:firebirdsql://localhost/" + fileName, "sysdba", "masterkey")) {
try (Statement ddlStmt = con.createStatement()) {
ddlStmt.execute("CREATE SEQUENCE seq_test");
}
try (PreparedStatement pstmt = con.prepareStatement(
"ALTER SEQUENCE seq_test RESTART WITH 100")) {
pstmt.execute();
}
try (PreparedStatement pstmt = con.prepareStatement(
"SET GENERATOR seq_test TO 200")) {
pstmt.execute();
}
} finally {
manager.stop();
}
}