web-dev-qa-db-ja.com

スタンドアロンJavaアプリケーションで組み込みDerbyデータベースをセットアップする

スタンドアロンのJavaアプリケーション用の組み込みDerbyデータベースをセットアップしようとしていますが、あらゆる種類のドキュメントを調べた後、簡単な説明や例が見つからないようです。 m DerbyプラグインでEclipseを使用し、私のプロジェクトでDerbyの性質を有効にしました。

スタンドアロンアドレス帳 で組み込みDerbyデータベースを使用する例と、EclipseでDerbyを使用する概要(組み込み展開をカバーしていないようです)を見つけましたが、基本的なものが欠けています。

Javaでデータベースを使用しようとするのはこれが初めてであり、少し混乱しているため、基本的な質問を次に示します。

  • JavaがDerbyデータベースと(組み込み展開で)対話する方法の基本的な哲学(またはモデル)は何ですか?その重要な設計パターンは守られますか?
  • クラスに何らかのタイプのデータベースコンストラクター(テーブル構造などを含む)を作成する必要がありますか、それとも他のツールですべて実行されますか?
  • データベースが作成されて保存された場合、どのように「起動」できますか?実際のデータベースはどこに保存されますか?

コードのスニペットは非常に役立ちます!

24
Clark Minor

埋め込みモードでJavaでDerbyを使用するには、次の手順を実行する必要があります。

  • derbyclient Maven依存関係にある_org.Apache.derby.jdbc.EmbeddedDriver_ドライバーを使用します
  • 埋め込みモードの接続文字列を使用します:_jdbc:derby:dbname_
  • Derbyシステムのホームをセットアップします:System.setProperty("derby.system.home", "/home/janbodnar/.derby");
  • 最後にプログラムでDerbyをシャットダウンします:DriverManager.getConnection("jdbc:derby:;shutdown=true");
  • 正常なシャットダウン時にトリガーされるXJ015エラーを処理します

完全な作業例は、私の Java JDBC Derbyプログラミングチュートリアル にあります。

2
Jan Bodnar

ConnectionDerbyという名前のクラスを使用することをお勧めします。このクラスでは、すべてのロジックとパラメーターを選択、挿入、更新、削除し、組み込みデータベースとして、データベースが既に存在する場合は補完し、存在しない場合は作成します。コードはあなたを助け、申し訳ありませんが私の英語と私はJavaでこのデータベースを使用している初心者ですが、これがあなたの理解に役立つことを願っています...

import Java.sql.Connection;
import Java.sql.DriverManager;
import Java.sql.PreparedStatement;
import Java.sql.ResultSet;
import Java.sql.SQLException;
import Java.sql.Statement;
import javax.swing.JOptionPane;

public class ConnectionDerby {

    private Connection conn = null;
    private Statement sttm = null;

