Jdbc для android studio

Android. Работаем с MS SQL без посредников

Предупреждение:
Вообще говоря, информация из статьи применима только для некоторых специфических случаев. Например, когда приложение работает внутри какого-то сегмента изолированной сети. А в общем случае посредник, коим является http-сервер, всё-таки нужен. Хотя бы потому, что при описанном методе логин/пароль доступа к базе зашиты в приложении и передаются по сети.

Статья является продолжением работы, о которой писал в своём предыдущем посте. Изначально эту часть писать не хотелось (см. предупреждение), но на хабре данная тема ещё не освещена, и в целом в сети меньше информации.
Поэтому, если Вам интересно, как можно из под Android напрямую работать с MS SQL (логично предположить, что и с другими БД, но на практике я этого не делал), добро пожаловать под кат.

В Java (и Android соответственно) соединение с удалёнными БД происходит при помощи JDBC-драйверов. В моём конкретном случае сервер майкрософтовский, и для него существует два драйвера: от Microsoft и открытая альтернатива JTDS. Причём последний, по заверениям разработчиков, работает быстрее и стабильней официального. Вот его и будем использовать.

Грабли: Актуальная версия JTDS на дату написания поста — 1.3.1. Но начиная с версии 1.3.0 драйвер переписан для совместимости с Java 7, и в сети встречаются сообщения о проблеме работы этих версий в Android. Поэтому необходимо использовать последнюю стабильную версию ветки 1.2.* (1.2.8), которая для Java 6.

На SQL-сервере должна быть настроена работа через TCP/IP.

Получение данных

Данные запросов драйвер возвращает в интерфейсе ResultSet который похож на андроидный Cursor, но быстрого способа приведения ResultSet к курсору я не нашёл. Поэтому поступим по-другому, данные из ResultSet будут конвертироваться в массив JSONArray и возвращаться в основную логику приложения, откуда с ними можно будет делать что угодно.

Весь обмен данными, как потенциально продолжительную операцию, будем делать асинхронно. В итоге получается примерно такой симпатичный класс для запросов к MS SQL:

EDIT: Переписал закрытие Connection, Statement и ResultSet в примерах в соответствии с основами.

На вход классу подаётся запрос, на выходе — готовый JSONArray, как если бы мы получали данные от веб-сервера. В отдельном потоке AsyncTask соединяется с сервером, получает данные в ResultSet и формирует из них JSON. Думаю, в целом код примитивен и в пояснениях не нуждается.

Для построения систем, работающих по подобному принципу, лучше передавать на вход не чистые select-запросы, а написать на сервере готовые T-SQL функции, передавая параметры к которым, можно получать нужные выборки.

Читайте также:  Правда ли что андроид глючит
Insert и Update. Передача данных на сервер

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

EDIT: по совету eyeless_watcher использую метод addBatch() при заполнении PreparedStatement. Вот теперь вставка данных выполняется на самом деле быстро, в одной транзакции. Пример изменил.

Для вставки нужных значений используется PreparedStatement. Нумерация полей в нём почему-то начинается с единицы (см. документацию). А в остальном — всё должно быть понятно. update можно реализовать схожим образом, аналогично используя executeUpdate.

Приведённый подход был использован мной в «боевом» приложении первый раз.
На практике оказалось, что он стабильно работает. Время соединения с БД иногда может занимать несколько секунд (подключаюсь по wi-fi, сервер общий на всё предприятие), но сами транзакции выполняются быстро.

Источник

Как Mysql JDBC Драйвер для Android Studio

Я хочу подключиться к удаленной базе данных SQL через JDBC Я работаю на Android Studio, но при выполнении я получил эту ошибку

Так как я могу добавить драйвер JDBC в Android Studio??

2 ответа

  1. Загрузите JDBC и распакуйте файл .jar
  2. Откройте Android Studio и ваш интересный проект
  3. Откройте левую панель на вкладке 1.Проект
  4. Щелкните правой кнопкой мыши на папке модуля приложения и перейдите в » Создать» > » Модуль» и там выберите » Импорт.JAR/.AAR пакета».
  5. В первом поле вы должны вставить каталог ранее извлеченного файла .jar. Вы можете просмотреть свои папки, нажав на крайний правый значок с 3 точками (. )

После того как вы выбрали файл .jar и ваш проект синхронизируется, вы можете перейти к следующим шагам:

  1. Снова щелкните правой кнопкой мыши на папке модуля приложения и выберите » Открыть настройки модуля».
  2. В левой навигационной панели вновь открытого окна перейдите в категорию Модули и выберите приложение, а затем вкладку Зависимости.
  3. Там нажмите на зеленый плюс (+) и выберите Зависимости модуля. Выберите модуль mysql.
  4. Нажмите OK и закройте все открытые окна. Процесс синхронизации должен произойти еще раз.
  5. Если все было сделано правильно, в папке модуля вашего приложения вы должны увидеть папку модуляmysql-connector-java.
  6. Не забудьте включить нужные классы в ваш код.

