我在用着杰·德贝API https://launchpad.net/jaydebeapi它使用 JPype 加载 FileMaker 的 JDBC 驱动程序并提取数据。
但我也希望能够获取所有表的列表在数据库中。
In the JDBC 文档 http://www.filemaker.com/support/product/docs/11/fmp/fm11_odbc_jdbc_guide_en.pdf(第 55 页)它列出了以下功能:
JDBC 客户端驱动程序支持以下元数据功能:
获取列
获取栏目权限
获取元数据
获取类型信息
获取表
获取表类型
我有什么想法可以从 JPype 或 JayDeBeAPI 调用它们吗?
如果有帮助,这是我当前的代码:
import jaydebeapi
import jpype
jar = r'/opt/drivers/fmjdbc.jar'
args='-Djava.class.path=%s' % jar
jvm_path = jpype.getDefaultJVMPath()
jpype.startJVM(jvm_path, args)
conn = jaydebeapi.connect('com.filemaker.jdbc.Driver',
SETTINGS['SOURCE_URL'], SETTINGS['SOURCE_UID'], SETTINGS['SOURCE_PW'])
curs = conn.cursor()
#Sample Query:
curs.execute("select * from table")
result_rows = curs.fetchall()
Update:
这是一些进展,看起来应该可以工作,但我收到以下错误。有任何想法吗?
> conn.jconn.metadata.getTables()
*** RuntimeError: No matching overloads found. at src/native/common/jp_method.cpp:121
好的,多亏了 eltabo 和 Juan Mellado,我明白了!
我只需传入正确的参数来匹配方法签名。
这是工作代码:
import jaydebeapi
import jpype
jar = r'/opt/drivers/fmjdbc.jar'
args='-Djava.class.path=%s' % jar
jvm_path = jpype.getDefaultJVMPath()
jpype.startJVM(jvm_path, args)
conn = jaydebeapi.connect('com.filemaker.jdbc.Driver',
SETTINGS['SOURCE_URL'], SETTINGS['SOURCE_UID'], SETTINGS['SOURCE_PW'])
results = source_conn.jconn.getMetaData().getTables(None, None, "%", None)
#I'm not sure if this is how to read the result set, but jaydebeapi's cursor object
# has a lot of logic for getting information out of a result set, so let's harness
# that.
table_reader_cursor = source_conn.cursor()
table_reader_cursor._rs = results
read_results = table_reader_cursor.fetchall()
#get just the table names
[row[2] for row in read_results if row[3]=='TABLE']
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)