26

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

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

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

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

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

4

5 に答える 5

3

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;
    }
}
}
于 2014-03-04T16:24:22.063 に答える
1

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 とリレーション データベースを使用している場合は、JPA を強くお勧めします。それ以外の場合は、JDBC を使用してデータベースと対話し、SQL を使用しています。
  2. 伝統的に、ユーティリティを使用するか、スクリプトを実行してテーブル スキーマを作成しますが、埋め込みを使用する場合は、db とスキーマに動的に作成させることに興味があるかもしれません。したがって、このスクリプトを実行する必要はありません。アプリケーションをインストールするたびに。これは、チュートリアルでカバーされている derby の組み込み JPA 構成で実行できます。
  3. 組み込み derby データベースを実行している場合、起動する別のスレッドやソケットはありません。アプリは、ファイル ロックを使用して derby ファイルにアクセスする jpa または derby api を使用します。私の定義では、組み込みデータベースには、複数のリクエストを処理するソケットをリッスンする個別のスレッドまたはプロセスはありません。

これが役に立てば幸いです。幸運を祈ります!

于 2012-08-31T21:33:23.230 に答える
-1

これらのブログの URL は非常に素晴らしいですがClientDriver、Java Derby ドライバーの d バージョンを使用し、起動時にデータベースを自動的に起動するクラスまたはメソッドを作成しても、OP を NetBeans に切り替えることをお勧めします。SQLException実行時に発生し、機能しています。クラスを使用NetworkServerControlして実行時にデータベースを起動しますが、dizのようになります

NetworkServerControl server=new NetworkServerControl(InetAddress.getLocalHost(),1527);
server.start (null);
//Class.forName n DriverManager.getConnection() declarations goes here. 
于 2013-11-23T14:07:52.337 に答える