سؤال

أنا أستخدم جافا و sqlitejdbc للعمل مع SQLite. أحتاج إلى الوصول إلى اسم الأعمدة لجدول معين ووجدت أنه يمكنني تحقيق ذلك مع الأمر التالي:

pragma table_info(myTable)

ومع ذلك ، عند محاولة القيام بما يلي أحصل على خطأ.

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

java.sql.sqlexception: NYI

ليس لدي أي فكرة عما تعنيه NYI ، علاوة على ذلك ، لست متأكدًا مما إذا كان بإمكاني فعل ما أحاول القيام به. أي اقتراحات حول كيف يمكنني تحقيق أسماء الأعمدة؟

هل كانت مفيدة؟

المحلول

NYI تعني "لم تنفذ بعد".

أظن أن الأمر "Pragma table_info" ربما لا يمكن تنفيذه مباشرة كبيان معد.

هناك مثال على تنفيذ بيان Pragma في رمز برنامج SQLite JDBC ، الفصل org.sqlite.metadata, ، طرق مثل getColumns() و getPrimaryKeys().

لا يمكنني مقتل الرمز ونشره هنا ، لأن القيام بذلك لن يكون متوافقًا مع ترخيص Creative Commons الذي يستخدمه StackOverFlow. لذا يرجى الذهاب إلى هذا الرابط وإلقاء نظرة.

نصائح أخرى

هناك مقتطف من الكود من 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);
    }

أظن أن NYI تعني "لم يتم تنفيذها بعد".

إذا لم ينجح الشيء براغما ،

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)

يمكنك الحصول على تعريفات العمود الفعلي من sqlite_master الجدول وحوضهم بنفسك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top