Skip to content

Instantly share code, notes, and snippets.

@julianjupiter
Last active September 21, 2024 19:27
Show Gist options
  • Save julianjupiter/407352f2c8623c9a1854a73488afd50e to your computer and use it in GitHub Desktop.
Save julianjupiter/407352f2c8623c9a1854a73488afd50e to your computer and use it in GitHub Desktop.
Sample JavaFX application with MySQL JDBC operation.
package io.github.julianjupiter.javafx;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Database
* @author Julian Jupiter
*
*/
public class Database {
private static final Logger logger = Logger.getLogger(Database.class.getName());
private static final String DB_DRIVER = "com.mysql.cj.jdbc.Driver";
private static final String DB_CONNECTION = "jdbc:mysql://localhost/javafxsample";
private static final String DB_USER = "root";
private static final String DB_PASSWORD = "admin";
private Database() {
}
public static Connection getDBConnection() throws SQLException {
Connection connection = null;
try {
Class.forName(DB_DRIVER);
} catch (ClassNotFoundException exception) {
logger.log(Level.SEVERE, exception.getMessage());
}
try {
connection = DriverManager.getConnection(DB_CONNECTION, DB_USER, DB_PASSWORD);
return connection;
} catch (SQLException exception) {
logger.log(Level.SEVERE, exception.getMessage());
}
return connection;
}
}
-- 1. Create first this database to your MySQL server:
create database javafxsample;
use javafxsample;
create table if not exists user(
id int(11) not null auto_increment,
username varchar(255) not null unique,
last_name varchar(255) not null,
first_name varchar(255) not null,
password varchar(255) not null,
created_at datetime not null default current_timestamp,
primary key(id)
);
-- 2. Add mysql-connector-java-6.0.6.jar to your dependencies.
-- 3. Update database credentials in Database.class.
package io.github.julianjupiter.javafx;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Alert.AlertType;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.PasswordField;
import javafx.scene.control.TextField;
import javafx.scene.layout.GridPane;
import javafx.scene.layout.HBox;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class JApps extends Application {
private static final Logger logger = Logger.getLogger(JApps.class.getName());
private UserDao userDao = new UserDao();
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("JavaFX Welcome");
GridPane grid = new GridPane();
grid.setAlignment(Pos.CENTER);
grid.setHgap(10);
grid.setVgap(10);
grid.setPadding(new Insets(25, 25, 25, 25));
Text scenetitle = new Text("Add User");
scenetitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));
grid.add(scenetitle, 0, 0, 2, 1);
Label userNameLabel = new Label("Username:");
grid.add(userNameLabel, 0, 1);
TextField usernameTextField = new TextField();
grid.add(usernameTextField, 1, 1);
Label lastNameLabel = new Label("Last Name:");
grid.add(lastNameLabel, 0, 2);
TextField lastNameTextField = new TextField();
grid.add(lastNameTextField, 1, 2);
Label firstNameLabel = new Label("First Name:");
grid.add(firstNameLabel, 0, 3);
TextField firstNameTextField = new TextField();
grid.add(firstNameTextField, 1, 3);
Label passwordLabel = new Label("Password:");
grid.add(passwordLabel, 0, 4);
PasswordField passwordField = new PasswordField();
grid.add(passwordField, 1, 4);
Button saveButton = new Button("Save");
HBox hBox = new HBox(10);
hBox.setAlignment(Pos.BOTTOM_RIGHT);
hBox.getChildren().add(saveButton);
grid.add(hBox, 1, 5);
saveButton.setOnAction(actionEvent -> {
String username = usernameTextField.getText().trim();
String lastName = lastNameTextField.getText().trim();
String firstName = firstNameTextField.getText().trim();
String password = passwordField.getText();
if (!StringPool.BLANK.equals(username) && !StringPool.BLANK.equals(lastName)
&& !StringPool.BLANK.equals(firstName) && !StringPool.BLANK.equals(password)) {
try {
if (!userDao.userExists(username)) {
User user = this.createUserObject(username, lastName, firstName, password);
int userId = userDao.saveUser(user);
if (userId > 0) {
this.alert("Save", "Successful!", AlertType.INFORMATION);
} else {
this.alert("Error", "Failed!", AlertType.ERROR);
}
} else {
this.alert("Error", "User already exists!", AlertType.ERROR);
}
} catch (Exception exception) {
logger.log(Level.SEVERE, exception.getMessage());
}
} else {
this.alert("Error", "Please complete fields!", AlertType.ERROR);
}
});
Scene scene = new Scene(grid, 300, 275);
primaryStage.setScene(scene);
primaryStage.show();
}
public void alert(String title, String message, AlertType alertType) {
Alert alert = new Alert(alertType);
alert.setTitle(title);
alert.setHeaderText(null);
alert.setContentText(message);
alert.showAndWait();
}
public User createUserObject(String username, String lastName, String firstName, String password) {
User user = new User();
user.setUsername(username);
user.setLastName(lastName);
user.setFirstName(firstName);
user.setPassword(password);
return user;
}
public static void main(String[] args) {
launch(args);
}
}
package io.github.julianjupiter.javafx;
/**
* String Pool utility
* @author Julian Jupiter
*
*/
public class StringPool {
public static final String BLANK = "";
private StringPool() {
}
}
package io.github.julianjupiter.javafx;
import java.io.Serializable;
/**
* Domain model
*
* @author Julian Jupiter
*
*/
public class User implements Serializable {
private static final long serialVersionUID = 3789909326487155148L;
private int id;
private String username;
private String lastName;
private String firstName;
private String password;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
package io.github.julianjupiter.javafx;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
/**
* Data access object
*
* @author Julian Jupiter
*
*/
class UserDao {
private static final Logger logger = Logger.getLogger(UserDao.class.getName());
public boolean userExists(String username) throws SQLException {
Connection connection = null;
PreparedStatement statement = null;
List<User> users = new ArrayList<>();
try {
connection = Database.getDBConnection();
connection.setAutoCommit(false);
String query = "SELECT id, username, last_name, first_name, password FROM user WHERE username = ?";
statement = connection.prepareStatement(query);
int counter = 1;
statement.setString(counter++, username);
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
User user = new User();
user.setId(resultSet.getInt(1));
user.setUsername(resultSet.getString(2));
user.setLastName(resultSet.getString(3));
user.setFirstName(resultSet.getString(4));
user.setPassword(resultSet.getString(5));
users.add(user);
}
return users.isEmpty() ? false : true;
} catch (SQLException exception) {
logger.log(Level.SEVERE, exception.getMessage());
} finally {
if (null != statement) {
statement.close();
}
if (null != connection) {
connection.close();
}
}
return users.isEmpty() ? false : true;
}
public int saveUser(User user) throws SQLException {
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
try {
connection = Database.getDBConnection();
connection.setAutoCommit(false);
String query = "INSERT INTO user(username, last_name, first_name, password) VALUES(?, ?, ?, ?)";
statement = connection.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
int counter = 1;
statement.setString(counter++, user.getUsername());
statement.setString(counter++, user.getLastName());
statement.setString(counter++, user.getFirstName());
statement.setString(counter++, user.getPassword());
statement.executeUpdate();
connection.commit();
resultSet = statement.getGeneratedKeys();
if (resultSet.next()) {
return resultSet.getInt(1);
}
} catch (SQLException exception) {
logger.log(Level.SEVERE, exception.getMessage());
if (null != connection) {
connection.rollback();
}
} finally {
if (null != resultSet) {
resultSet.close();
}
if (null != statement) {
statement.close();
}
if (null != connection) {
connection.close();
}
}
return 0;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment