Jython zxJDBC cursor.tables () всегда возвращает None - PullRequest
2 голосов
/ 31 января 2009

Я использую Jython 2.2.1 и MySQL Connector / J 5.1 для доступа к базе данных MySQL. Я хотел бы использовать метод cursor.tables () zxJDBC для получения списка таблиц в этой базе данных. Однако этот метод всегда возвращает Нет .

Согласно документации zxJDBC, cursor.tables () является тем же, что и Java DatabaseMetaData.getTables (). Когда я вызываю этот Java-метод из Jython, он работает как положено, но использование пакета zxJDBC для меня не работает. Вот что я попробовал:

import java.sql.*;

public class TableTest {
    public static void tables(String url) {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection conn = DriverManager.getConnection(url, "root", null);
            DatabaseMetaData meta = conn.getMetaData();
            ResultSet rs = meta.getTables(null, null, "%",
                                          new String[] {"TABLE"});
            while (rs.next()) {
                System.out.println(rs.getString("TABLE_NAME"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Когда я звоню из Jython, все нормально.

from com.ziclix.python.sql import zxJDBC
import TableTest

url = 'jdbc:mysql://localhost/jythontest'

print 'Java:'
TableTest.tables(url);

print 'Python:'
conn = zxJDBC.connect(url, 'root', None, 'com.mysql.jdbc.Driver')
cursor = conn.cursor()
print cursor.tables(None, None, '%', ('TABLE',))

В моей тестовой базе данных есть две таблицы: table_a и table_b. Выход:

Java:
table_a
table_b
Python:
None

Я пробовал это на Linux и на MacOS с одинаковым результатом. Прежде чем я попытался выяснить, что не так с zxJDBC, я хотел узнать, есть ли что-то неправильное в использовании этого пакета.

Спасибо.

1 Ответ

2 голосов
/ 02 февраля 2009

Попробуйте распечатать cursor.fetchall () после вашего cursor.tables ()

from com.ziclix.python.sql import zxJDBC
import TableTest

url = 'jdbc:mysql://localhost/jythontest'

print 'Java:'
TableTest.tables(url);

print 'Python:'
conn = zxJDBC.connect(url, 'root', None, 'com.mysql.jdbc.Driver')
cursor = conn.cursor()
print cursor.tables(None, None, '%', ('TABLE',))
print cursor.fetchall()

(протестировано с Informix и jython 2.5 beta)

Я предполагаю:

  • cursor.tables () выполняет запрос в питон
  • cursor.fetchall () возвращает Результаты
...