jpype 사용 - JDBC 메타 데이터 기능에 액세스하려면 어떻게해야합니까?

StackOverflow https://stackoverflow.com//questions/21027904

  •  21-12-2019
  •  | 
  •  

문제

JPype를 사용하여 FileMaker의 JDBC 드라이버를로드하고 데이터를 가져 오는

그러나 데이터베이스에서 모든 테이블 의 목록을 가져 오기를 원합니다.

JDBC 문서 (55 페이지)다음 기능을 나열합니다.

JDBC 클라이언트 드라이버는 다음 메타 데이터 기능을 지원합니다.

getColumns

getColumnPrivileges

getMetaData

getTypeInfo

gettables

getTableTypes

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()
.

업데이트 :

여기에 몇 가지 진전이 있으며 작동하는 것처럼 보이지만 아래 오류가 발생합니다.어떤 아이디어도 있습니까?

> conn.jconn.metadata.getTables()
*** RuntimeError: No matching overloads found. at src/native/common/jp_method.cpp:121
.

도움이 되었습니까?

해결책

OK, 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']
.

다른 팁

ResultSet Javadoc :

public ResultSet getTables(String catalog,
                       String schemaPattern,
                       String tableNamePattern,
                       String[] types)
                throws SQLException
.

4 개의 매개 변수를 메서드에 전달해야합니다.나는 파이썬 개발자가 아니지만 Java에서는 다음을 사용합니다.

ResultSet rs = metadata.getTables(null, "public", "%" ,new String[] {"TABLE"} );
.

스키마의 모든 테이블 (및 테이블 만)을 가져옵니다.

감사합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top