Anonymous
Java mysql: не удалось создать таблицу и вставить начальные данные
Сообщение
Anonymous » 14 мар 2025, 16:33
Я создаю систему с MySQL, и я не могу заставить ее создать таблицу, а затем вставляю начальные данные для таблицы пользователей . Он правильно подключается к указанной базе данных, но не создает таблицу или не вставляет данные. < /P>
Код: Выделить всё
package lngtech.database;
import java.lang.reflect.InvocationTargetException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.sql.*;
import java.util.Base64;
import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
public final class DatabaseHandler {
private static DatabaseHandler handler;
private final String DB_Driver = "com.mysql.cj.jdbc.Driver";
private final String DB_URL = "jdbc:mysql://localhost:3306/inventory_system?zeroDateTimeBehavior=CONVERT_TO_NULL";
private static Connection conn = null;
private static Statement stmt = null;
private static PreparedStatement pst = null;
private static final Logger logger = Logger.getLogger(DatabaseHandler.class.getName());
public DatabaseHandler() {
createConnection();
setupTables();
populateUsersTable();
}
public static synchronized DatabaseHandler getInstance() {
if (handler == null) {
handler = new DatabaseHandler();
}
return handler;
}
private void createConnection() {
try {
Class.forName(DB_Driver).getDeclaredConstructor().newInstance();
conn = DriverManager.getConnection(DB_URL, "root", "myDbPassword");
} catch (ClassNotFoundException | IllegalAccessException | IllegalArgumentException | InstantiationException | NoSuchMethodException | SecurityException | InvocationTargetException | SQLException e) {
logger.log(Level.SEVERE, "Failed to create database connection", e);
}
}
public void closeConnection() {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
logger.log(Level.SEVERE, "Error closing connection", e);
}
}
}
private void setupTables() {
setupUsersTable();
}
void setupTable(String tableName, String createStatement) {
try {
stmt = conn.createStatement();
DatabaseMetaData dbm = conn.getMetaData();
ResultSet tables = dbm.getTables(null, null, tableName, null);
if (!tables.next()) {
stmt.execute(createStatement);
}
} catch (SQLException e) {
System.err.println(e.getMessage() + " ... setupDatabase");
}
}
void setupUsersTable() {
String createTable = """
CREATE TABLE IF NOT EXISTS users (
id VARCHAR(255) PRIMARY KEY NOT NULL,
firstName VARCHAR(255) NOT NULL,
lastName VARCHAR(255) NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
username VARCHAR(255) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL,
isActive BOOLEAN DEFAULT TRUE NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL,
deleted_at TIMESTAMP NULL DEFAULT NULL
)
""";
setupTable("users", createTable);
}
private void populateUsersTable() {
String userId = UUID.randomUUID().toString();
String firstName = "John Smith";
String lastName = "Doe";
String email = "sample@gmail.com";
String username = "lngtech";
String password = hashPassword("S@mpl3P@s$w0rD");
String insertData = "INSERT INTO users (id, firstName, lastName, email, username, password) VALUES ('" + userId + "', '" + firstName + "', '" + lastName + "', '" + email + "', '" + username + "', '" + password + "')";
execAction(insertData);
}
private String hashPassword(String password) {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-256");
byte[] hashedBytes = digest.digest(password.getBytes());
return Base64.getEncoder().encodeToString(hashedBytes);
} catch (NoSuchAlgorithmException e) {
logger.log(Level.SEVERE, "Error hashing password", e);
return null;
}
}
public ResultSet execQuery(String query) {
try {
stmt = conn.createStatement();
return stmt.executeQuery(query);
}
catch (SQLException e) {
logger.log(Level.SEVERE, "Error executing query: " + query, e);
return null;
}
}
public boolean execAction(String qu) {
try {
stmt = conn.createStatement();
stmt.execute(qu);
return true;
}
catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Error: " + e.getMessage(), "Error occured", JOptionPane.ERROR_MESSAGE);
logger.log(Level.SEVERE, "Error executing action: " + qu, e);
return false;
}
}
public boolean execUpdate(String qu, Object... params) {
try {
pst = conn.prepareStatement(qu);
for (int i = 0; i < params.length; i++) {
pst.setObject(i + 1, params[i]);
}
pst.executeUpdate();
return true;
}
catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Error: " + e.getMessage(), "Error occured", JOptionPane.ERROR_MESSAGE);
logger.log(Level.SEVERE, "Error executing update: " + qu, e);
return false;
}
}
}
Я продолжаю получать эту ошибку:
Код: Выделить всё
run:
Mar 14, 2025 9:16:43 PM lngtech.database.DatabaseHandler execAction
SEVERE: Error executing action: INSERT INTO users (id, firstName, lastName, email, username, password) VALUES ('ad0186e4-bfdf-4710-b437-8c1c42d9fde5', 'John Smith', 'Doe', 'sample@gmail.com', 'lngtech', 'qrAHYe/qRPJW5pN8YXSxBI9mmlsiWDbhwUtVT9xcxts=')
java.sql.SQLSyntaxErrorException: Table 'inventory_system.users' doesn't exist
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:112)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:114)
at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:837)
at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:685)
at lngtech.database.DatabaseHandler.execAction(DatabaseHandler.java:133)
at lngtech.database.DatabaseHandler.populateUsersTable(DatabaseHandler.java:105)
at lngtech.database.DatabaseHandler.(DatabaseHandler.java:29)
at lngtech.database.DatabaseHandler.getInstance(DatabaseHandler.java:34)
at lngtech.app.SplashScreen$DatabaseConnectionThread.run(SplashScreen.java:41)
BUILD SUCCESSFUL (total time: 1 minute 4 seconds)
Я просто в потерях, и я впервые пробую MySQL для приложения Java.
Подробнее здесь:
https://stackoverflow.com/questions/795 ... itial-data
1741959193
Anonymous
Я создаю систему с MySQL, и я не могу заставить ее создать таблицу, а затем вставляю начальные данные для таблицы пользователей . Он правильно подключается к указанной базе данных, но не создает таблицу или не вставляет данные. < /P> [code]package lngtech.database; import java.lang.reflect.InvocationTargetException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.sql.*; import java.util.Base64; import java.util.UUID; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.JOptionPane; public final class DatabaseHandler { private static DatabaseHandler handler; private final String DB_Driver = "com.mysql.cj.jdbc.Driver"; private final String DB_URL = "jdbc:mysql://localhost:3306/inventory_system?zeroDateTimeBehavior=CONVERT_TO_NULL"; private static Connection conn = null; private static Statement stmt = null; private static PreparedStatement pst = null; private static final Logger logger = Logger.getLogger(DatabaseHandler.class.getName()); public DatabaseHandler() { createConnection(); setupTables(); populateUsersTable(); } public static synchronized DatabaseHandler getInstance() { if (handler == null) { handler = new DatabaseHandler(); } return handler; } private void createConnection() { try { Class.forName(DB_Driver).getDeclaredConstructor().newInstance(); conn = DriverManager.getConnection(DB_URL, "root", "myDbPassword"); } catch (ClassNotFoundException | IllegalAccessException | IllegalArgumentException | InstantiationException | NoSuchMethodException | SecurityException | InvocationTargetException | SQLException e) { logger.log(Level.SEVERE, "Failed to create database connection", e); } } public void closeConnection() { if (conn != null) { try { conn.close(); } catch (SQLException e) { logger.log(Level.SEVERE, "Error closing connection", e); } } } private void setupTables() { setupUsersTable(); } void setupTable(String tableName, String createStatement) { try { stmt = conn.createStatement(); DatabaseMetaData dbm = conn.getMetaData(); ResultSet tables = dbm.getTables(null, null, tableName, null); if (!tables.next()) { stmt.execute(createStatement); } } catch (SQLException e) { System.err.println(e.getMessage() + " ... setupDatabase"); } } void setupUsersTable() { String createTable = """ CREATE TABLE IF NOT EXISTS users ( id VARCHAR(255) PRIMARY KEY NOT NULL, firstName VARCHAR(255) NOT NULL, lastName VARCHAR(255) NOT NULL, email VARCHAR(255) UNIQUE NOT NULL, username VARCHAR(255) UNIQUE NOT NULL, password VARCHAR(255) NOT NULL, isActive BOOLEAN DEFAULT TRUE NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL, deleted_at TIMESTAMP NULL DEFAULT NULL ) """; setupTable("users", createTable); } private void populateUsersTable() { String userId = UUID.randomUUID().toString(); String firstName = "John Smith"; String lastName = "Doe"; String email = "sample@gmail.com"; String username = "lngtech"; String password = hashPassword("S@mpl3P@s$w0rD"); String insertData = "INSERT INTO users (id, firstName, lastName, email, username, password) VALUES ('" + userId + "', '" + firstName + "', '" + lastName + "', '" + email + "', '" + username + "', '" + password + "')"; execAction(insertData); } private String hashPassword(String password) { try { MessageDigest digest = MessageDigest.getInstance("SHA-256"); byte[] hashedBytes = digest.digest(password.getBytes()); return Base64.getEncoder().encodeToString(hashedBytes); } catch (NoSuchAlgorithmException e) { logger.log(Level.SEVERE, "Error hashing password", e); return null; } } public ResultSet execQuery(String query) { try { stmt = conn.createStatement(); return stmt.executeQuery(query); } catch (SQLException e) { logger.log(Level.SEVERE, "Error executing query: " + query, e); return null; } } public boolean execAction(String qu) { try { stmt = conn.createStatement(); stmt.execute(qu); return true; } catch (SQLException e) { JOptionPane.showMessageDialog(null, "Error: " + e.getMessage(), "Error occured", JOptionPane.ERROR_MESSAGE); logger.log(Level.SEVERE, "Error executing action: " + qu, e); return false; } } public boolean execUpdate(String qu, Object... params) { try { pst = conn.prepareStatement(qu); for (int i = 0; i < params.length; i++) { pst.setObject(i + 1, params[i]); } pst.executeUpdate(); return true; } catch (SQLException e) { JOptionPane.showMessageDialog(null, "Error: " + e.getMessage(), "Error occured", JOptionPane.ERROR_MESSAGE); logger.log(Level.SEVERE, "Error executing update: " + qu, e); return false; } } } [/code] Я продолжаю получать эту ошибку: [code]run: Mar 14, 2025 9:16:43 PM lngtech.database.DatabaseHandler execAction SEVERE: Error executing action: INSERT INTO users (id, firstName, lastName, email, username, password) VALUES ('ad0186e4-bfdf-4710-b437-8c1c42d9fde5', 'John Smith', 'Doe', 'sample@gmail.com', 'lngtech', 'qrAHYe/qRPJW5pN8YXSxBI9mmlsiWDbhwUtVT9xcxts=') java.sql.SQLSyntaxErrorException: Table 'inventory_system.users' doesn't exist at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:112) at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:114) at com.mysql.cj.jdbc.StatementImpl.executeInternal(StatementImpl.java:837) at com.mysql.cj.jdbc.StatementImpl.execute(StatementImpl.java:685) at lngtech.database.DatabaseHandler.execAction(DatabaseHandler.java:133) at lngtech.database.DatabaseHandler.populateUsersTable(DatabaseHandler.java:105) at lngtech.database.DatabaseHandler.(DatabaseHandler.java:29) at lngtech.database.DatabaseHandler.getInstance(DatabaseHandler.java:34) at lngtech.app.SplashScreen$DatabaseConnectionThread.run(SplashScreen.java:41) BUILD SUCCESSFUL (total time: 1 minute 4 seconds) [/code] Я просто в потерях, и я впервые пробую MySQL для приложения Java. Подробнее здесь: [url]https://stackoverflow.com/questions/79509191/java-mysql-could-not-create-table-and-insert-initial-data[/url]