4

私はJavaとSQLiteJDBCを利用してSQLiteを操作しています。特定のテーブルの列の名前にアクセスする必要がありますが、次のコマンドでこれを実行できることがわかりました。

pragma table_info(myTable)

ただし、次のことを実行しようとすると、エラーが発生します。

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

java.sql.SQLException:NYI

NYIが何を意味するのかわかりません。さらに、自分がやろうとしていることを実行できるかどうかもわかりません。列名の取得をどのように達成できるかについての提案はありますか?

4

2 に答える 2

3

NYIは「まだ実装されていない」という意味です。

コマンド「pragmatable_info」は、プリペアドステートメントとして直接実行できない可能性があります。

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

コードを抜粋してここに投稿することはできません。そうすると、StackOverflowで使用されるクリエイティブコモンズライセンスと互換性がなくなるためです。そのリンクにアクセスしてご覧ください。

于 2009-08-28T02:14:28.430 に答える
2

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自分で解析することができます。

于 2009-08-28T02:20:19.230 に答える