Android + MySQL 使用 com.mysql.jdbc.Driver

Posted

技术标签:

【中文标题】Android + MySQL 使用 com.mysql.jdbc.Driver【英文标题】:Android + MySQL using com.mysql.jdbc.Driver 【发布时间】:2011-06-16 03:46:39 【问题描述】:

我正在编写一个将连接到 mysql 服务器的 android 应用程序。现在,我正在使用 http://localhost:3306/ 通过 XAMPP 在我的计算机上测试 MySQL 服务器。下面的代码在严格作为 JAVA 应用程序测试时可以正常工作。

import java.sql.*;

public class MySQL
  public static void main(String[] args) 
    System.out.println("MySQL Connect Example.");
    Connection conn = null;
    String url = "jdbc:mysql://localhost:3306/";
    String dbName = "database";
    String driver = "com.mysql.jdbc.Driver";
    String userName = "root"; 
    String password = "";
    try 
      Class.forName(driver).newInstance();
      conn = DriverManager.getConnection(url+dbName,userName,password);
      System.out.println("Connected to the database");
      conn.close();
      System.out.println("Disconnected from database");
     catch (Exception e) 
      e.printStackTrace();
    
  

但是,当我将它添加到我的 Android 应用程序时,我得到了 Exception e 错误。

// interact with MySQL!!!
 private View.OnClickListener onSendRequest = new View.OnClickListener() 
  @Override
  public void onClick(View v) 
   EditText username = (EditText) findViewById(R.id.Huusername);
      //    String un = " " + username.getText().toString() + " ";

      System.out.println("MySQL Connect Example.");
      Connection conn = null;
      String url = "jdbc:mysql://localhost:3306/";
      String dbName = "database";
      String driver = "com.mysql.jdbc.Driver";
      String userName = "root"; 
      String password = "";
      try 
        Class.forName(driver).newInstance();
        conn = DriverManager.getConnection(url+dbName,userName,password);
        Toast.makeText(getBaseContext(),
      "Connected to the database.", Toast.LENGTH_LONG)
      .show();
        conn.close();
        Toast.makeText(getBaseContext(),
      "Disconnected form the database.", Toast.LENGTH_LONG)
      .show();
       catch (Exception e) 
       Toast.makeText(getBaseContext(),
      "Exception e.", Toast.LENGTH_LONG)
      .show();
        e.printStackTrace();
      


  
 ;

在编译我的 Android 应用程序时,我注意到控制台中的以下语句:

[2011-01-26 16:05:54 - hookup]: Dxwarning: Ignoring InnerClasses attribute for an anonymous inner class
(com.mysql.jdbc.interceptors.ResultSetScannerInterceptor$1) that doesn't come with an
associated EnclosingMethod attribute. This class was probably produced by a
compiler that did not target the modern .class file format. The recommended
solution is to recompile the class from source, using an up-to-date compiler
and without specifying any "-target" type options. The consequence of ignoring
this warning is that reflective operations on this class will incorrectly
indicate that it is *not* an inner class.

我认为这句话与我得到的异常有关。有没有人使用 MySQL 和 Android 可以引导我走向正确的方向? 谢谢

【问题讨论】:

您可能需要驱动程序的源代码,以便重新编译它。 【参考方案1】:

使用 JDBC 连接器 mysql-connector-java-3.0.17-ga-bin.jar,目前是唯一有效的。

还要检查您的代码,您需要为应用程序的每个活动实现一个连接池,只需添加一个私有“连接”变量并在您的 OnCreate 方法中初始化它,如 con = DriveManager.getConnection......然后在每次需要访问 MYSQL 时使用该私有变量。

【讨论】:

【参考方案2】:

另一种方法是使用使用三层架构的虚拟 JDBC 驱动程序:您的 JDBC 代码通过 HTTP 发送到远程 Servlet,该 Servlet 在将 JDBC 代码(配置和安全性)传递给 MySql JDBC 驱动程序之前对其进行过滤.结果通过 HTTP 发回给您。有一些免费软件使用这种技术。只需谷歌“Android JDBC Driver over HTTP”。

【讨论】:

【参考方案3】:

您是否尝试过查看 ContentProviders? http://developer.android.com/guide/topics/providers/content-providers.html

与直接访问 MySQL 相比,通过该实现(例如 SQLite 数据库)访问数据可能会更幸运。

【讨论】:

我需要数据可供其他手机上的其他用户使用。所以 ContentProviders 不是一个可接受的选择。【参考方案4】:

要在android中提供到远程数据库的连接,必须使用WebService,因为android没有API来连接远程数据库。

【讨论】:

以上是关于Android + MySQL 使用 com.mysql.jdbc.Driver的主要内容,如果未能解决你的问题,请参考以下文章

android 如何让两个apk相互通信

使用 Twilio 和 Android 发送短信

Chrome 意图在 Android Chrome 中不起作用

在java程序中使用JDBC连接mysql数据库

腾讯云服务器centos通过yum安装mysql数据库

powerdesigner与mysql数据库的连接