这是我的代码,此代码应该只执行一次,但是当我的数据库已经存在时,显示了database created
消息!
我想在数据库真正创建时看到消息,而不是每次都看到消息。
public static boolean createDatabase() throws Exception {
String query = "CREATE DATABASE IF NOT EXISTS LIBRARY3";
Statement st = null;
Connection con = DriverManager.getConnection(dbUrl, "root", "2000");
st = con.createStatement();
if (st.executeUpdate(query) == 1) { // Then database created
JOptionPane.showMessageDialog(null, "Database created");
return true;
}
return false;
}
此代码始终返回true
,为什么?
答案 0 :(得分:0)
如果它的MySQL你需要检查数据库是否存在以决定数据库是否已真正创建
SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'LIBRARY3'
答案 1 :(得分:0)
它返回true,因为你要求mysql只在它存在的情况下创建数据库,所以,如果它存在则没有错误,它只是不创建它。你可以做的是尝试创建它,如果失败,检查原因是数据库是否存在。
try {
statement = connection.createStatement();
String sql = "CREATE DATABASE DBNAME";
//To delete database: sql = "DROP DATABASE DBNAME";
statement.executeUpdate(sql);
System.out.println("Database created!");
} catch (SQLException sqlException) {
if (sqlException.getErrorCode() == 1007) {
// Database already exists error
System.out.println(sqlException.getMessage());
} else {
// Some other problems, e.g. Server down, no permission, etc
sqlException.printStackTrace();
}
} catch (ClassNotFoundException e) {
// No driver class found!
}
答案 2 :(得分:0)
每次查询都成功。执行单独的查询以检查表是否存在,并根据该结果返回消息。
详细了解如何检查表格是否存在here
答案 3 :(得分:0)
更短的方法:
SHOW DATABASES LIKE 'LIBRARY3';
如果LIBRARY3
不存在,您将获得一个空字符串。