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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top