SQLiteJDBC und PreparedStatement zur Verwendung von Pragma table_info
-
20-09-2019 - |
Frage
Ich benutze Java und Sqlitejdbc mit SQLite arbeiten. Ich muss auf den Namen der Spalten für eine bestimmte Tabelle zugreifen, und ich habe festgestellt, dass ich dies mit dem folgenden Befehl erreichen kann:
pragma table_info(myTable)
Beim Versuch, Folgendes zu machen, erhalte ich jedoch einen Fehler.
PreparedStatement _pstmt =
this._DBConnection.prepareStatement("pragma table_info( '?' );",
new String[] {_tableName} );
java.sql.sqlexception: nyi
Ich habe keine Ahnung, was NYI bedeutet, und ich bin mir nicht sicher, ob ich das tun kann, was ich versuche zu tun. Irgendwelche Vorschläge, wie ich das Erhalten der Spaltennamen erreichen kann?
Lösung
NYI bedeutet "noch nicht implementiert".
Ich würde vermuten, dass der Befehl "Pragma table_info" wahrscheinlich nicht direkt als vorbereitete Anweisung ausgeführt werden kann.
Es gibt ein Beispiel für die Ausführung dieser Pragma -Anweisung im Code für den SQLite JDBC -Treiber, Klasse org.sqlite.metadata, Methoden wie z. getColumns()
und getPrimaryKeys()
.
Ich kann den Code nicht ausziehen und hier veröffentlichen, da dies nicht mit der Creative Commons -Lizenz von Stackoverflow kompatibel wäre. Gehen Sie also bitte zu diesem Link und schauen Sie sich an.
Andere Tipps
Es gibt diesen Codeauszug von SQLiteJDBC -Quellcode:
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);
}
Ich vermute, NYI bedeutet "noch nicht implementiert".
Wenn das Pragma -Ding nicht funktioniert,
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)
Sie können die tatsächlichen Spaltendefinitionen aus dem schnappen sqlite_master
Tisch und analysieren Sie sie selbst.