    public Connection CrearBD(String query) {
    try {
        //Obtenemos el Driver de Derby
        Class.forName("org.Apache.derby.jdbc.EmbeddedDriver");
        conn = DriverManager.getConnection("jdbc:derby:.\\BD\\nombrebasededatos.db;create=true");
        if (conn != null) {
            //JOptionPane.showMessageDialog(null, "Base de Datos Lista");
            try {
                PreparedStatement pstm = conn.prepareStatement(query);
                pstm.execute();
                pstm.close();
                //JOptionPane.showMessageDialog(null, "Base de Datos Creada Correctamente");
                System.out.println("SENTENCIA SQL EFECTUADA CORRECTAMENTE");
            } catch (SQLException ex) {
                //JOptionPane.showMessageDialog(null, ex.getLocalizedMessage());
                System.out.println(ex.getMessage());
                JOptionPane.showMessageDialog(null, "NO SE PUDO EFECTUAR LA SENTENCIA SQL", "Error", JOptionPane.ERROR_MESSAGE);
                //JOptionPane.showMessageDialog(null, "NO SE PUDO EFECTUAR LA SENTENCIA SQL");
            }
        }

    } catch (SQLException e) {
        System.out.println(e.getMessage());
        JOptionPane.showMessageDialog(null, "NO SE PUDO EFECTUAR LA SENTENCIA SQL", "Error", JOptionPane.ERROR_MESSAGE);
        //JOptionPane.showMessageDialog(null, "TRONO LA APLICACION EN EJECUTAR LAS SENTENCIAS SQL parte 2");
    } catch (ClassNotFoundException e) {
        System.out.println(e.getMessage());
        JOptionPane.showMessageDialog(null, "NO SE PUDO EFECTUAR LA SENTENCIA SQL", "Error", JOptionPane.ERROR_MESSAGE);
        //JOptionPane.showMessageDialog(null, "TRONO LA APLICACION EN EJECUTAR LAS SENTENCIAS SQL parte 3");
    }
    return conn;
}

public Connection AccederBD() {
    try {
        //Obtenemos el Driver de Derby
        Class.forName("org.Apache.derby.jdbc.EmbeddedDriver");
        //Obtenemos la Conexión
        conn = DriverManager.getConnection("jdbc:derby:.\\BD\\nombrebasededatos.db");
        if (conn != null) {
            System.out.println("Base de Datos Ya Leida Correctamente");
            //JOptionPane.showMessageDialog(null, "Base de Datos Ya Leida Correctamente");
        }
    } catch (SQLException e) {
        System.out.println(e.getMessage());
        System.out.println("Sistema Creado por Mario José Echeverría");
        System.out.println("NO SE ENCONTRO LA BASE DE DATOS");
        System.out.println("CREANDO BASE DE DATOS EN DERBY DATABASE");
        String createTableProyecto = "Sentence to create first table";
        String createTablePrimer = "Sentence to create second table";
        String createTableTopCoat = "Sentence to create third table";
        String createTableCotizacion = "Sentence to create fourth table";
        CrearBD(createTableProyecto);
        CrearBD(createTablePrimer);
        CrearBD(createTableTopCoat);
        CrearBD(createTableCotizacion);
        //*************PRUEBAS*****************
    } catch (ClassNotFoundException e) {
        System.out.println(e.getMessage());
        System.out.println("ERROR DE TIPO ClassNotFoundException");
        //JOptionPane.showMessageDialog(null, "TRONO LA APLICACION EN ACCEDER A LA BASE DE DATOS parte 2");
    }
    return conn;
}

public void UID(String sqlcad) {
    try {
        //Obtenemos el Driver de Derby
        Class.forName("org.Apache.derby.jdbc.EmbeddedDriver");
        conn = DriverManager.getConnection("jdbc:derby:.\\BD\\nombrebasededatos.db");
        sttm = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
        sttm.executeUpdate(sqlcad);
        System.out.println("Conexión Exitosa a la Base de Datos");
        //JOptionPane.showMessageDialog(null, "Conexión exitosa");
        sttm.close();
        conn.close();
        if (conn != null) {
            System.out.println("Consulta Realizada Correctamente");
            //JOptionPane.showMessageDialog(null, "Base de Datos Ya Leida Correctamente");
        }
    } catch (SQLException e) {
        System.out.println("Error= " + e.getMessage());
    } catch (ClassNotFoundException e) {
        System.out.println("Error= " + e.getMessage());
    }
}

public ResultSet getvalores(String sqlcad) {
    ResultSet rs = null;
    try {
        Class.forName("org.Apache.derby.jdbc.EmbeddedDriver");
        conn = DriverManager.getConnection("jdbc:derby:.\\BD\\nombrebasededatos.db");
        sttm = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
        //String sqlcad = "Select nombre, m2xgal, pregal, precub, descripcion from primer";
        rs = sttm.executeQuery(sqlcad);
        return rs;
    } catch (Exception e) {
        System.out.println("Error= " + e.getMessage());
        return rs;
    }
}
}
2
Mario

Netbeans IDEに切り替えても問題ない場合は、ideで作業することができた2つの便利なチュートリアルがあります(インストーラーに小さな問題があります)。 JPAは、多くのデータベース相互作用を単純化する抽象化です。

https://blogs.Oracle.com/geertjan/entry/embedded_database_for_netbeans_platform

http://platform.netbeans.org/tutorials/nbm-crud.html

お問い合わせの一部に対処するには:

  1. Java and relation dbsを使用している場合、JPAを強くお勧めします。それ以外の場合は、JDBCを使用してデータベースと対話し、SQLを使用しています。
  2. 従来、ユーティリティを使用するか、スクリプトを実行してテーブルスキーマを作成しますが、埋め込みを使用するため、dbおよびスキーマを使用して動的に作成することに興味があるため、このスクリプトを実行する必要はありませんアプリケーションをインストールするたびに。これは、チュートリアルで説明しているダービーの組み込みJPA構成で実行可能です。
  3. 組み込みのダービーデータベースを実行している場合、起動する別個のスレッドまたはソケットはありません。アプリは、ファイルロックを使用してダービーファイルにアクセスするjpaまたはderby apiを使用します。私の定義では、組み込みデータベースには、複数の要求を処理するソケットをリッスンする個別のスレッドまたはプロセスがありません。

これがお役に立てば幸いです!

1
simgineer

私は一度ダービーをやったことはなく(mysqlを一度しました)、すべてが この単純な例 から始まりました。実際、私はこの講演を読みさえしませんでした-自明の例がある真ん中までスクロールしました。

0
Vit Bernatik

これらのブログn urlは非常に素晴らしいものですが、d ClientDriverバージョンのJava Derbyドライバーを使用し、クラスまたはメソッドを作成する場合でも起動時にデータベースを自動的に起動して、実行時にSQLExceptionが検出されないようにします。実行時にデータベースを起動するにはNetworkServerControlクラスを使用しますがディズのように行く時間

NetworkServerControl server=new NetworkServerControl(InetAddress.getLocalHost(),1527);
server.start (null);
//Class.forName n DriverManager.getConnection() declarations goes here. 
0
danes