SQLiteJDBC и PreparedStatement для использования прагмы table_info - PullRequest
4 голосов
/ 28 августа 2009

Я использую Java и SQLiteJDBC для работы с SQLite. Мне нужно получить доступ к имени столбцов для данной таблицы, и я обнаружил, что могу сделать это с помощью следующей команды:

pragma table_info(myTable)

Однако при попытке сделать следующее я получаю сообщение об ошибке.

PreparedStatement _pstmt =
    this._DBConnection.prepareStatement("pragma table_info( '?' );",
         new String[] {_tableName} );

java.sql.SQLException: NYI

Я понятия не имею, что означает NYI, и, более того, я не уверен, что смогу сделать то, что пытаюсь сделать. Любые предложения о том, как мне получить имена столбцов?

Ответы [ 2 ]

3 голосов
/ 28 августа 2009

NYI означает «еще не реализовано».

Я бы предположил, что команда "pragma table_info", вероятно, не может быть выполнена непосредственно как подготовленный оператор.

Есть пример выполнения этого прагматического выражения в коде для драйвера SQLite JDBC, класс org.sqlite.Metadata , такие методы, как getColumns() и getPrimaryKeys().

Я не могу извлечь код и опубликовать его здесь, потому что это не совместимо с лицензией Creative Commons, используемой StackOverflow. Поэтому, пожалуйста, перейдите по этой ссылке и посмотрите.

2 голосов
/ 28 августа 2009

Это фрагмент кода из исходного кода SQLiteJDBC :

 public PreparedStatement prepareStatement(String sql, int autoC)
        throws SQLException { throw new SQLException("NYI"); }
    public PreparedStatement prepareStatement(String sql, int[] colInds)
        throws SQLException { throw new SQLException("NYI"); }
    public PreparedStatement prepareStatement(String sql, String[] colNames)
        throws SQLException { throw new SQLException("NYI"); }
    public PreparedStatement prepareStatement(String sql, int rst, int rsc) 
                                throws SQLException {
        return prepareStatement(sql, rst, rsc,
                                ResultSet.CLOSE_CURSORS_AT_COMMIT);
    }

Я предполагаю, что NYI означает "Еще не реализовано".

Если прагма не работает,

sqlite> CREATE TABLE a(col1, col2, col3);
sqlite> CREATE TABLE b(w, x, y, z);
sqlite> SELECT * FROM sqlite_master;
table|a|a|2|CREATE TABLE a(col1, col2, col3)
table|b|b|3|CREATE TABLE b(w, x, y, z)

sqlite> SELECT sql FROM sqlite_master;
CREATE TABLE a(col1, col2, col3)
CREATE TABLE b(w, x, y, z)

Вы можете получить фактические определения столбцов из таблицы sqlite_master и разобрать их самостоятельно.

...