Поиск проблемы
В моем случае мне пришлось удалить модуль и переустановить его. Причина была в том, что модуль был скомпилирован с Java 1.8 вместо 1.7 (в настоящее время поддерживается Android Studio ver:1.5.1).

Источник

Как установить драйвер jdbc в Android Studio?

Как правильно установить JDBC драйвер для работы с Tomcat?
Я долго мучался, пытаясь понять, почему при обращении к БД возникает СlassNotFoundException.

Как установить Android Studio?
Всем привет! На оф. сайте взял дистрибутив и установил Android Studio. Инсталяцию произвёл в.

Как установить SDK в Android Studio
Нужна помощь. Вчера написал игру на движке unity. Выяснилось что нужно установить Android SDK .

Как подключить jdbc драйвер?
скачал mysql-connector-java-5.1.14 а как его подключить не знаю, работаю в среде NetBeans 7.3 в ОС.

korshun84, почему нет?
разве вопрос про это был?

Читайте также:  Viber перенести переписку андроид

Сергей241995, я думаю надо скачать актуальный jar файл и подключить его так

korshun84, во первых можно хранить так что их не достанете на native уровне с проверкой подписи приложения.
во вторых в mysql создам пользователя только для SELECT например и дам вам и пароль и логин, что вы сделаете.
в третьих ну сохранил он в базе логин и пароль, и что? вы его другими программами без root не достанете, а если на устройстве root это отдельный разговор.

ExFau$t, да по. й на моду. Человек не спрашивал тебя или его как все делают.

Есть задачи например в локальной сети, где не надо городить прослойки.
Да, это не безопасно, но еще раз, дам тебе ограниченного пользователя и что?

Как по мне легче php нагнуть, который обеспечивает прослойку, много кто говнокод там пишет без проверок и с root’ом пользователя, чем вот передо мной порт базы, но я не знаю ни логина ни пароля.

Есть разные задачи, для которых следует рационально подходить и решать их, а если мыслить «Так делают все, я узко мыслю и не было таких задач» то да.

Я могу дать ip и порт mysql базы, кто её нагнёт? Тут 90% кричат что это не безопасно, но сами в этом вопросе нубы полнейшие и с базой ничего не сделают.

Источник

Подключение к удаленной бд mysql в Android studio

Добрый день, пытаюсь реализовать удаленное подключение к бд (phpmyadmin). Взял бесплатный хостинг Beget.com. Получилось подключиться из файлового менеджера к бд. А в андройд студио не получается подключиться, помогите

Подключение к удаленной бд MySQL в Android
Необходимо подключиться к внешней БД MySQL в Android приложении, которое бы использовало ресурсы.

Embarcadero rad studio xe5 программирование под android подключение к mysql
надо написать приложение которое бы подключалось к mysql удаленно делфи в принципе знаю но вот с.

Как подключиться к удаленной бд в Android studio
Есть сайт с бд phpmyadmin, хочу подключиться из Android studio к удаленной бд phpmy admin, помогите.

Подключение к удаленной БД MySQL
Возникла такая проблема: 1.Нужно найти сервис на котором бд будет стоять вечно. 2.Немогу.

09/25 14:03:52: Launching app
$ adb push /Users/lewan/Desktop/Новая папка 17.59.50/AndroidStudioProjects/test_db/app/build/outputs/apk/debug/app-debug.apk /data/local/tmp/com.example.lewan.test_db
$ adb shell pm install -t -r «/data/local/tmp/com.example.lewan.test_db»
Success

