2009-08-28 3 views
4

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

pragma table_info(myTable) 

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

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

java.sql.SQLException: NYI

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

ответ

3

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

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

Приведен пример выполнения инструкции pragma в коде для драйвера SQLite JDBC класса org.sqlite.Metadata, таких как getColumns() и getPrimaryKeys().

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

+0

Я посмотрел на код, и я вижу, что вы говорите. Спасибо. –

2

Там эта отрывок кода из SQLiteJDBC source code:

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); 
    } 

Я предполагаю Ньи означает «еще не реализована».

Если прагма вещь не получается,

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 и разобрать их самостоятельно.