2009-01-31 9 views
2

J'utilise Jython 2.2.1 et MySQL Connector/J 5.1 pour accéder à une base de données MySQL. Je voudrais utiliser la méthode cursor.tables() de zxJDBC pour récupérer une liste de tables dans cette base de données. Toutefois, cette méthode renvoie toujours Aucun. Selon la documentation de zxJDBC, cursor.tables() est identique à Java DatabaseMetaData.getTables(). Lorsque j'appelle cette méthode Java de Jython, cela fonctionne comme prévu, mais l'utilisation du paquet zxJDBC ne fonctionne pas pour moi. Voici ce que j'ai essayé:Jython zxJDBC cursor.tables() renvoie toujours Aucun

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

Lorsque j'appelle ceci à partir de Jython, tout va bien.

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',)) 

La base de données de test contient deux tables appelées 'table_a' et 'table_b'. La sortie est:

Java: 
table_a 
table_b 
Python: 
None 

J'ai essayé ceci sur Linux et MacOS avec le même résultat. Avant d'essayer de comprendre ce qui ne va pas avec zxJDBC, je voulais savoir s'il y avait quelque chose de mal dans la façon dont j'utilise ce paquet.

Merci.

Répondre

2

Essayez une impression cursor.fetchall() après votre cursor.tables()

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

(testé avec Informix et Jython 2.5 beta)

je suppose:

  • cursor.tables() excelle la requête dans python
  • cursor.fetchall() renvoie les résultats
Questions connexes