Question

Je suis en utilisant Java et SQLiteJDBC pour travailler avec SQLite. J'ai besoin d'accéder au nom de colonnes pour une table donnée et je l'ai trouvé que je pouvais y arriver avec la commande suivante:

pragma table_info(myTable)

Cependant, lorsque l'on tente de faire ce qui suit, je reçois une erreur.

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

java.sql.SQLException: JNI

Je ne sais pas ce que signifie la JNI et de plus, je ne sais pas si je peux faire ce que je suis en train de faire. Toutes les suggestions sur la façon dont je peux accomplir obtenir les noms de colonnes?

Était-ce utile?

La solution

JNI signifie "pas encore mis en œuvre."

Je suppose que la commande « pragma table_info » ne peut probablement pas être exécuté directement comme une déclaration préparée.

Il y a un exemple d'exécution de cette déclaration pragma dans le code pour le pilote JDBC SQLite, classe org.sqlite.Metadata , des méthodes telles que getColumns() et getPrimaryKeys().

Je ne peux pas extrait le code et le poster ici, car cela ne serait pas compatible avec la licence Creative Commons utilisée par StackOverflow. Alors s'il vous plaît aller à ce lien et jeter un coup d'oeil.

Autres conseils

Il y a cet extrait de code à partir code source 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);
    }

Je devine que JNI signifie « Pas encore mis en œuvre ».

Si la chose pragma ne fonctionne pas sur,

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)

Vous pouvez saisir les définitions des colonnes réelles de la table sqlite_master et les analyser vous-même.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top