I'm trying to use JDBC in my Android application to connect to a remote database to do inserts, queries, etc. I have successfully connected and done these things in a different JAVA project. So I figured since Android is Java, I could just port over the relevant code, add the same build path for the driver, etc. But it gives me the error:
java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
I really don't think it's a code issue since the same code works in a Java project (which I just execute in main()). But for reference here it is:
String url = "jdbc:mysql://localhost:3306/eventhub_test"; //
String user = "root";
String pass = "";
SQLUtils sqlu = new SQLUtils(url, user, pass);
//the SQLUtils class I made:
public class SQLUtils {
private String CONNECTION_URL;
private String user;
private String pass;
private java.sql.Statement stmt;
private java.sql.Connection conn;
public SQLUtils(String conn_url, String user, String pass) {
this.CONNECTION_URL = conn_url;
this.user = user;
this.pass = pass;
}
public void init() throws IllegalAccessException, InstantiationException, ClassNotFoundException, SQLException {
Class.forName ("com.mysql.jdbc.Driver").newInstance ();
conn = DriverManager.getConnection(CONNECTION_URL, user, pass);
stmt = conn.createStatement();
}
}
So I'm really confused here. Does JDBC not work with Android? If so, tell me what alternatives I should look into for remote MySQL database access.
Thanks.
In brief, we can say that such an error occurs when no JDBC JAR file is added to the classpath of Java. Just we need to add the JAR file to the classpath and then execute the code. The code will hopefully get executed with success.
After extracting the distribution archive, you can install the driver by placing MySQL-connector-java-version-bin. jar in your classpath, either by adding the full path to it to your classpath environment variable or by directly specifying it with the command line switch -cp when starting the JVM.
Does JDBC not work with Android?
JDBC is infrequently used on Android, and I certainly would not recommend it.
IMHO, JDBC is designed for high-bandwidth, low-latency, highly-reliable network connections (e.g., desktop to database server, Web application server to database server). Mobile devices offer little of these, and none of them consistently.
If so, tell me what alternatives I should look into for remote MySQL database access.
Create a Web service around your database and access that from Android.
As side benefits, you improve security (vs. leaving your database open), can offload some business logic from the client, can better support other platforms (e.g., Web or Web-based mobile frameworks), etc.
I had a TON of trouble with this for some reason. It is mentioned elsewhere that only 3.017 driver works, and since I made such detailed instructions I figured I'd share them. (My initial purpose was to give steps to reproduce error that I could use to ask a question here and elsewhere. No, I can't begin to guess why I had so much trouble now looking back)
To: Get JDBC Driver in Android app
jar mysql-connector-java-3.0.17-ga-bin.jar
into /libs in your project in project explorer inside Eclipse., using the default “copy” setting for the drag and drop.onCreate()
- basically Class.forName("com.mysql.jdbc.Driver").newInstance();
Leaving aside the valid objections, you can make it work.
Firstly make sure you have a valid driver jar in you build path, I used
mysql-connector-java-5.1.7-bin.jar
Secondly, if you are trying it in the emulator and your db is on you development machine, 'localhost' is no good in the URL. You need '10.0.2.2'
My URL is :
String url = "jdbc:mysql://10.0.2.2/test";
test being my db name.
I've got a table called 'books' with a column 'title' in it
The following code works for me:
public void init() throws IllegalAccessException, InstantiationException,
ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver").newInstance();
try {
conn = DriverManager.getConnection(CONNECTION_URL, user, pass);
} catch (java.sql.SQLException e1) {
e1.printStackTrace();
}
try {
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT title FROM books");
String entry;
while (rs.next()){
entry = rs.getString(1);
}
rs.close();
stmt.close();
conn.close();
} catch (java.sql.SQLException e) {
e.printStackTrace();
}
}
Stepping through in the debugger, I see the titles in String entry
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With