【问题标题】:java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/mydatabase Android Studio Java MySQLjava.sql.SQLException:找不到适合 jdbc:mysql://localhost:3306/mydatabase Android Studio Java MySQL 的驱动程序
【发布时间】:2021-05-18 11:43:33
【问题描述】:

我正在使用 jdbc mysql 连接器将我的 android studio 项目与 XAMPP 连接。 在我编译我的程序并继续在我的应用程序中填写信息后,我单击按钮并引发此错误。

java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/mydatabase
W/System.err:     at java.sql.DriverManager.getConnection(DriverManager.java:605)
        at java.sql.DriverManager.getConnection(DriverManager.java:218)
        at com.example.myproject.views.CartFragment$3.onClick(CartFragment.java:132)
        at android.view.View.performClick(View.java:7448)
        at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:992)           

这是我的数据库连接的实现。 我已经成功地将我的 app/libs 目录中的 .jar jdbc 连接器实现为库模块。 是的,我已经尝试过 Class.forName("com.mysql.jdbc.Driver") 但它又抛出了另一个错误,所以这不是一个选项。我读到在 JAVA 5 之后不需要调用 Class.forName。

最初我使用了 Connection, Statement,但它抛出了与我使用 JdbcConnection 和 JdbcStatement 时相同的错误。

try {
                    String url = "jdbc:mysql://localhost:3306/mydatabase";
                    String username = "root";
                    String password = "";

                    JdbcConnection con = (JdbcConnection) DriverManager.getConnection(url,username,password);
                    JdbcStatement st = (JdbcStatement) con.createStatement();

                    st.addBatch(query);
                    st.addBatch(query2);
                    st.executeBatch();
                }
                catch (SQLException throwables) {
                    throwables.printStackTrace();
                }

对我的 build.gradle 的依赖:

 implementation fileTree(dir: 'libs', include: ['*.jar'])
        implementation files('libs/mysql-connector-java-8.0.23')

【问题讨论】:

  • 您必须先加载驱动程序才能启动与数据库Class.forName("com.mysql.jdbc.Driver"); 的连接
  • @PAndeyAmit 现在是 2020 年。在这一点上,大约 20 年都不需要这个了。请停止建议。问题不在于。这个问题连丹尼斯都试过了。

标签: java android mysql


【解决方案1】:

问题是 JDBC 驱动程序在运行时不存在。您正在尝试的所有事情只是加载它的不同方式,这就是为什么它不起作用。

如果驱动程序在那里,你不需要做任何这些事情——例如,不需要Class.forName,你正在尝试的所有这些事情都会正常工作。

第一个问题是:为什么你要在手机上加载 mysql JDBC 驱动程序?您的手机没有 mysql 数据库服务器。 JDBC 驱动程序只是一种让 java 连接到已经存在的 mysql 服务器的方法。它本身不是 mysql 服务器 - 只是可以连接到它的东西。

所以,最有可能的是,这里的正确答案是:你完全糊涂了; mysql没有在手机上运行的业务。

您可能希望直接从手机连接到手机可直接访问的某个 mysql 服务器。但这也不太可能 - 只有当手机在内部网络上时才有效(所以,你的本地 wifi),或者,如果你的 mysql 服务器直接连接到开放的互联网(这是一个坏主意),或者,如果您的手机在 VPN 上,这样它就可以访问对整个 VPN 开放的 mysql 服务器。这些想法并非完全疯狂,而是接近于疯狂。如果你真的想要这个(我不认为你这样做),你只需要修复 [A] mysql URL 显然不能是localhost,你的手机上没有 mysql 服务器,并且 [B] 你需要mysql JDBC 驱动程序可作为手机应用程序的一部分使用。这应该不是特别困难(它只是通过 TCP 连接的代码,没有与 android 本质上不兼容的东西),但是您可能很难找到教程,因为没有人*这样做。

更可能的设置是在某个地方的服务器上运行一些软件(当然也可以用 java 编写!),并且 与本地运行的 mysql 服务器通信或网络中的其他地方,该服务器会公开一个基于 HTTP 的 API,然后您的手机会连接到该 API。在这种情况下,您不希望手机具有任何 JDBC,并且手机甚至不会使用任何 SQL。服务器代码会。

请注意,Android 手机中确实有数据库,但它是 SQLite,如果需要,Android 上运行的每个应用程序都可以免费获得自己的基于 SQLite 的数据库。有大量关于如何与之交互的教程。

*) 向下舍入。

【讨论】:

  • 这是一个很好的解释。我只是想用我的数据库测试我的应用程序,这就是我尝试使用 JDBC 的原因。感谢您的帮助:)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-30
  • 2014-06-09
  • 2020-05-21
  • 2015-01-29
  • 2019-01-29
  • 1970-01-01
  • 2016-10-01
相关资源
最近更新 更多