0

Netbeans 7でアプリケーションを作成しています!アプリケーションに小さなコードをメインに含めて、Java DB接続を作成し、データベースと関連テーブルが存在するかどうかを確認します。存在しない場合は、データベースとテーブルを作成します。サンプルコードを提供できれば、それも同じくらい素晴らしいでしょう!すでにhttp://java.sun.com/developer/technicalArticles/J2SE/Desktop/javadb/を見ましたが、作成する前に既存のデータベースを確認する方法がまだわかりません。

4

4 に答える 4

4

アプリケーションのメインに小さなコードを追加して、Java DB 接続チェックを作成して、データベースと関連テーブルが存在するかどうかを確認し、そうでない場合はデータベースとそのテーブルを作成できるようにしたいと考えています。

create=trueプロパティを JDBC URL に追加できます。databaseNameで指定されたデータベースが接続時に存在しない場合、これにより Derby データベース インスタンスが作成されます。データベースが既に存在する場合は警告が発行されますが、私の知る限り、noSQLExceptionはスローされません。

テーブルの作成に関する限り、通常のトランザクション アクティビティでデータベースにアクセスする前に、アプリケーションの起動時にこれを行うのが最適です。テーブルが存在するかどうかを確認するには、Derby/JavaDBのSYSTABLES システム テーブルにクエリを実行する必要があります。

Connection conn;
try
{
    String[] tableNames = {"tableA", "tableB"};
    String[] createTableStmts = ... // read the CREATE TABLE SQL statements from a file into this String array. First statement is for the tableA, and so on.
    conn = DriverManager.getConnection("jdbc:derby:sampleDB;create=true");
    for(int ctr =0 ; ctr < tableNames.length; ctr++)
    {
        PreparedStatement pStmt = conn.prepareStatement("SELECT t.tablename FROM sys.systables t WHERE t.tablename = ?");
        pStmt.setString(1, tableNames[ctr]);
        ResultSet rs = pStmt.executeQuery();
        if(!rs.next())
        {
            // Create the table
            Statement stmt = conn.createStatement();
            stmt.executeUpdate(createTableStmts[ctr]);
            stmt.close();
        }
        rs.close();
        pStmt.close();
    }
}
catch (SQLException e)
{
    throw new RuntimeException("Problem starting the app...", e);
}

存在しないテーブルが作成される可能性があります。もちろん、アプリケーションに複数のバージョンがあり、スキーマがアプリケーションのバージョンごとに異なる場合、これは良い方法ではありません。このようなシナリオを処理する必要がある場合は、アプリケーションのバージョンを個別のテーブル (通常はバージョン間で変更されません) に格納し、新しいバージョンに固有のデータベース デルタ スクリプトを適用して、データベースを古いバージョンから移行する必要があります。 . DbDeployLiquiBaseなどのデータベース変更管理ツールを使用することをお勧めします。内部では、ツールはアプリケーションのバージョン番号をテーブルに格納することで同じ操作を実行し、データベース内のバージョンよりも新しいバージョンを持つデルタ スクリプトを実行します。

最後に、 JavaDB と Apache Derbyの間に大きな違いはありません。

于 2011-10-12T05:22:48.767 に答える
0

オラクルが Derby をブランド変更する前にどれだけ変更したかはわかりませんが、あまり変更されていない場合は、 Derby DB のすべてのテーブルを削除することで解決できる可能性があります。その質問への回答には、データベース内に存在するテーブルを確認するいくつかの方法がリストされています。

DB 接続を作成するときにデータベースを指定します。そうしないと、接続が正常に作成されません。(これの正確な構文は、データベースへの接続方法次第ですが、そのロジックはシュリーの回答と同じです。)

于 2011-10-12T04:14:53.580 に答える
0

このcreate=trueプロパティは、存在しない場合、新しいデータベースを作成します。DatabaseMetadata.getTables()メソッドを使用して の存在を確認できますTables

Connection cn=DriverManager.getConnection("jdbc:derby://localhost:1527/testdb3;create=true", "testdb3", "testdb3");

ResultSet mrs=cn.getMetaData().getTables(null, null, null, new String[]{"TABLE"});

while(mrs.next())
 {
  if(!"EMP".equals(mrs.getString("TABLE_NAME")))
   {
    Statement st=cn.createStatement(); 
    st.executeUpdate("create table emp (eno int primary key, ename varchar(30))");
    st.close();;
   }
}
mrs.close();
cn.close();
于 2011-10-12T04:54:01.997 に答える
-2
Connection conn = getMySqlConnection();
    System.out.println("Got Connection.");
    Statement st = conn.createStatement();

    String tableName = ur table name ;
    String query = ur query;
    Statement stmt = null;
    ResultSet rs = null;
    try {
      stmt = conn.createStatement();
      rs = stmt.executeQuery(query);
      System.out.println("Exist");;
    }
    catch (Exception e ) {
      // table does not exist or some other problem
      //e.printStackTrace();
      System.out.println("Not Exist");
    }

    st.close();
    conn.close();
于 2011-10-12T04:04:24.037 に答える