私は現在、Javaとスウィングを学習している最中です。そのため、デスクトップアプリを作成しようとしています。
このアプリの一部として、アプリが接続されているmysqlデータベースをセットアップしましたが、他のユーザーにアプリを配布する場合にこれがどのように機能するか、データベースをどのように作成するかは不明ですmySQLがインストールされていないか、データベースが開始されていない場合は、システムで使用できます。
Pvgが述べたように、使用するのに適したオプションは組み込みデータベースです。ここでの理由は、データベースをシステムのユーザーにインストールする必要はなく、単一のJARファイルとして含めることができるためです。通常、標準のJDBC APIを使用してデータベースにアクセスできるので、現在のMySQL DBの代わりとして機能することができます。ライブラリはDBファイルの作成を管理するため、何もインストールする必要はありません。
もちろん、これらのオプションは通常、Oracleのようなものよりも堅牢ではありませんが、ニーズにぴったり合う場合があります。
たとえば、私は最近、H2データベース、100%Java埋め込みDB、私のプロジェクトで使用しました。 http://www.h2database.com/html/main。 html
接続オブジェクトを取得する場合にH2などの使用がMySQLとどのように異なるかを示すコードの例を次に示しますが、クエリを実行するためのDBとの対話はMySQLと同じです。
import org.h2.jdbcx.JdbcDataSource;
import Java.sql.*;
/**
* Sets and returns a DB connection, if not already done
*/
private static Connection getDBConnection() {
if (mDBConnection != null)
return mDBConnection;
Connection conn = null;
try {
JdbcDataSource ds = new JdbcDataSource();
ds.setURL("jdbc:h2:C:/MyDBDirectory/");
conn = ds.getConnection();
} catch (SQLException e) {
mLogger.severe("Error opening DB connection or creating tables: " + e.getMessage());
}
mDBConnection = conn;
return mDBConnection;
}
アプリに埋め込んで配布できる多くの組み込み可能な純粋なJava SQL dbsの1つを調べる必要があります。既存のSQLは、そのまままたは小さな変更を加えたもので動作するはずです。で:
そして
単に学習している場合は、最初に展開の詳細を片側に置き、データベースが常に存在し、常に正しい形式であると想定することをお勧めします。アプリケーションがある程度満足できる状態になったら、データベースに関する懸念に対処できます。
これらの懸念事項に対処する場合、一般的なアプローチは、アプリケーションがデータベースセットアップスクリプトを持つことです。これは、テーブル、インデックス、権限などを作成するためのSQLステートメントのセットになります。JDBCを使用していると仮定すると、アプリケーション設定では、JDBC接続の詳細(JDBC Url、ユーザー名、パスワードなど)を指定する必要があります。アプリケーションはこのソースに接続してから、セットアップスクリプトを実行する必要があります。
セットアップスクリプトの注意点の1つは、データベースの状態に関係なく機能することです。フォームのステートメントがたくさんあるとします
CREATE TABLE FOO (id int....)
テーブルFOOがすでに存在する場合、SQLExceptionが発生しますが、これをキャッチして無視する必要があります(ただし、テーブルが存在する特定の場合のみ、他のエラーは無視できません)。
アプリケーションの新しいバージョンでFOOの定義が少し異なる必要があるとします。その場合、CREATEステートメントを変更するだけでなく、元のCREATEステートメントの後にいくつかのALTERステートメントを続ける必要があります。
このアプローチは、アプリケーションがJDBCデータソースに接続できることを前提としています。 MySQL、Postgres、Oracle、SQL ServerなどのスタンドアロンDBMSを使用するアプリケーションを計画している場合は、DBMSのインストールをアプリケーションのユーザーの責任で行うことを検討します。ユーザーは、JDBC URLが何であるかを理解し、それをアプリケーションに提供する必要があります。
ユーザーがDBMSをインストールする必要がないようにしたい場合は、純粋なJava DBMSをアプリケーションに埋め込むことができます。JavaDB(別名Derby)がその一例です。HSQLDBおよびH2も使用できます。 Derbyを例にとると、アプリケーションにderbyライブラリ(jar)を含める必要があり、アプリケーションは起動時にデータベースを作成する必要があります。「組み込みモード」でDerbyを使用している場合URLは次のようになります。
jdbc:derby:/ home/fred/myapplicationdb
私が覚えている限り、Derbyライブラリーは、データベースが存在しない場合に作成します。
デスクトップアプリケーションの場合、通常、エンドユーザーが必要とするすべてのものを1つのパッケージで提供する方が適切です。エンドユーザーは依存関係の要件を嫌う傾向があります。これは、1日を完全に台無しにするには、同じバージョンの異なるバージョンを必要とする1つまたは2つの競合するパッケージしか必要としないためです。
シングルユーザーアプリケーションの場合は、おそらく組み込みデータベースを使用するのが最善です。実際、JDKの最近のリリース(6以降)には、1つ( JavaDB 、別名Apache Derby)が含まれています。
また、コンピューターでデータベースサーバーを保守することは簡単な作業ではないことにも注意してください。アプリケーションにその負担を加えた場合、エンドユーザーがアプリケーションに迷惑をかけると本当に思うかどうかを自問してください。サーバーはシステムリソースも消費します。つまり、エンドユーザーは、システムが不必要に肥大化していると感じるか、アプリケーションを使用するためにサーバーを停止および開始するタスクで立ち往生します。
エンドユーザーが使用している環境がわからない場合は、埋め込み可能なDBエンジンをアプリケーションにバンドルし、それをデフォルトとして使用し、ユーザーが外部データベースへの接続を設定するオプションを許可することをお勧めします。彼らは好む。個々のエンドユーザーは、たとえばDerby/JavaDBを使用でき、パワーユーザーやネットワーク化されたマルチユーザーの顧客は、MySQLやOracleなどのデータベースサーバーに接続できます。ここでの欠点は、SQLの使用状況を監視して、サポートされているすべてのデータベースエンジンで機能するようにするか、抽象化ライブラリを使用する必要があることです。