javafx连接到mysql

本教程将介绍javafx连接到mysql的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

javafx连接到mysql 教程 第1张

问题描述

我们正在构建 javafx 应用程序,它将显示有关股票的信息.这是网站:http://analiza.host-ed.me/

但是我们遇到了一个大问题.每个免费主机都不允许远程 mysql 连接.还有我的问题.当我们的网站在服务器上(我链接的)是远程连接还是本地连接?当我们将此 javafx 应用程序作为站点时,它无法像在本地计算机上一样连接...有什么解决办法吗?感谢帮助.(我们需要使用免费托管,因为它只是一个学校项目..)

推荐答案

您可以从 JavaFX 访问 MySQL.但是 JavaFX 在客户端上运行,而 php 之类的东西通常在服务器上运行.请问需要从您的 Java 应用程序连接到 MySQL.由于您的托管服务提供商不允许您从 Java 客户端应用程序直接连接到数据库端口,因此请问需要其他一些连接方式.

您可以通过端口 80 进行隧道传输,可以运行 servlet(或 php 服务器代码等)以通过基于 HTTP 的 REST 接口拦截传入流量和代理数据库调用,或者您可以在客户端本地安装数据库.

我将假设,对于学校项目,每台客户端计算机都可以拥有自己的数据库.在这种情况下,不要使用 MySQL,而是使用轻量级 Java 数据库,例如 H2,捆绑它通过将其 jar 作为依赖库包含在您的应用中,打包应用加上使用 JavaFX 打包工具将 DB jar 作为签名的 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 中,该目录是操作系统和用户特定的.对于 Windows 的我来说,它最终位于 C:Usersjohn_smith est.h2.db.使用诸如 jdbc:h2:~/test 之类的 jdbc 连接字符串优于使用诸如 jdbc:h2:C:Baza 之类的字符串,因为带有 的字符串>C: 是特定于平台的,在非 Windows 系统上无法正常工作.有关 h2 jdbc 连接字符串的更多信息,请参阅 h2 手册中的连接设置.

h2 系统的工作原理是,如果数据库文件已经存在,则重新使用它,否则会创建一个新的数据库文件.如果您修改数据库,关闭应用程序,然后在一周后再次加载应用程序,它能够读取前一周创建的数据.

好了关于javafx连接到mysql的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。