与android上的mysql jdbc连接器连接时出现ClassNotFoundException

Posted

技术标签:

【中文标题】与android上的mysql jdbc连接器连接时出现ClassNotFoundException【英文标题】:ClassNotFoundException when connecting with mysql jdbc connector on android 【发布时间】:2012-05-24 15:52:56 【问题描述】:

我找到了一些答案,但没有任何用处。

我将 mysql-connector-java-5.1.7-bin.jar 添加到引用的库中,并将以下方法添加到我的主类活动中。

private void getServerData(String id, String type) throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException

    Log.i("Database Connection", " requesting data from server");

    Class.forName("com.mysql.jdbc.Driver").newInstance();               
    Connection con = DriverManager.getConnection("jdbc:mysql://10.0.2.2:3306/db_easy_maintenance", "root", "maintenance");
    Statement stm = con.createStatement();
    ResultSet rs = stm.executeQuery("SELECT Name FROM industrial_object");
    String entry;
    while(rs.next())
    
        entry=rs.getString("Name");
        Log.i("Database Connection", "getting " + entry);
    

    con.close();


我启动我的应用程序并得到一个 java.lang.ClassNotFoundException: com.mysql.jdbc.Driver at java.lang.Class.classForName。

如果我不使用 try ...catch... 那么我会在编译之前得到这个异常。

怎么了?

【问题讨论】:

您是否也将 mysql 连接器 jar 添加到您的类路径中?不清楚您所说的“添加...到引用库”是什么意思。 你把罐子放进libs了吗? 是的,是的。引用的库是指eclipse中的“引用库”->包资源管理器-> myproject 【参考方案1】:

见:http://developer.android.com/search.html#q=dx&t=0 和Android JDBC not working: ClassNotFoundException on driver - 我在底部的回答给出了荒谬的具体说明,尽管我很好奇切换到 1.6 有什么用处。

【讨论】:

mysql-connector-java-5.1.20 对我也不利【参考方案2】:

验证库是否已导出(.classpath 文件中有 exported="true" 属性)。您也可以在 Eclipse 的项目设置中的相应选项卡中执行此操作。

【讨论】:

【参考方案3】:

它可能无法正常工作,因为 Android 使用了一些不同的字节码。 Tyr 检查 MySQL JDBC 库是否正确转换为 Dalvik 的格式。有一个名为dex 的工具用于将JVM 字节码转换为Dalvik 的字节码。如果 JDBC 驱动程序包含无法移植到 Android 的类或某些本机代码 - 您不能在 Android 中使用它

【讨论】:

【参考方案4】:

JDBC 在 Android 上很少使用,我当然不会推荐它。

JDBC 专为高带宽、低延迟、高可靠性的网络连接而设计(例如,桌面到数据库服务器、Web 应用程序服务器到数据库服务器)。移动设备提供的这些功能很少,而且没有一个始终如一。

所以我建议您使用的替代方法包括:

围绕您的数据库创建一个 Web 服务并从 Android 访问它。

作为附带好处,您可以提高安全性(相对于让您的数据库保持打开状态),可以从客户端卸载一些业务逻辑,可以更好地支持其他平台(例如,Web 或基于 Web 的移动框架)等。

【讨论】:

我知道,我以前的版本使用了这种类型的连接,但我的老板认为不同。我们只使用局域网连接,不想发布这个应用程序。 @K_Anas :您能否展示一下您所说的代码示例?我的意思是创建 Web 服务来访问 mysql 数据库。【参考方案5】:

它应该可以工作,也许你应该尝试使用另一个 JavaSDK 和另一个 Android 平台。

【讨论】:

以上是关于与android上的mysql jdbc连接器连接时出现ClassNotFoundException的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Mysql JDBC 驱动程序将 Android 与 MySQL 连接 [重复]

在Android中使用JDBC MySQL连接数据库?

Android 连接到远程 mysql 数据库 JDBC Vs JSON

Android用jdbc链接mysql并对数据库进行增,删,改,查;注意是Android

Android上的Postgresql JDBC连接错误

Android:用 JDBC 连接 MySql