Android + MySQL с использованием com.mysql.jdbc.Driver - PullRequest
3 голосов
/ 27 января 2011

Я пишу приложение для Android, которое будет подключаться к серверу MySQL. На данный момент я тестирую сервер MySQL на моем компьютере через XAMPP, используя http://localhost:3306/. Приведенный ниже код отлично работает при строгом тестировании его как приложения 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, который мог бы привести меня в правильном направлении? Спасибо

Ответы [ 4 ]

6 голосов
/ 02 июля 2011

Используйте JDBC-соединитель mysql-connector-java-3.0.17-ga-bin.jar, на данный момент это единственный, который работает.

Проверьте также свой код, вам нужно реализовать пул соединенийдля каждого действия вашего приложения просто добавьте частную переменную «Connection» и инициализируйте ее в своем методе OnCreate, например con = DriveManager.getConnection ......, а затем используйте эту частную переменную каждый раз, когда вам потребуется доступ к MYSQL.

2 голосов
/ 04 декабря 2012

Другой подход заключается в использовании виртуального драйвера JDBC, который использует трехуровневую архитектуру: ваш код JDBC отправляется через HTTP на удаленный сервлет, который фильтрует код JDBC (конфигурация и безопасность) перед передачей его драйверу MySql JDBC , Результат отправляется обратно через HTTP. Есть несколько бесплатных программ, которые используют эту технику. Просто Google "Драйвер Android JDBC через HTTP".

0 голосов
/ 21 мая 2011

Чтобы обеспечить подключение к удаленной базе данных в Android, необходимо будет использовать WebService, поскольку у Android нет API для подключения к удаленной базе данных.

0 голосов
/ 27 января 2011

Вы пробовали смотреть на ContentProviders? http://developer.android.com/guide/topics/providers/content-providers.html

Вероятно, вам удастся получить больше доступа к данным через его реализацию (например, базу данных SQLite), чем к непосредственному доступу к MySQL.

...