0

大きな質問があります...データベースJavaプログラムを作成しています。

データベースが存在するかどうかを知りたいのですが、存在する場合は接続するだけで、作成しない場合は接続します。

私はこれを試しました:

if (dbName.exists() == false) {}

これがすべてのコードです...

Class.forName("com.mysql.jdbc.Driver");
System.out.println("MySQL JDBC driver loaded ok.");

これはそれのためのバックアップコードです、ただ今のために働くために....働く部分的なコード!

conn = DriverManager.getConnection(DBurl + url
+ "?createDatabaseIfNotExist=true& + "
+ "useUnicode=true&characterEncoding=utf-8&user="
+ userName + "&&password=" + password);


System.out.println("Connected to database ");           
System.out.println("Connected to the database " + url);

しかし、私は何かのようなものが欲しいです:

FILE dbName = new FILE (url);
Statement stmt = new Statement;

if (dbName.exists() == true)
   System.out.println("Database exists ! Connecting ... ");
else {
   String sql = "CREATE DATABASE "+url;
   stmt.executeUpdate (sql);
}

パスワードとユーザー名のURLを同じ場所に配置したくありません...外部から提供されているためですが、これはすでに実装され、機能しています。

したがって、2つのピースでリッピングしたいと思います。1Connect "jdbc:mysql:// localhost:3306 /"; データベース名であるURLなし...そしてデータベースが存在しない場合は、その名前で作成するだけです。

それは機能していません....else詳細を入力しておらず、Exeptionデータベースがすでに存在していると言います。

どうもありがとうございます。

4

3 に答える 3

5

MySQLデータベースの場合、次のコードが機能するはずです。他のデータベースでは異なるエラーコードが表示される場合がありますが、一般的な方法は明確である必要があります。重要なのは、最初は特定のデータベースではなく、インスタンスに接続することです。テーブルを作成するには、新しく作成したデータベースに接続する必要があります。テーブルの作成に私の例で使用しているインスタンス接続を使用することはできません。

    Connection connection = null;
    Statement statement = null;
    try {
        Class.forName("com.mysql.jdbc.Driver");
        connection = DriverManager.getConnection("jdbc:mysql://localhost/",
                "root", "admin");
        statement = connection.createStatement();
        String sql = "CREATE DATABASE DBNAME";
        //To delete database: sql = "DROP DATABASE DBNAME";
        statement.executeUpdate(sql);
        System.out.println("Database created!");
    } catch (SQLException sqlException) {
        if (sqlException.getErrorCode() == 1007) {
            // Database already exists error
            System.out.println(sqlException.getMessage());
        } else {
            // Some other problems, e.g. Server down, no permission, etc
            sqlException.printStackTrace();
        }
    } catch (ClassNotFoundException e) {
        // No driver class found!
    }
    // close statement & connection
于 2012-12-06T13:37:32.357 に答える
2

ここで何が起こっているのかをよく知らなくても、存在しないデータベースに接続しようとすると、TimeoutExceptionエラーなどがスローされます。例外をキャッチして、接続できない場合は何かを実行してください。

boolean canConnect = false;
Connection conn = null;
try{
    conn = DriverManager.getConnection(...);
    canConnect = true;
}(Exception ex){
   canConnect = false;
}

if (!canConnect){
  makeDatabase(...);
}

一日を楽しんでください!

于 2012-12-06T13:01:35.230 に答える
1
try {
        Class.forName("com.mysql.cj.jdbc.Driver");
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/", "root", "admin");
        Statement statement = connection.createStatement();
        String sql = "CREATE DATABASE IF NOT EXISTS DBNAME";
        statement.executeUpdate(sql);
    } catch (ClassNotFoundException | SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

2つのことに注意してください

  1. 新しいドライバクラスは`com.mysql.cj.jdbc.Driver'です。
  2. クエリCREATEDATABASEIF NOT EXISTS DBNAMEは、データベースが存在するかどうかを確認する必要がないことを意味します
于 2019-05-26T12:38:51.990 に答える