$ adb shell am start -n «com.example.lewan.test_db/com.example.lewan.test_db.MainActivity» -a android.intent.action.MAIN -c android.intent.category.LAUNCHER
Client not ready yet..Waiting for process to come online
Connected to process 4424 on device emulator-5554
Capturing and displaying logcat messages from application. This behavior can be disabled in the «Logcat output» section of the «Debugger» settings page.
W/e.lewan.test_d: Accessing hidden method Landroid/view/View;->computeFitSystemWindows(Landroid/graphics/Rect;Landroid/graphics/RectZ (light greylist, reflection)
W/e.lewan.test_d: Accessing hidden method Landroid/view/ViewGroup;->makeOptionalFitsSystemWindows()V (light greylist, reflection)
W/System.err: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver
W/System.err: at java.lang.Class.classForName(Native Method)
at java.lang.Class.forName(Class.java:453)
at java.lang.Class.forName(Class.java:378)
W/System.err: at com.example.lewan.test_db.MainActivity.onCreate(MainActivity .java:43)
W/System.err: at android.app.Activity.performCreate(Activity.java:7136)
at android.app.Activity.performCreate(Activity.java:7127)
at android.app.Instrumentation.callActivityOnCreate(Instrumenta tion.java:1271)
at android.app.ActivityThread.performLaunchActivity(ActivityThr ead.java:2893)
W/System.err: at android.app.ActivityThread.handleLaunchActivity(ActivityThre ad.java:3048)
at android.app.servertransaction.LaunchActivityItem.execute(Lau nchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCal lbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(Tr ansactionExecutor.java:68)
W/System.err: at android.app.ActivityThread$H.handleMessage(ActivityThread.ja va:1808)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run( RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
Caused by: java.lang.ClassNotFoundException: Didn’t find class «com.mysql.jdbc.Driver» on path: DexPathList[[zip file «/data/app/com.example.lewan.test_db-Kfe0BSOCldYQOBfJOp01IQ==/base.apk»],nativeLibraryDirectories=[/data/app/com.example.lewan.test_db-Kfe0BSOCldYQOBfJOp01IQ==/lib/x86, /system/lib]]
W/System.err: at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoade r.java:134)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
. 19 more
D/OpenGLRenderer: Skia GL Pipeline
D/: HostConnection::get() New Host Connection established 0xee146a80, tid 4451
I/ConfigStore: android::hardware::configstore::V1_0::ISurfaceFlingerConfigs ::hasWideColorDisplay retrieved: 0
android::hardware::configstore::V1_0::ISurfaceFlingerConfigs ::hasHDRDisplay retrieved: 0
I/OpenGLRenderer: Initialized EGL, version 1.4
D/OpenGLRenderer: Swap behavior 1
W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without.
D/OpenGLRenderer: Swap behavior 0
D/EGL_emulation: eglCreateContext: 0xe5ede020: maj 3 min 0 rcv 3
D/EGL_emulation: eglMakeCurrent: 0xe5ede020: ver 3 0 (tinfo 0xe88979a0)
D/EGL_emulation: eglMakeCurrent: 0xe5ede020: ver 3 0 (tinfo 0xe88979a0)

Читайте также:  Где андроид сохраняет пароль от wifi

Источник

Работа с базами данных с помощью JDBC драйвера

В этом уроке я бы хотел вас научить работать с базами данных MySQL, PostgreSQL, Oracle. А именно как подключится и выполнять SQL запросы к базе с помощью java.

Что такое JDBC?

JDBC Driver – (Java DataBase Connectivity — соединение с базами данных на Java) — платформенно-независимый промышленный стандарт взаимодействия Java-приложений с различными СУБД, реализованный в виде пакета java.sql , входящего в состав Java SE.

Зачем нужен JDBC?

JDBC – позволяет получать доступ к БД, а также выполнять к ней SQL запросы.

Шаг 1.

Скачиваем jar файл JDBC драйвера.

Шаг 2.

Подключение к БД Mysql:

Подключение к БД PostgreSQL:

Подключение к БД Oracle:

В 1-й строке мы указываем наш JDBC драйвер. Не забудьте добавить его в ClassPath иначе его компилятор его не увидит.
Во 2-й строке JDBC Manager который открывает соединение с базой данных и обеспечит нам дальнейшее обращение к ней.
И последняя строка закрывает соединение с БД.

Желательно строку для определения JDBC поместить в блок try для того чтобы контролировать его наличия в вашем приложении.

Шаг 3. Создание таблиц в БД.

Вынесем в отдельный метод соединение с БД.

Этот метод будет создавать в БД таблицу:

и в main методе вызываем метод createDbTable() который создаст таблицу в БД.

В результате вы должны получить:

Шаг 4. Добавление новой записи в БД.

метод который будет возвращать текущую дату и время:

И выполняем наш SQL запрос который лежит в переменной insertTableSQL

Шаг 5. Получение данных с БД.

Шаг 6. Удаление данных с БД.

Выполняем запрос на удаление:

Шаг 7. Обновление данных в БД.

Выполняем запрос на обновление записи:

Выводы.

Все действия с любой базой данных выполняются через SQL запросы, то есть нам достаточно знать SQL для манипуляцией данными в БД.

ПОХОЖИЕ ПУБЛИКАЦИИ

29 комментариев к статье «Работа с базами данных с помощью JDBC драйвера»

Проблема с подключением jdbc к приложению для Android – заголовок комментария.

Почему в жизни так бывает …

строка Connection connection = DriverManager.getConnection(“jdbc:postgresql://хост:порт/имя_дб”,”пользователь”, “пароль”);
выдаёт ошибку Unhandled exception type SQLException
( строка connection.close(); – выдаёт туже ошибку )

При добавлении строки import java.sql.SQLException; в MainActivity.java
выводит сообщение …
The import java.sql.SQLException is never used

При этом файл postgresql-9.2-1002.jdbc4.jar лежит в /libs

И в classpath добавлять пробовал, хотя многие источники говорят, что это не обязательно, достаточно держать файл postgresql-9.2-1002.jdbc4.jar в /libs

При нажатие ctrl+shift+O Eclips добавляет только:

Источник

Оцените статью