- Android. Работаем с MS SQL без посредников
- Connect Android Studio to MSSQL
- Работаем с базами данных в Java (на примере Microsoft SQL Server)
- Скачивание драйвера Microsoft JDBC Driver for SQL Server
- Скачивание
- Сведения о версии
- Доступные языки
- Заметки о выпуске
- Предыдущие выпуски
- Использование JDBC Driver с Maven Central
- Неподдерживаемые драйверы
- Дальнейшие действия
- Как использовать базу данных MySQL в Java
- Авторизуйтесь
- Как использовать базу данных MySQL в Java
- Подключаем базу данных MySQL с помощью JDBC
- Программа на Java, которая использует базу данных
- Получаем данные с помощью SELECT-запроса в JDBC
- Добавляем данные с помощью INSERT-запроса в 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, сервер общий на всё предприятие), но сами транзакции выполняются быстро.
Источник
Connect Android Studio to MSSQL
1. Download jtds-1.2.7.jar library file and add it to your application.
– This library file helps in connecting ANDROID and MS SQL Database.
– Download here
2. Copied jtds-1.2.7.jar in the /libs folder and added it as a library (right click->Add as library).
– This includes the jar in android studio so it can be referenced from the source files.
3. Open your gradle module App and add the following to build.gradle (Module App).
compile fileTree(dir: ‘libs’, include: [‘*.jar’])
compile project(‘libs/jtds-1.2.7.jar’) // Add this line to your dependencies
4. Open your AndroidManifest.xml file and add the following permission.
5. Create a new class file with name ConnectionClass.java and declare following string variables :
public class ConnectionClass <
String ip = “your IPv4 address”;
String db = “database name”;
String un = “username”;
String password = “password”;
@SuppressLint(“NewApi”)
public Connection CONN() <
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
Connection conn = null;
String ConnURL = null;
try <
Class.forName(“net.sourceforge.jtds.jdbc.Driver”);
ConnURL = “jdbc:jtds:sqlserver://” + ip + “/” + db+ “;user=” + un + “;password=” + password + “;”;
>catch (SQLException se)
<
Log.e(“error here 1 : “, se.getMessage());
>
catch (ClassNotFoundException e)
<
Log.e(“error here 2 : “, e.getMessage());
>
catch (Exception e)
<
Log.e(“error here 3 : “, e.getMessage());
>
Источник
Работаем с базами данных в Java (на примере Microsoft SQL Server)
Практически ни одно серьёзное современное приложение не обходится без баз данных. Поэтому на сегодняшний день практически все основные языки программирования поддерживают работу с ними. Java не исключение.
Рассмотрим работу с базами данных в Java на примере Microsoft SQL Server.
В Java для доступа к базам данных используется технология JDBC. Это платформенно-независимый стандарт, который поддерживает большинство современных СУБД.
Работа с базами данных с помощью JDBC строится по следующему алгоритму:
- Подключение к проекту библиотеки с драйвером;
- Подключение к базе данных;
- Собственно работа с базой данных посредством SQL запросов.
Подключение драйвера СУБД к проекту
Драйвер СУБД для JDBC, если он не входит в состав JDK, как правило, можно скачать с официального веб ресурса её разработчика. В частности, JDBC драйвер для Microsoft SQL Server можно скачать здесь.
Драйвер СУБД представляет собой обычный jar файл. Его подключение к проекту ничем не отличается от подключения любой другой библиотеки.
Подключение приложения к базе данных
Вначале требуется сформировать строку подключения. Для Microsoft SQL Server она имеет следующий вид.
Рассмотрим подробнее шаблон строки подключения (переменная connectionUrl). Он начинается с двух ключевых параметров отделённых друг от друга и остальной части строки подключения двоеточиями:
- Стандарт подключения к базе данных (jdbc);
- Идентификатор драйвера (в данном случае sqlserver).
После идентификатора драйвера следует описание параметров подключения в соответствии с требованиями той или иной конкретной СУБД.
В случае Microsoft SQL Server имя сервера необходимо указывать в формате имя_хоста\имя_экземпляра. Например: ServerDB\SQLSERVER_1. При этом не играет роли, откуда осуществляется подключение, локально с самого хоста или по сети.
На это необходимо обратить особе внимание, так как даже в статье на TechNet строка подключения приведена с ошибкой. По крайней мере, с новым драйвером, который поддерживает последние версии Microsoft SQL Server и Java, приведённая в ней строка подключения по факту не работает.
После формирования строки подключения следует зарегистрировать драйвер СУБД.
Источник
Скачивание драйвера Microsoft JDBC Driver for SQL Server
Microsoft JDBC Driver for SQL Server — это драйвер JDBC типа 4, который обеспечивает обмен данными с базами данных через стандартные API-интерфейсы JDBC, доступные на платформе Java. Все пользователи могут скачать драйвер без дополнительной оплаты. Они предоставляют доступ к SQL Server из любого приложения Java, сервера приложений Java или приложения с поддержкой Java.
Скачивание
Версия 9.4 является последней общедоступной (GA) версией. Она поддерживает Java 8, 11 и 16. Если вам нужно использовать среду выполнения Java более ранней версии, ознакомьтесь с таблицей поддержки спецификаций Java и JDBC, чтобы узнать, можете ли вы использовать поддерживаемую версию. Мы постоянно работаем над улучшением поддержки возможностей подключения Java. Настоятельно рекомендуем использовать последнюю версию драйвера Microsoft JDBC.
Скачать драйвер Microsoft JDBC Driver 9.4 для SQL Server (ZIP)
Скачать драйвер Microsoft JDBC Driver 9.4 для SQL Server (TAR.GZ)
Сведения о версии
- Номер выпуска: 9.4.0
- Дата выпуска: 4 август 2021 г.
При скачивании драйвера вы увидите несколько JAR-файлов. Имя каждого JAR-файла обозначает поддерживаемую версию Java.
Если вы открываете локализованную версию этой страницы и хотите просмотреть наиболее актуальное содержимое, выберите элемент Прочитать на английском в верхней части этой страницы. С версии сайта US-English вы можете скачать SSMS на других языках из числа доступных.
Доступные языки
Этот выпуск драйвера Microsoft JDBC Driver for SQL Server доступен на следующих языках:
Заметки о выпуске
Дополнительные сведения об этом выпуске см. в заметках о выпуске и требованиях к системе.
Предыдущие выпуски
Использование JDBC Driver с Maven Central
JDBC Driver можно включить в проект Maven, добавив его в качестве зависимости в файл POM.xml с помощью следующего кода:
Неподдерживаемые драйверы
Скачивание неподдерживаемых версий драйверов здесь недоступно. Мы постоянно работаем над улучшением поддержки возможностей подключения Java. Настоятельно рекомендуем использовать последнюю версию драйвера Microsoft JDBC.
Дальнейшие действия
Дополнительные сведения о драйвере Microsoft JDBC для SQL Server см. в статье Общие сведения о JDBC Driver и в репозитории JDBC Driver на сайте GitHub.
Источник
Как использовать базу данных MySQL в Java
Авторизуйтесь
Как использовать базу данных MySQL в Java
В этой статье мы научимся подключаться к базе данных MySQL из Java-кода и выполнять простые запросы для получения и обновления данных. Для того, чтобы получить доступ к базе данных, мы будем использовать JDBC (Java Database Connectivity) API, который входит в стандартную библиотеку Java. JDBC позволяет подключиться к любой базе данных: Postgres, MySQL, SQL Server, Oracle и т. д. — при наличии соответствующей реализации драйвера, необходимого для подключения. Для базы данных MySQL мы будем использовать драйвер Type 4 JDBC из пакета mysql-connector-java-5.1.23-bin.jar . Он написан на чистой Java, а значит, нам не понадобятся какие-либо нативные библиотеки или ODBC-мост. Все, что нам надо будет сделать — это положить JAR-файл в директорию, содержащуюся в CLASSPATH. JAR-файл содержит класс com.mysql.jdbc.Driver , необходимый для подключения к MySQL. Если его не окажется в CLASSPATH, во время выполнения программы выбросится исключение java.lang.ClassNotFoundException , поэтому убедитесь, что вы правильно настроили пути.
Кстати, если вы ищете хорошую книгу по использованию JDBC, обратите внимание на Practical Database Programming with Java (Ying Bai). Это относительно новая книга, и в ней рассматриваются две самые популярные базы данных: Oracle и SQL Server 2008. В книге используется IDE NetBeans для примеров и описываются все инструменты, необходимые для работы с базами данных в Java. Это отличная книга для начинающих и опытных программистов.
Подключаем базу данных MySQL с помощью JDBC
Для того, чтобы подключить базу данных MySQL, нам потребуется четыре вещи:
- Строка подключения JDBC (например:
jdbc:mysql://localhost:3306/test). - Имя пользователя (root).
- Пароль (root).
- База данных с некоторым количеством таблиц для примера (например, база данных книг).
Строка подключения для MySQL начинается с jdbc:mysql . Это название протокола соединения, за которым следуют хост и порт подключения, на которых запущена база данных. В нашем случае это localhost с портом по умолчанию 3306 (если вы его не поменяли при установке). Следующая часть — test — имя базы данных, которая уже существует в MySQL. Мы можем создать таблицу Books :
и наполнить её хорошими книгами:
Программа на Java, которая использует базу данных
Теперь давайте напишем программу на Java, которая будет подключаться к нашей базе данных, запущенной на localhost . Важно помнить о том, что необходимо закрывать соединение, запросы и результат выполнения после завершения работы с ними. Также важно закрывать их в finally-блоке, со своей try/catch оберткой, поскольку сам метод close() может кинуть исключение, что приведет к утечке ресурсов. За подробной информацией вы можете обратиться к этой статье. Кроме того, вы можете использовать обертку try-with-resource, которая появилась в Java 7. Более того, это стандартный способ работы с ресурсами в Java 1.7.
При первом запуске у вас, возможно, будет ошибка No suitable driver found for jdbc:mysql , если драйвера MySQL нет в CLASSPATH:
Добавим нужный JAR-файл в путь и снова запустим программу. Другая частая ошибка — указать таблицу в строке соединения: jdbc:mysql://localhost:3306/test/book . В этом случае вылетит следущее исключение:
Успешный запуск программы выведет на экран следующее:
Результат верный, поскольку у нас в таблице только две книги: «Effective Java» и «Java Concurrency in Practice».
Кстати, если у вас был драйвер при компиляции, но отсутствует при запуске, вы получите исключение java.lang.ClassNotFoundException: com.mysql.jdbc.Driver . О том, как исправить эту ошибку, вы можете прочитать здесь.
Получаем данные с помощью SELECT-запроса в JDBC
Для получения данных из БД вы можете выполнить SELECT-запрос. В первом примере мы уже его использовали, но получили только количество строк. Теперь мы вернем сами строки. Большая часть программы останется без изменений, за исключением SQL-запроса и кода, возвращающего данные из объекта ResultSet :
Этот код выведет на экран следующее:
Тут есть пара моментов, на которые следует обратить внимание. Метод rs.getInt(1) используется для получения столбца с целочисленным типом, в нашем случае это столбец «id». Индексы в JDBC начинаются с единицы, поэтому rs.getInt(1) вернет значение первого столбца как целое число. В случае, если вы укажете неверный индекс (многие разработчики вызывают rs.getInt(0) для получения первого столбца), выбросится исключение InvalidColumnIndexException . Доступ к столбцам по индексу чреват ошибками, поэтому лучше использовать имя столбца, например, rs.getInt(«id») . Подробнее об этом вы можете прочитать в этой статье. Метод getString() используется для получения строковых значений из базы (например, VARCHAR ). Цикл будет выполняться, пока rs.next() не вернет false . Это значит, что строки закончились. В нашем случае в таблице две строки, поэтому цикл выполнится два раза, выводя информацию о книгах из таблицы на экран.
Добавляем данные с помощью INSERT-запроса в JDBC
Добавление данных мало отличается от их получения: мы просто используем INSERT-запрос вместо SELECT-запроса и метод executeUpdate() вместо executeQuery() . Этот метод используется для запросов INSERT, UPDATE и DELETE, а также для SQL DDL выражений, таких как CREATE, ALTER или DROP. Эти команды не возвращают результата, поэтому мы убираем все упоминания ResultSet ‘а в коде и изменяем запрос соответственно:
После запуска программы вы можете проверить таблицу в СУБД. На этот раз вы увидите три записи в таблице:
Теперь вы умеете подключаться к MySQL из Java-приложения и выполнять SELECT, INSERT, DELETE и UPDATE-запросы так же, как и в MySQL GUI. Для подключения мы используем объект Connection , для чтения результатов запроса — ResultSet . Убедитесь перед подключением, что сервер MySQL запущен и mysql-connector-java-5.1.17-bin.jar находится в CLASSPATH, чтобы избежать ClassNotFoundException .
4–5 декабря, Онлайн, Беcплатно
Когда разберетесь с подключением и простыми запросами, имеет смысл изучить, как использовать подготавливаемые запросы (Prepared Statement) в Java для избежания SQL-инъекции. В боевом коде всегда следует использовать подготавливаемые запросы и связывание переменных.
Если вам понравилось это руководство и не терпится узнать больше о подключении и работе с базой данных из Java-программ, обратите внимание на следующие статьи:
Источник