Question

J'utilise Jaydeapi qui utilise JPYPY pour charger le pilote JDBC de FileMaker et tirer les données.

Mais je veux aussi être capable de Obtenir une liste de toutes tables dans la base de données.

dans le Documentation JDBC (page 55)Il répertorie les fonctions suivantes:

Le pilote client JDBC prend en charge les fonctions de métadonnées suivantes:

getcolumns

getcolumnprivileges

GETMETADATA

gettypeinfo

Gettables

getTableTypes

Des idées Comment je pourrais les appeler de JPYPY ou JAYDEBEAPI?

Si cela aide, voici mon code actuel:

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

mise à jour:

Voici quelques progrès et il semble que cela fonctionne, mais je reçois l'erreur ci-dessous.Des idées?

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

Était-ce utile?

La solution

OK, merci à Eltabo et à Juan Mellado, je l'ai compris!

J'ai juste dû passer les paramètres corrects pour correspondre à la signature de la méthode.

Voici le code de travail:

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']

Autres conseils

de Resulatset Javadoc:

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

Vous avez besoin de passer le paramètre quatre sur la méthode.Je ne suis pas un développeur python, mais en Java, j'utilise:

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

Pour obtenir toutes les tables (et uniquement les tables) dans un schéma.

Cordialement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top