将生成器设置为特定值

时间:2014-03-17 08:41:21

标签: java jdbc firebird

我正在转换数据库,我需要在生成新数字之前将生成器设置为一个值。

假设生成器被称为gtest。我尝试了以下内容:

PreparedStatement nrps = csource.prepareStatement("alter sequence gtest restart with 100");

PreparedStatement nrps = csource.prepareStatement("set gopdracht to 100");

选项1给出了无效的语法,选项2给出了未知的系统变量。

我做错了什么?

1 个答案:

答案 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();
    }
}