2

我正在使用 Jython 2.2.1 和 MySQL Connector/J 5.1 来访问 MySQL 数据库。我想使用 zxJDBC 的 cursor.tables() 方法来检索该数据库中的表列表。但是,此方法始终返回None

根据 zxJDBC 文档,cursor.tables() 与 Java 的 DatabaseMetaData.getTables() 相同。当我从 Jython 调用这个 Java 方法时,它按预期工作,但使用 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 有什么问题之前,我想知道我使用这个包的方式是否有任何问题。

谢谢你。

4

1 回答 1

2

在 cursor.tables() 之后尝试打印cursor.fetchall( )

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() 在 python 中执行查询
  • cursor.fetchall() 返回结果
于 2009-02-02T10:28:59.967 回答