首页 > 解决方案 > java.sql.SQLException:找不到适合 jdbc:mysql://localhost:3306/mydatabase Android Studio Java MySQL 的驱动程序

问题描述

我正在使用 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')

标签: javaandroidmysql

解决方案


问题是 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。在这种情况下,您不希望手机具有任何 JDBC,并且手机甚至不会使用任何 SQL。服务器代码会。

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

*) 向下舍入。


推荐阅读