Android JDBC не работает: ClassNotFoundException на драйвере - PullRequest
7 голосов
/ 28 августа 2011

Я пытаюсь использовать JDBC в своем приложении Android для подключения к удаленной базе данных для выполнения вставок, запросов и т. Д. Я успешно подключился и выполнил эти действия в другом проекте JAVA.Итак, я решил, что, поскольку Android - это Java, я мог бы просто перенести соответствующий код, добавить тот же путь сборки для драйвера и т. Д. Но это дает мне ошибку:

java.lang.ClassNotFoundException: com.mysql.jdbc.Driver

Я действительно не думаю,это проблема кода, так как тот же код работает в проекте Java (который я просто выполняю в main ()).Но для справки:

String url = "jdbc:mysql://localhost:3306/eventhub_test"; //
    String user = "root"; 
    String pass = "";

 SQLUtils sqlu = new SQLUtils(url, user, pass);

// класс SQLUtils, который я создал:

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();

}
}

Так что я действительно запутался здесь.JDBC не работает с Android?Если это так, скажите мне, какие альтернативы я должен искать для удаленного доступа к базе данных MySQL.

Спасибо.

Ответы [ 7 ]

24 голосов
/ 28 августа 2011

JDBC не работает с Android?

JDBC редко используется на Android, и я, конечно, не рекомендовал бы его.

ИМХО, JDBC разработан для высоконадежных сетевых соединений с высокой пропускной способностью и низкой задержкой (например, между настольным компьютером и сервером базы данных, сервером веб-приложений и сервером базы данных). Мобильные устройства предлагают мало из них, и ни одно из них последовательно.

Если так, скажите мне, какие альтернативы мне следует рассмотреть для удаленного доступа к базе данных MySQL.

Создайте веб-сервис вокруг своей базы данных и получите к нему доступ из Android.

В качестве дополнительных преимуществ вы улучшаете безопасность (вместо того, чтобы оставить базу данных открытой), можете разгрузить некоторую бизнес-логику от клиента, можете лучше поддерживать другие платформы (например, веб-или мобильные веб-платформы) и т.д.

8 голосов
/ 30 мая 2012

У меня была тонна проблем с этим по какой-то причине. В другом месте упоминается, что работает только драйвер 3.017, и, поскольку я дал такие подробные инструкции, я решил поделиться ими. (Моя первоначальная цель состояла в том, чтобы предпринять шаги для воспроизведения ошибки, которую я мог бы использовать, чтобы задать вопрос здесь и в других местах. Нет, я не могу догадаться, почему у меня было так много проблем, оглядываясь назад)


Кому: получить драйвер JDBC в приложении для Android

  • Новый проект Android - AndroidJDBCTest, Target Android4.03, минимум SDK 8 (Android 2.2), имя пакета «com.test.AndroidJDBCTest»
  • Щелкните правой кнопкой мыши по проекту, новая папка «libs»
  • Загрузите Mysql JDBC Driver с здесь и распакуйте его в свою файловую систему.
  • Перейдите в корневой каталог после извлечения и перетащите jar mysql-connector-java-3.0.17-ga-bin.jar в / libs в вашем проекте в проводнике проектов в Eclipse., Используя для копирования и перетаскивания настройку по умолчанию.
  • Щелкните правой кнопкой мыши на Eclipse Project, Build Path-Configure Build Path, добавьте JAR на вкладке библиотеки - найдите / AndroidJDBCTest / libs и файл jar и нажмите ok
  • ПРИМЕЧАНИЕ. Теперь он отображается в узле «Библиотеки со ссылками» (если Eclipse настроен на его отображение)
  • Добавить код от здесь до конца onCreate() - в основном Class.forName("com.mysql.jdbc.Driver").newInstance();
  • Подключите сотовое устройство, такое как семейство Motorola Xoom Edition, и запустите
4 голосов
/ 28 августа 2011

Оставляя в стороне действительные возражения, вы можете заставить его работать.

Во-первых, убедитесь, что у вас есть действительный файл драйвера в пути сборки, я использовал

mysql-connector-java-5.1.7-bin.jar

Во-вторых, если вы пытаетесь сделать это в эмуляторе, а ваша база данных находится на вашей машине разработки, «localhost» не годится в URL. Вам нужно '10 .0.2.2 '

Мой URL:

String url = "jdbc:mysql://10.0.2.2/test";

тест, являющийся моим именем в БД.

У меня есть таблица с названием «книги» с колонкой «title»

У меня работает следующий код:

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();
    }

}

Проходя в отладчике, я вижу заголовки в строковой записи

3 голосов
/ 28 августа 2011

Теоретически вы должны это сделать.Вам нужно включить Jar-драйвер MySQL JDBC в ваш проект, чтобы ваш код работал ( здесь - аналогичный пост с решениями).

Но, вероятно, не очень хорошая идея .Лучше, если вы представите содержимое базы данных через выделенный (REST) ​​API на вашем сервере.

Они на самом деле не дают причин для ссылки, но являются одной из основных причин, почему плохая идея выставлять вашиБаза данных напрямую из-за проблем безопасности.Большинство ваших пользователей будут вести себя хорошо и делать только то, что они должны делать со своим телефоном, но представьте, что это не так.

Если у него есть действительный логин для вашей базы данных, он / она может просто подключиться квашей базы данных, делайте все виды SELECT или даже можете изменять / уничтожать данные, если разрешения позволяют ему.

Поэтому у вас должен быть промежуточный веб-сервер, который проверяет и дезинфицирует любые запросы, поступающие от пользователя в порядкечтобы убедиться, что из базы данных MySQL можно извлечь только те данные, которые вы намеревались раздать.

0 голосов
/ 23 июня 2018

Если вы разрабатываете с помощью Android Studio, добавление этой строки в вашу зависимость от gradle делает чудеса.

 compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.44'

И вы можете изменить версию в соответствии со своими потребностями.

Последобавив это, Gradle Sync позаботится обо всем, вам просто нужно подключиться к БД так же, как в простой java-программе jdbc.

0 голосов
/ 20 мая 2016

попробуйте изменить файл Gradle

 targetSdkVersion 8
0 голосов
/ 07 марта 2014

Убедитесь, что вы поместили соединитель в папку библиотеки проекта. поместите его туда, это решит проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...