- Android. Работаем с MS SQL без посредников
- Как Mysql JDBC Драйвер для Android Studio
- 2 ответа
- Как установить драйвер jdbc в Android Studio?
- Подключение к удаленной бд mysql в Android studio
- Работа с базами данных с помощью JDBC драйвера
- Что такое JDBC?
- Зачем нужен JDBC?
- Шаг 1.
- Шаг 2.
- Шаг 3. Создание таблиц в БД.
- Шаг 4. Добавление новой записи в БД.
- Шаг 5. Получение данных с БД.
- Шаг 6. Удаление данных с БД.
- Шаг 7. Обновление данных в БД.
- Выводы.
- ПОХОЖИЕ ПУБЛИКАЦИИ
- 29 комментариев к статье «Работа с базами данных с помощью JDBC драйвера»
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 ответа
- Загрузите JDBC и распакуйте файл .jar
- Откройте Android Studio и ваш интересный проект
- Откройте левую панель на вкладке 1.Проект
- Щелкните правой кнопкой мыши на папке модуля приложения и перейдите в » Создать» > » Модуль» и там выберите » Импорт.JAR/.AAR пакета».
- В первом поле вы должны вставить каталог ранее извлеченного файла .jar. Вы можете просмотреть свои папки, нажав на крайний правый значок с 3 точками (. )
После того как вы выбрали файл .jar и ваш проект синхронизируется, вы можете перейти к следующим шагам:
- Снова щелкните правой кнопкой мыши на папке модуля приложения и выберите » Открыть настройки модуля».
- В левой навигационной панели вновь открытого окна перейдите в категорию Модули и выберите приложение, а затем вкладку Зависимости.
- Там нажмите на зеленый плюс (+) и выберите Зависимости модуля. Выберите модуль mysql.
- Нажмите OK и закройте все открытые окна. Процесс синхронизации должен произойти еще раз.
- Если все было сделано правильно, в папке модуля вашего приложения вы должны увидеть папку модуляmysql-connector-java.
- Не забудьте включить нужные классы в ваш код.
Поиск проблемы
В моем случае мне пришлось удалить модуль и переустановить его. Причина была в том, что модуль был скомпилирован с 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, почему нет?
разве вопрос про это был?
Сергей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)
Источник
Работа с базами данных с помощью 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 добавляет только:
Источник