2012-07-28 69 views
0

我在mysql中有几个DB,并且它们都包含一些带有几列的表。我从堆栈溢出答案中得到了下面的代码。 答案是在: How can I detect a SQL table's existence in Java?程序无一例外地运行,但没有显示表名

的代码给出了输出 -

Driver Loaded. 
Got Connection. 

代码 -

import java.sql.Connection; 
import java.sql.DatabaseMetaData; 
import java.sql.DriverManager; 
import java.sql.ResultSet; 
import java.sql.Statement; 

public class Main { 
    public static void main(String[] args) throws Exception { 
DatabaseMetaData md = conn.getMetaData(); 
ResultSet rs = md.getTables(null, null, "%", null); 
while (rs.next()) { 
    System.out.println(rs.getString(3)); 
} } 

    static Connection conn; 

    static Statement st; 

    static { 
try { 
    // Step 1: Load the JDBC driver. 
    System.out.println("Driver Loaded."); 
    // Step 2: Establish the connection to the database. 
    String url = "jdbc:mysql://localhost:3306/"; 

    conn = DriverManager.getConnection(url, "cowboy", "123456"); 
    System.out.println("Got Connection."); 

    st = conn.createStatement(); 
} catch (Exception e) { 
    System.err.println("Got an exception! "); 
    e.printStackTrace(); 
    System.exit(0); 
} 
    } 
} 

回答

0

该代码用于显示特定数据库的表,而不是所有的表的所有数据库。您不需要在url字符串中指定任何数据库,因此无需显示任何内容。

如果仔细查看用于回答链接问题的link,则可以看到String url = "jdbc:hsqldb:data/tutorial";因此,您必须首先连接到数据库。

PS:如果您在jdbc4之前使用驱动程序,则可能需要加载驱动程序:Class.forName("com.mysql.jdbc.Driver");并确保该驱动程序在类路径中可用。

+0

我从来没有在我的代码中使用Class.forName(“xxxx”)。我总是添加驱动程序jar文件来构建路径和我的代码工作。这是一个很好的做法吗? – 2012-07-28 22:07:31

+0

@sweetdreams如果您在jdbc4之前使用驱动程序,则必须:“在类路径中找到的任何JDBC 4.0驱动程序都会自动加载。 (但是,您必须使用方法Class.forName手动加载JDBC 4.0之前的任何驱动程序。)(http://docs.oracle.com/javase/tutorial/jdbc/basics/connecting.html) – 2012-07-28 23:48:00

+0

@sweetdreams由你的主要问题在于你必须在url中指定你想要连接的数据库。 – 2012-07-28 23:50:02

2

在你的代码只

System.out.println("Driver Loaded."); 

这还不够。 您必须先加载驱动程序!

Class.forName("com.mysql.jdbc.Driver"); 
System.out.println("Driver Loaded."); 

我很惊讶,这个工程

conn = DriverManager.getConnection(url, "cowboy", "123456"); 

和你来这行代码。

System.out.println("Got Connection."); 

用下面的代码,它会去,但你不会得到表

static { 
    try { 
     // Step 1: Load the JDBC driver. 
     Class.forName("com.mysql.jdbc.Driver"); 
     System.out.println("Driver Loaded."); 
     // Step 2: Establish the connection to the database. 
     String url = "jdbc:mysql://localhost"; 

     conn = DriverManager.getConnection(url,"user","passw"); 
     System.out.println("Got Connection."); 
     .... 
     } 
} 

正确设置数据库名称

static { 
     try { 
     // Step 1: Load the JDBC driver. 
     Class.forName("com.mysql.jdbc.Driver"); 
     System.out.println("Driver Loaded."); 
     // Step 2: Establish the connection to the database. 
     String url = "jdbc:mysql://localhost/myDataBase"; 
     conn = DriverManager.getConnection(url,"user","passw"); 
     System.out.println("Got Connection."); 
     .... 
     } 
} 

,您可以列表看到你的myDataBase表的列表。

+0

我看不到任何需要Class.forName(“com.mysql.jdbc。驱动程序“); 我的其他代码在没有它的情况下也能正常工作。我试着把这条线。仍然没有成功。怎么办 ? – 2012-07-28 22:53:32

+0

String url =“jdbc:mysql:// localhost/myDataBase”;用您的数据库 – 2012-07-28 23:53:26

+0

的名称替换myDataBase,这是没有必要的。代码也可以没有这个工作。 – 2012-07-30 03:33:29

相关问题