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的主要内容,如果未能解决你的问题,请参考以下文章