【问题标题】:How do I avoid an 'unknown database' error when using a custom database directory?使用自定义数据库目录时如何避免“未知数据库”错误?
【发布时间】:2021-07-03 06:59:48
【问题描述】:

我正在处理一个项目,我已将我的数据库文件夹放在项目文件夹中。如何建立与任何目录的数据库连接,而不仅仅是 Java 中的默认 MySQL 目录?

String MySQLURL = "jdbc:mysql://localhost:3306/C:\\Program Files\\SnakeGame";

String UserName = "root";
String Password = "admin";
Connection con = null;
try {
    con = DriverManager.getConnection(MySQLURL,UserName,Password);
    if (con != null) {
        System.out.println("Database connection is successful !!!!");
    }
} catch (Exception e) {
    e.printStackTrace();
}

执行此操作时,我收到此错误:

java.sql.SQLSyntaxErrorException: 未知数据库 'c:\program files\snakegame'

【问题讨论】:

  • “我已将我的数据库文件夹放入项目文件夹”是什么意思? MySql 不是基于文件的/可嵌入的。您的意思是改用 sqlite 吗?
  • 关于标签的快速说明:a) 请不要将 IDE 标签用于一般编程问题和 b) 这是运行时错误,而不是编译器错误。 (区别其实很重要)。异常是总是运行时错误。

标签: java mysql jdbc


【解决方案1】:

您的连接网址错误

String MySQLURL = "jdbc:mysql://localhost:3306/C:\\Program Files\\SnakeGame";

我不确定为什么您的 MySQLURL 包含 C:\Program Files\SnakeGame

mysql数据库的连接URL是 jdbc:mysql://localhost:3306/[DatabaseName]

其中jdbc是API,mysql是数据库,localhost是运行mysql的服务器名(这里我们也可以使用服务器的IP地址),3306是端口号,[DatabaseName]是在 MySQL 服务器上创建的数据库。

在 MySQL 服务器中创建数据库后,相应地替换 [DatabaseName] 名称

【讨论】:

  • 似乎 OP 将基于文件的连接字符串和基于服务器的连接字符串混为一谈。
【解决方案2】:

localhost:3306/C:\\Program Files\\SnakeGame 结合起来对于任何数据库都没有多大意义——要么您尝试连接到基于文件的数据库(在这种情况下localhost... 部分没有意义),要么您正在使用基于服务器的(在这种情况下,C:\... 部分没有意义。

此外,此连接字符串对于基于文件的数据库几乎没有意义,因为您没有指定特定文件,只是指定了路径。

顺便说一句,MySQL 是基于服务器的,而不是基于文件的。在 localhost:3306/ 部分之后需要一个数据库名称,而不是路径(因此出现错误)。实际数据库程序的物理位置是一个安装/配置问题 - 一旦它已经运行,它与您如何实际连接到数据库服务器无关。

这样想:当您调用外部数据库、Web 服务或网站时,您是否需要知道它部署到了哪个物理文件夹?显然不是。在调用 MySQL 或其他类似的数据库时,所涉及的物理文件夹完全无关

其中一位 cmets 指出了这一点,但您是否打算在这里使用 SQlite 或其他基于文件的数据库?

【讨论】:

  • 对于某些基于服务器的数据库系统,这样的 URL 可能有意义,例如 Firebird。
猜你喜欢
  • 1970-01-01
  • 2013-09-28
  • 2020-01-15
  • 1970-01-01
  • 2015-01-07
  • 2018-05-25
  • 2016-03-01
  • 1970-01-01
  • 2011-05-05
相关资源
最近更新 更多