SQLiteJDBC e PreparedStatement di utilizzare pragma table_info
-
20-09-2019 - |
Domanda
Sto utilizzando Java e SQLiteJDBC di lavorare con SQLite. Ho bisogno di accedere a nome di colonne per una determinata tabella e ho scoperto che avrei potuto fare questo con il seguente comando:
pragma table_info(myTable)
Tuttavia, quando si cerca di fare quanto segue ottengo un errore.
PreparedStatement _pstmt =
this._DBConnection.prepareStatement("pragma table_info( '?' );",
new String[] {_tableName} );
java.sql.SQLException: NYI
Non ho idea di che cosa significa NYI e, inoltre, non sono sicuro se posso fare quello che sto cercando di fare. Qualche suggerimento su come posso fare ottenere i nomi delle colonne?
Soluzione
NYI significa "non ancora implementato".
Direi che il comando "pragma table_info" probabilmente non può essere eseguito direttamente da una dichiarazione preparata.
C'è un esempio di esecuzione di questa affermazione pragma nel codice per il driver JDBC SQLite, classe org.sqlite.Metadata , metodi come getColumns()
e getPrimaryKeys()
.
Non riesco estratto il codice e post qui, perché così facendo non sarebbe compatibile con la licenza Creative Commons usato da StackOverflow. Quindi, per favore andare a quel link e dare un'occhiata.
Altri suggerimenti
C'è questo estratto di codice da SQLiteJDBC codice sorgente :
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);
}
Sto indovinando NYI significa "Non ancora implementato".
Se la cosa pragma non sta lavorando,
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)
È possibile afferrare le definizioni attuali colonna dalla tabella sqlite_master
e analizzare fuori da soli.