大家好我是jdbc的新手,我想知道是否有办法检查mysql中是否已经存在某个特定的数据库。
假设我想创建一个名为students的数据库,如果学生数据库已经在mysql中创建,则eclipse中的错误消息会指出此学生数据库已经存在。但是我想要做的是创建一个布尔方法来检查学生数据库是否已经存在。如果它存在,那么布尔方法将返回false,否则它是真的然后我可以创建学生数据库。 我如何用Java做这些?在jdbc中是否有任何方法可以执行此操作,还是需要从头开始编写代码? 谢谢你的帮助。
我遵循了mguymons的建议,这就是我的意思
public boolean checkDBExists(String dbName){
try{
Class.forName(JDBCDriver); //Register JDBC Driver
System.out.println("Creating a connection...");
conn = DriverManager.getConnection(DBURL, USER, PASS); //Open a connection
ResultSet resultSet = conn.getMetaData().getCatalogs();
while (resultSet.next()) {
String databaseName = resultSet.getString(1);
if(databaseName.equals(dbName)){
return true;
}
}
resultSet.close();
}
catch(Exception e){
e.printStackTrace();
}
return false;
}
答案 0 :(得分:18)
您可以使用DatabaseMetaData#getCatalogs从 JDBC Connection 获取该信息,以下是获取目录(即数据库名称)的示例
// Connection connection = <your java.sql.Connection>
ResultSet resultSet = connection.getMetaData().getCatalogs();
//iterate each catalog in the ResultSet
while (resultSet.next()) {
// Get the database name, which is at position 1
String databaseName = resultSet.getString(1);
}
resultSet.close();
答案 1 :(得分:7)
show databases like 'students'
如果你回来一行,它就存在了。
答案 2 :(得分:3)
在较新版本的MySQL(5及以上版本)中运行此查询:
SELECT COUNT(*)
FROM information_schema.tables
WHERE table_schema = '[database name]'
AND table_name = '[table name]';
如果结果为1则存在。
在Java JDBC中看起来像这样:
// Create connection and statement
String query = "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema'[database name]' AND table_name = '[table name]'";
ResultSet rs = stmt.executeQuery(query);
rs.next();
boolean exists = rs.getInt("COUNT(*)") > 0;
// Close connection, statement, and result set.
return exists;
答案 3 :(得分:2)
你正在回到前面。正确的方法是尝试创建它并捕获异常。您想要这样做的方式受到时间窗问题的影响:当您进行测试时它不存在,但是当您尝试创建它时它就在那里。而且你仍然必须抓住例外。