1

mysql にいくつかの DB があり、それらすべてにいくつかの列を持ついくつかのテーブルが含まれています。スタック オーバーフローの回答から以下のコードを取得しました。答えは次のとおりです: Java で SQL テーブルの存在を検出するにはどうすればよいですか?

コードは出力を提供します-

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

2 に答える 2

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 テーブルのリストが表示されます。

于 2012-07-28T12:39:47.023 に答える
1

このコードは、すべての DB のすべてのテーブルではなく、特定のデータベースのテーブルを表示するために使用されます。urlStringでデータベースを指定していないため、何も表示されません。

リンクされた質問への回答に使用されるリンクを注意深く見るString url = "jdbc:hsqldb:data/tutorial";と、最初にデータベースに接続する必要があることがわかります。

PS : jdbc4 より前のドライバーを使用する場合は、ドライバーをロードする必要がある場合Class.forName("com.mysql.jdbc.Driver");があります。

于 2012-07-28T09:57:01.730 に答える