Трудность получения ПК в HSQLDB - PullRequest
0 голосов
/ 10 июня 2011

Я использую hsqldb для юнит-теста (НЕ производства). Эти тесты должны получить доступ к первичному ключу таблицы, но я не могу заставить его работать. Кстати, я использую последнюю версию 2.0.0

Я создал небольшой фрагмент, чтобы воссоздать проблему. Любая обратная связь будет принята с благодарностью

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class Test {
    public static void main(String[] args) throws Exception {
        Connection conn = getHSQLConnection();
        System.out.println("Got Connection.");
        Statement st = conn.createStatement();
        st.executeUpdate("create table survey (id int,name varchar (20), PRIMARY KEY (id) );");
        ResultSet rs = null;
        DatabaseMetaData meta = conn.getMetaData();
        rs = meta.getPrimaryKeys(null, null, "survey");
        String pk = null;
        if (rs.next()) {
            pk = rs.getString("COLUMN_NAME");
            System.out.println("getPrimaryKeys(): columnName=" + pk);
        }
        else {
            System.out.println("Couldn't get the PK");
        }
        st.close();
        conn.close();
    }

    private static Connection getHSQLConnection() throws Exception {
        Class.forName("org.hsqldb.jdbcDriver");
        System.out.println("Driver Loaded.");
        String url = "jdbc:hsqldb:data/test1";
        return DriverManager.getConnection(url, "sa", "");
    }
}

1 Ответ

1 голос
/ 10 июня 2011

Используйте это:

rs = meta.getPrimaryKeys(null, null, "SURVEY");

В стандартном SQL имя столбца, таблицы или другого объекта превращается в верхний регистр, если вы не используете двойные кавычки вокруг имени, когда используете его в операторах SQL.

Последняя версия в настоящее время 2.2.3 и имеет исправления ошибок и улучшения по сравнению с версией 2.0.0

...