2009-08-28 24 views
4

私はJavaを利用しており、SQLiteJDBCをSQLiteで使用しています。私は与えられたテーブルのカラムの名前にアクセスする必要があると私は、次のコマンドでこれを達成することができることを発見しました:プラグマtable_infoを使用するSQLiteJDBCとPreparedStatement

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"コマンドはおそらく準備された文として直接実行できないと思います。

SQLite JDBCドライバのコードでクラスorg.sqlite.Metadata、メソッドgetColumns()およびgetPrimaryKeys()のようなプラグマステートメントを実行する例があります。

これを行うと、StackOverflowで使用されるCreative Commonsライセンスと互換性がないため、コードを抜粋してここに投稿することはできません。だからそのリンクに行き、見てください。

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

私は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テーブルから実際の列の定義を取得し、自分でそれらを解析することができます。

関連する問題