JavaFXからMySQLにアクセスできます。ただし、JavaFXはクライアントで実行され、phpのようなものは通常サーバーで実行されます。 JavaアプリからMySQLへの接続が必要になります。ホスティングプロバイダーでは、Javaクライアントアプリからデータベースポートに直接接続することは許可されていないため、他の方法で接続する必要があります。
ポート80を介してトンネリングしたり、サーブレット(またはphpサーバーコードなど)を実行して、HTTPベースのRESTインターフェースを介して着信トラフィックとプロキシデータベース呼び出しをインターセプトしたり、クライアントにローカルにDBをインストールしたりできます。
学校のプロジェクトでは、各クライアントマシンが独自のデータベースを持っていても問題ないと仮定します。この場合、MySQLを使用する代わりに、H2 のような軽量のJavaデータベースを使用してください。 、jarを依存ライブラリとして含めることにより、アプリにバンドルします。 package アプリとDBjarを、JavaFXパッケージツールを使用して署名されたWebStartアプリケーションとして使用し、ホスティングプロバイダーでパッケージツールによって生成されたファイルをホストします。
更新
これは、クライアントコンピューターでローカルH2データベースを使用するサンプルアプリケーションです。
import java.sql.*;
import java.util.logging.*;
import javafx.application.Application;
import javafx.collections.*;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.stage.Stage;
public class H2app extends Application {
private static final Logger logger = Logger.getLogger(H2app.class.getName());
private static final String[] SAMPLE_NAME_DATA = { "John", "Jill", "Jack", "Jerry" };
public static void main(String[] args) { launch(args); }
@Override public void start(Stage stage) {
final ListView<String> nameView = new ListView();
final Button fetchNames = new Button("Fetch names from the database");
fetchNames.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent event) {
fetchNamesFromDatabaseToListView(nameView);
}
});
final Button clearNameList = new Button("Clear the name list");
clearNameList.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent event) {
nameView.getItems().clear();
}
});
VBox layout = new VBox(10);
layout.setStyle("-fx-background-color: cornsilk; -fx-padding: 15;");
layout.getChildren().setAll(
HBoxBuilder.create().spacing(10).children(
fetchNames,
clearNameList
).build(),
nameView
);
layout.setPrefHeight(200);
stage.setScene(new Scene(layout));
stage.show();
}
private void fetchNamesFromDatabaseToListView(ListView listView) {
try (Connection con = getConnection()) {
if (!schemaExists(con)) {
createSchema(con);
populateDatabase(con);
}
listView.setItems(fetchNames(con));
} catch (SQLException | ClassNotFoundException ex) {
logger.log(Level.SEVERE, null, ex);
}
}
private Connection getConnection() throws ClassNotFoundException, SQLException {
logger.info("Getting a database connection");
Class.forName("org.h2.Driver");
return DriverManager.getConnection("jdbc:h2:~/test", "sa", "");
}
private void createSchema(Connection con) throws SQLException {
logger.info("Creating schema");
Statement st = con.createStatement();
String table = "create table employee(id integer, name varchar(64))";
st.executeUpdate(table);
logger.info("Created schema");
}
private void populateDatabase(Connection con) throws SQLException {
logger.info("Populating database");
Statement st = con.createStatement();
int i = 1;
for (String name: SAMPLE_NAME_DATA) {
st.executeUpdate("insert into employee values(i,'" + name + "')");
i++;
}
logger.info("Populated database");
}
private boolean schemaExists(Connection con) {
logger.info("Checking for Schema existence");
try {
Statement st = con.createStatement();
st.executeQuery("select count(*) from employee");
logger.info("Schema exists");
} catch (SQLException ex) {
logger.info("Existing DB not found will create a new one");
return false;
}
return true;
}
private ObservableList<String> fetchNames(Connection con) throws SQLException {
logger.info("Fetching names from database");
ObservableList<String> names = FXCollections.observableArrayList();
Statement st = con.createStatement();
ResultSet rs = st.executeQuery("select name from employee");
while (rs.next()) {
names.add(rs.getString("name"));
}
logger.info("Found " + names.size() + " names");
return names;
}
}
対応するNetBeansプロジェクト
があります このサンプルでは、デプロイ可能なアプリケーションが生成されます。プロジェクトは、webstart
でテストできます。 および
サンプルの場合、データベースはユーザーのコンピューター(アプリケーションのダウンロード元のサーバーではない)に保存され、アプリケーションの実行間で保持されます。
正確な場所は、jdbc接続の初期化文字列によって異なります。私のサンプルの場合、データベースはユーザーのディレクトリjdbc:h2:~/test
にあります。 、これはOSおよびユーザー固有です。私の場合、Windowsの場合はC:\Users\john_smith\test.h2.db
になります。 。 jdbc:h2:~/test
などのjdbc接続文字列を使用する jdbc:h2:C:\\Baza
などの文字列よりも望ましい C:\\
の文字列であるため その中でプラットフォーム固有であり、Windows以外のシステムではうまく機能しません。 h2 jdbc接続文字列の詳細については、h2マニュアルの接続設定を参照してください。 a> 。
h2システムは、データベースファイルがすでに存在する場合は再利用され、そうでない場合は新しいデータベースファイルが作成されるように機能します。データベースを変更し、アプリケーションをシャットダウンしてから、1週間後にアプリケーションを再度ロードすると、前の週に作成されたデータを読み取ることができます。