JDBC / MySQL:如何在创建数据库或关系时检查数据库或关系是不是存在,如果存在则打印错误

Posted

技术标签:

【中文标题】JDBC / MySQL:如何在创建数据库或关系时检查数据库或关系是不是存在,如果存在则打印错误【英文标题】:JDBC / MySQL: How to check if a database or relation exists when creating one, then print off an error if it doesJDBC / MySQL:如何在创建数据库或关系时检查数据库或关系是否存在,如果存在则打印错误 【发布时间】:2016-11-11 15:38:24 【问题描述】:

我对 JDBC 非常陌生,并且正在尝试为一个班级开展一个项目。我们应该为所述数据库创建一个数据库和关系。如果数据库或关系已经存在,我们应该打印一条消息通知用户。我不确定该怎么做。到目前为止,这是我的方法:

    public static void createDatabase() throws Exception 
    String createString =
      "CREATE DATABASE IF NOT EXISTS companydb";
    Statement stmt = null;
    try 

            String driver = "com.mysql.jdbc.Driver";
            String url = "jdbc:mysql://localhost:3306/?autoReconnect=true&useSSL=false";
            String username = "username";
            String password = "password";           
            Class.forName(driver);

            Connection con = DriverManager.getConnection(url, username, password);

      stmt = con.createStatement();
      stmt.executeUpdate(createString);
      System.out.println("Database created.");
     catch (Exception e) 
      System.out.println(e);
     finally 
      if (stmt != null)  stmt.close();
      
    
  

对于创建员工表(尚未创建所有值,只是测试运行):

   public static void createEmployeeTable() throws Exception 
    String createString =
      "create table if not exists employee" + "(Fname char(32) NOT NULL, " +
     PRIMARY KEY(Fname)";
    Statement stmt = null;
    try 
      Connection con = getConnection();
      stmt = con.createStatement();
      stmt.executeUpdate(createString);
      System.out.println("Employee table created.");
     catch (Exception e) 
      System.out.println(e);
     finally 
      if (stmt != null)  stmt.close(); 
    
  

我还意识到,创建这样的表格可能不是建立关系的最有效方式,但它现在只是一项正在进行的工作。感谢任何人都可以提供的任何帮助!

无论数据库和关系/表是否已经存在,它都会输出相同的输出:

  Database created.
  Connected to database.
  Employee table created.
  Connected to database.
  Department table created.
  Connected to database.
  Project table created.
  Connected to database.
  Works_On table created.

【问题讨论】:

那么,当您运行该代码时会发生什么?当 db/table 不存在时,executeUpdate() 返回什么?不存在时返回什么? 当我运行代码时,无论数据库或关系是否存在,它都会显示:数据库已创建。连接到数据库。已创建员工表。连接到数据库。部门表已创建。连接到数据库。项目表已创建。连接到数据库。 Works_On 表已创建。 去掉“如果不存在”并处理异常,这是唯一可靠的方法;或者只是不关心以前的(不)存在并留下“如果不存在”。 How to check if a particular database in mysql already exists using java的可能重复 【参考方案1】:

将您的代码分解为两个步骤。

    对表执行选择查询。如果表不存在,肯定会报错。 如果选择没有引发错误,您可以继续创建表。

【讨论】:

不错的主意,我会试试的!

以上是关于JDBC / MySQL:如何在创建数据库或关系时检查数据库或关系是不是存在,如果存在则打印错误的主要内容,如果未能解决你的问题,请参考以下文章

创建驱动程序定义时如何添加 mySQL JDBC 驱动程序?

如何使用 JDBC/Java 访问和显示 MySQL 关系数据库中的特定记录?

如何从 SQL 脚本、JDBC 或 Spring JdbcTemplate 在 MySQL 中创建函数?

浅析MySQL

运行时确定的数组(或列表)值的 JDBC

JDBC链接mysql数据库