JAVA建立连接后如何检查数据库是不是存在
Posted
技术标签:
【中文标题】JAVA建立连接后如何检查数据库是不是存在【英文标题】:How to check if a DataBase exist or not after the connection is made JAVAJAVA建立连接后如何检查数据库是否存在 【发布时间】:2012-12-06 12:49:29 【问题描述】:我有一个大问题... 我有一个数据库 java 程序创建。
我想知道数据库是否存在,如果存在就连接,不存在就创建。
我试过这个:
if (dbName.exists() == false)
这就是全部代码...
Class.forName("com.mysql.jdbc.Driver");
System.out.println("MySQL JDBC driver loaded ok.");
这是它的备份代码,现在可以使用.... 部分代码有效!
conn = DriverManager.getConnection(DBurl + url
+ "?createDatabaseIfNotExist=true& + "
+ "useUnicode=true&characterEncoding=utf-8&user="
+ userName + "&&password=" + password);
System.out.println("Connected to database ");
System.out.println("Connected to the database " + url);
但我想要类似的东西:
FILE dbName = new FILE (url);
Statement stmt = new Statement;
if (dbName.exists() == true)
System.out.println("Database exists ! Connecting ... ");
else
String sql = "CREATE DATABASE "+url;
stmt.executeUpdate (sql);
我不想将带有密码和用户名的 url 放在同一个地方...因为它们是从外部提供的,但是已经实现并且可以正常工作。
所以我想破解 2 次和平,1 连接 "jdbc:mysql://localhost:3306/"; WITHOUT URL,即数据库名称 ... 然后,如果那里不存在具有该名称的数据库,则只需创建即可。
它不起作用....没有进入else
更多,并说Exeption数据库已经存在。
非常感谢。
【问题讨论】:
您使用的是哪个数据库?发布您的完整代码和错误的堆栈跟踪 这不是问题。它还缺少重要信息,例如您用于连接数据库的 API、示例代码等。请改写。 'FILE dbName = new FILE (url); ... if (dbName.exists() == true ... 不工作...' : Headpalm 【参考方案1】:如果是 MySQL 数据库,下面的代码应该可以工作。其他数据库可能会给出不同的错误代码,但大致的方式应该清楚。重要的是您连接到实例,而不是最初连接到特定数据库。要创建表,您需要连接到新创建的数据库。您不能使用我在示例中使用的实例连接来创建表:
Connection connection = null;
Statement statement = null;
try
Class.forName("com.mysql.jdbc.Driver");
connection = DriverManager.getConnection("jdbc:mysql://localhost/",
"root", "admin");
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!
// close statement & connection
【讨论】:
感谢您的回答,但问题是我不希望出现异常。如果你理解我想干净,我想在连接后知道数据库是否存在,然后如果数据库存在就打印一条消息,如果不存在则: sql = (CREATE DATABASE "+DbName); stmt.executeUpdate (sql); 嗯?!为什么不?那没什么臭或痒的。绝对正常。【参考方案2】:如果不了解这里发生的情况,只是尝试连接到不存在的数据库应该会引发 TimeoutException
错误或类似的错误。如果无法连接,只需捕获异常并执行操作即可。
boolean canConnect = false;
Connection conn = null;
try
conn = DriverManager.getConnection(...);
canConnect = true;
(Exception ex)
canConnect = false;
if (!canConnect)
makeDatabase(...);
享受你的一天!
【讨论】:
感谢您的回答,但问题是我没有与 URL 中的 DbName 建立连接。我首先连接到服务器,然后我想连接到数据库(如果存在)。如果你理解我想干净,我想在连接后知道数据库是否存在,然后如果数据库存在就打印一条消息,如果不存在则: sql = (CREATE DATABASE "+DbName); stmt.executeUpdate (sql); 好的...建立连接,然后从java.sql.Connection调用getMetaData(),然后调用getCatalogs()返回所有数据库。【参考方案3】:try
Class.forName("com.mysql.cj.jdbc.Driver");
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/", "root", "admin");
Statement statement = connection.createStatement();
String sql = "CREATE DATABASE IF NOT EXISTS DBNAME";
statement.executeUpdate(sql);
catch (ClassNotFoundException | SQLException e)
// TODO Auto-generated catch block
e.printStackTrace();
请注意两件事
-
新的驱动类是`com.mysql.cj.jdbc.Driver'
查询 CREATE DATABASE IF NOT EXISTS DBNAME 意味着您不必检查数据库是否存在
【讨论】:
以上是关于JAVA建立连接后如何检查数据库是不是存在的主要内容,如果未能解决你的问题,请参考以下文章
我如何使用java检查sql server中的数据库名称是不是已经存在? [复制]