Pregunta

Estoy utilizando Java y SQLiteJDBC trabajar con SQLite. Necesito acceder a nombre de columnas para una tabla determinada y me he dado cuenta que yo podría lograr esto con el siguiente comando:

pragma table_info(myTable)

Sin embargo, cuando se trata de hacer lo siguiente: Me aparece un error.

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

java.sql.SQLException: JNI

No tengo idea de lo que significa la JNI y, además, no estoy seguro de si puedo hacer lo que estoy tratando de hacer. Alguna sugerencia sobre cómo puedo lograr obtener los nombres de las columnas?

¿Fue útil?

Solución

JNI significa "aún no aplicadas."

Me imagino que el comando "pragma table_info" probablemente no se puede ejecutar directamente como una declaración preparada.

Hay un ejemplo de ejecución de esa declaración pragma en el código del controlador JDBC SQLite, clase org.sqlite.Metadata , métodos tales como getColumns() y getPrimaryKeys().

No puedo extractar el código y puesto que aquí, porque al hacerlo no sería compatible con la licencia Creative Commons utilizado por stackoverflow. Así que por favor ir a ese enlace y echar un vistazo.

Otros consejos

Hay un fragmento de código desde SQLiteJDBC código fuente :

 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);
    }

supongo JNI significa "No obstante Implementado".

Si lo pragma no está funcionando,

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)

Puede tomar las definiciones de columna reales de la mesa sqlite_master y analizar a cabo usted mismo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top