Mysql
 sql >> база данни >  >> RDS >> Mysql

javafx връзка с mysql

Можете да получите достъп до MySQL от JavaFX. Но JavaFX работи на клиент и нещо като php обикновено работи на сървър. Ще ви е необходима връзка от вашето java приложение към MySQL. Тъй като вашият доставчик на хостинг няма да ви позволи да се свържете директно с порта на базата данни от вашето Java клиентско приложение, ще ви е необходим друг начин за свързване.

Можете да тунелирате през порт 80, можете да стартирате сървлет (или php сървърен код и т.н.) за прихващане на входящия трафик и извиквания на прокси база данни чрез HTTP базиран REST интерфейс или бихте могли да инсталирате DB локално на клиента.

Предполагам, че за училищен проект е добре всяка клиентска машина да има своя собствена база данни. В този случай, вместо да използвате MySQL, използвайте лека база данни на Java като H2 , свържете го с приложението си, като включите неговия jar като зависима библиотека, пакет приложението плюс DB jar като подписано приложение WebStart, използващо инструментите за опаковане на JavaFX и хоствайте файловете, генерирани от инструментите за опаковане, във вашия хостинг доставчик.

Актуализиране

Ето примерно приложение, което използва локална база данни 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:\Users\john_smith\test.h2.db . Използване на низ за връзка jdbc като jdbc:h2:~/test е за предпочитане пред низ като jdbc:h2:C:\\Baza защото низ с C:\\ в него е специфично за платформата и няма да работи добре на системи извън Windows. За допълнителна информация относно низовете за връзка h2 jdbc вижте настройките за връзки в ръководството за h2 .

Системата h2 работи така, че ако файлът на базата данни вече съществува, той се използва повторно, в противен случай се създава нов файл на базата данни. Ако модифицирате базата данни, затворите приложението и след това заредите приложението отново седмица по-късно, то може да прочете данните, създадени предходната седмица.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да конвертирате epoch в mySQL timestamp в JAVA

  2. MYSQL - Подредете стойностите на времевата марка във възходящ ред, от най-новите към най-старите?

  3. Как да спра десетичното поле на MySQL да бъде закръглено?

  4. Mysql подреждане по конкретни стойности на ID

  5. Използване на MySql с Entity Framework 4 и Code-First Development CTP