我正在使用Jython 2.2.1和MySQL Connector / J 5.1来访问MySQL数据库。我想使用zxJDBC的cursor.tables()方法来检索该数据库中的表列表。但是,此方法始终返回无。
根据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的错误之前,我想知道我使用这个包的方式是否有任何问题。
谢谢。
答案 0 :(得分: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测试)
我假设: