SQLiteJDBCとPreparedStatementのは、プラグマtable_infoを使用するには
-
20-09-2019 - |
質問
私はSQLiteので動作するJavaと SQLiteJDBCするを利用しています。私は与えられたテーブルのカラムの名前にアクセスする必要があると私は、次のコマンドでこれを達成することができることを発見しました。
pragma table_info(myTable)
以下の手順を実行しようとすると、しかし、私はエラーを取得します。
PreparedStatement _pstmt =
this._DBConnection.prepareStatement("pragma table_info( '?' );",
new String[] {_tableName} );
ます。java.sql.SQLException:NYI
私はNYIが何を意味するのか見当がつかない、さらに、私は私がやろうとしている何ができるかはわかりません。私は、列名を取得して達成することができますどのように上の任意の提案ですか?
解決
NYI手段 "はまだ実装されていません。"
私は、コマンドは、「プラグマtable_info」おそらくプリペアドステートメントとして直接実行することはできませんよね。
SQLiteのJDBCドライバのコード内でそのプラグマ文を実行する例があります、クラス<のhref =「http://www.zentus.com/sqlitejdbc/src/src/org/sqlite/MetaData.java」 REL = "nofollowをnoreferrer"> org.sqlite.Metadata を、そのようなgetColumns()
とgetPrimaryKeys()
などの方法。
私は、コードを抜粋し、そうすることにStackOverflowで使用されるクリエイティブ・コモンズのライセンスと互換性がないため、それをここに投稿することはできません。だから、そのリンクに移動して見てください。
他のヒント
SQLiteJDBCソースコードからこのコードの抜粋がありますA>:
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
テーブルから実際の列の定義を取得し、自分でそれらを解析することができます。