การแก้ไขข้อผิดพลาด "Unknown database" ใน JDBC Connection
ข้อผิดพลาด MySQLSyntaxErrorException: Unknown database 'onlinebookstore' เกิดจากการระบุ Database Name ใน Connection URL ที่ ไม่มีอยู่จริง ใน MySQL Server
โค้ด Java ที่ทำให้เกิด Error
String JdbcURL = "jdbc:mysql://localhost:3306/onlinebookstore?useSSL=false";
String Username = "root";
String password = "123456";
Connection con = DriverManager.getConnection(JdbcURL, Username, password);
Stack Trace:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown database 'onlinebookstore'
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:944)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3978)
...
at UnknowDatabaseDemo.main(UnknowDatabaseDemo.java:15)
วิธีแก้ไข
- เข้า MySQL Command Line:
mysql -u root -p - ดู Database ที่มีอยู่:
SHOW DATABASES; - เลือก Database ที่มีจริง (ตัวอย่าง:
hb_student_tracker) - แก้ Connection URL ให้ตรงกับ Database ที่มีอยู่
โค้ด Java ที่แก้ไขแล้ว
String JdbcURL = "jdbc:mysql://localhost:3306/hb_student_tracker?useSSL=false";
String Username = "root";
String password = "123456";
Connection con = DriverManager.getConnection(JdbcURL, Username, password);
System.out.println("Connected to MySQL database");
ผลลัพธ์: Connected to MySQL database
Best Practices ป้องกัน Error นี้
- Externalize Config: ใส่ DB Name ใน properties/YAML file ไม่ได้ Hardcode
- Validate at Startup: ตรวจสอบ Database มีอยู่จริงตอน Startup ด้วย Query
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = ? - Auto-create (Dev only): ใช้
CREATE DATABASE IF NOT EXISTSใน Migration Script (Flyway/Liquibase) - Connection Pool: ใช้ HikariCP ตั้งค่า
connectionInitSqlตรวจสอบ DB
ข้อผิดพลาดที่คล้ายกัน
Access denied for user→ User/Password ผิด หรือ Host ไม่ได้รับอนุญาตCommunications link failure→ Host/Port ผิด, Firewall, MySQL ไม่ได้ RunPublic Key Retrieval is not allowed→ เพิ่มallowPublicKeyRetrieval=trueใน URL (MySQL 8.0+)