使用JavaFX将数据写入MySQL表

时间:2016-11-25 11:37:24

标签: java mysql sql javafx

我已经使用Netbeans中的JDBC将数据库链接到我的Java应用程序。 但每当我尝试从TextField写一些东西到MySQL表时,它都不起作用。

我有一个预制的类来建立数据库连接。

这是我的数据库类:

        package testswitch; 

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Enumeration;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Maarten 
 */

public class Database {


public final static String DB_DRIVER_URL = "com.mysql.jdbc.Driver";
public final static String DB_DRIVER_PREFIX = "jdbc:mysql://";

private Connection connection = null;

public Database(String dataBaseName, String serverURL, String userName, String passWord) {
    try {
        // verify that a proper JDBC driver has been installed and linked
        if (!selectDriver(DB_DRIVER_URL)) {
            return;
        }

        if (serverURL == null || serverURL.isEmpty()) {
            serverURL = "localhost:3306";
        }

        // establish a connection to a named Database on a specified server
        connection = DriverManager.getConnection(DB_DRIVER_PREFIX + serverURL + "/" + dataBaseName, userName, passWord);
    } catch (SQLException eSQL) {
        logException(eSQL);
    }
}

private static boolean selectDriver(String driverName) {
    // Selects proper loading of the named driver for Database connections.
    // This is relevant if there are multiple drivers installed that match the JDBC type.
    try {
        Class.forName(driverName);
        // Put all non-prefered drivers to the end, such that driver selection hits the first
        Enumeration<Driver> drivers = DriverManager.getDrivers();
        while (drivers.hasMoreElements()) {
            Driver d = drivers.nextElement();
            if (!d.getClass().getName().equals(driverName)) {
                // move the driver to the end of the list
                DriverManager.deregisterDriver(d);
                DriverManager.registerDriver(d);
            }
        }
    } catch (ClassNotFoundException | SQLException ex) {
        logException(ex);
        return false;
    }
    return true;
}

public void executeNonQuery(String query) {
        try (Statement statement = connection.createStatement()) {
        statement.executeUpdate(query);
    } catch (SQLException eSQL) {
        logException(eSQL);
    }
}

public ResultSet executeQuery(String query) {
    Statement statement;
    try {
        statement = connection.createStatement();

        ResultSet result = statement.executeQuery(query);

        return result;
    } catch (SQLException eSQL) {
        logException(eSQL);
    }

    return null;
}

private static void logException(Exception e) {
    System.out.println(e.getClass().getName() + ": " + e.getMessage());

    e.printStackTrace();
}
}

这是我的JavaFX控制器。 我想要的是,当按下“句柄”按钮时,TextField中填充的数据将被插入到数据库中。

package testswitch;

import java.io.IOException;
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 javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.CheckBox;
import javafx.scene.control.TextField;
import javafx.stage.Stage;
import testswitch.Database;

/**
 *
 * @author Maarten
 */
public class gebruikerToevoegenController {

    //TextFields
    @FXML
    private TextField FXVoornaam, FXTussenvoegsel, FXAchternaam, FXGebruikersnaam;
    @FXML
    private TextField FXWachtwoord, FXEmail, FXTelefoonnummer;

    //Boolean checkbox positie
    @FXML
    private CheckBox ManagerPosition;
    @FXML
    private Button gebruikerButton;

    public final String DB_NAME = "testDatabase";
    public final String DB_SERVER = "localhost:3306";
    public final String DB_ACCOUNT = "root";
    public final String DB_PASSWORD = "root";

    Database database = new Database(DB_NAME, DB_SERVER, DB_ACCOUNT, DB_PASSWORD);

    public void handle(ActionEvent event) throws SQLException {

        String query = "INSERT INTO testDatabase.Gebruikers (Voornaam) VALUES " + FXVoornaam.getText();
        try {
            database.executeQuery(query);

        } catch (Exception e) {

        }
    }
}

提前致谢

3 个答案:

答案 0 :(得分:0)

你必须在JavaFx中添加如下:

String query = "INSERT INTO testDatabase.Gebruikers (Voornaam) VALUES ('{FXVoornaam.getText()}') ";

答案 1 :(得分:0)

SQL查询中的字符串似乎没有被正确引用。在这种情况下,最好使用PreparedStatement

public class Database {

    public PreparedStatement prepareStatement(String query) throws SQLException {
         return connection.prepareStatement(query);
    }

    ...
public void handle(ActionEvent event) throws SQLException {

    String query = "INSERT INTO testDatabase.Gebruikers (Voornaam) VALUES (?);";
    PreparedStatement statement = database.prepareStatement(query);
    try {
        statement.setString(1, FXVoornaam.getText());
        statement.executeUpdate();
    } catch (Exception e) {
         // log info somewhere at least until it's properly tested/
         // you implement a better way of handling the error
         e.printStackTrace(System.err);
    }
}

答案 2 :(得分:0)

String query = "INSERT INTO testDatabase.Gebruikers(Voornaam) 
VALUES('" + FXVoornaam.getText() + "')";