Как связаться с sql server в android
Перейти к содержимому

Как связаться с sql server в android

  • автор:

Мобильные отчеты SQL Server: руководство по использованию

Издатель мобильных отчетов для SQL Server не рекомендуется использовать во всех выпусках SQL Server Reporting Services после SQL Server Reporting Services 2019. Она прекращена с SQL Server Reporting Services 2022 года и Сервер отчетов Power BI.

Используйте пошаговые инструкции по созданию мобильных отчетов для экрана любого размера с помощью издателя мобильных отчетов SQL Server на портале Reporting Services и по просмотру отчетов в мобильных приложениях Power BI.

Мобильные отчеты можно создавать в области конструктора с настраиваемыми строками и столбцами сетки, а также гибкими элементами мобильных отчетов. Подключайтесь к различным локальным источникам данных или передавайте книги Excel для создания мобильных отчетов. Затем сохраните отчеты на веб-портале Reporting Services и просматривайте их в обозревателе или мобильных приложениях Power BI.

В этой статье описаны следующие операции.

  • Создание общего источника данных и набора данных на веб-портале Reporting Services с использованием базы данных AdventureWorks в качестве образца источника данных.
  • Создание мобильного отчета Reporting Services в издателе мобильных отчетов
  • Публикация мобильного отчета на веб-портале Reporting Services.
  • просмотр мобильных отчетов в мобильном приложении Power BI.

Действия перед началом работы

Для начала вам потребуются такие продукты:

  • Для создания источников данных и ключевых показателей эффективности, а также для публикации наборов данных и мобильных отчетов нужен доступ к серверу отчетов Reporting Services в собственном режиме.
  • Для создания общих наборов данных нужно установить построитель отчетов.
  • Для создания мобильных отчетов установите издатель мобильных отчетов для Microsoft SQL Server.
  • Образцы баз данных AdventureWorks.
  • ИЛИ образец базы данных World Wide Importers, доступный на странице Образцы Microsoft SQL Server.
  • Для просмотра результата:
    • зарегистрируйтесь в службе Power BI и
    • скачайте мобильное приложение Power BI на свое мобильное устройство с iOS, телефон с Android или устройство с Windows.

    Создание общего источника данных

    Вы можете создать общий источник данных для мобильных отчетов из любого источника данных, поддерживаемого службами Reporting Services. См. список поддерживаемых источников данных.

    1. На веб-портале Reporting Services нажмите Создать>Источник данных. PBI_SSMRP_NewMenu
    2. Введите сведения об источнике данных и нажмите >OK. По умолчанию источники данных не отображаются на портале.
    3. Чтобы просмотреть источники данных, щелкните Отображение>Источник данных. PBI_SSMRP_DisplayDataSources
    4. Теперь источник данных отображается на портале Reporting Services. PBI_SSMRP_PortlDataSource

    Создание общего набора данных

    Используйте существующее клиентское средство Reporting Services, например, конструктор отчетов в SQL Server Data Tools (SSDT), для создания общего набора данных. В этом пошаговом руководстве используется построитель отчетов. Установите построитель отчетов или запустите его на своем веб-портале. Вы создадите три набора данных: один для значения ключевого показателя эффективности, второй для тренда ключевого показателя эффективности и один с дополнительными полями для мобильного отчета служб Reporting Services.

    1. На веб-портале Reporting Services нажмите Создать>Отчет с разбиением на страницы, чтобы запустить построитель отчетов. PBI_SSMRP_NewMenu
    2. Щелкните Создать набор данных. PBI_SSMRP_RBNewDataset
    3. Щелкните Просмотр других источников данных.
    4. В поле «Имя» введите имя сервера, на котором сохранен источник данных в таком формате: Имя: https://localhost/ReportServer
      Элементы типа: источники данных (*.rsds)
    5. Нажмите кнопку Открытьи перейдите к источнику данных, созданному на этом сервере.
    6. Выберите источник данных и нажмите кнопку Открыть еще раз.
    7. Создайте набор данных в построителе отчетов. PBI_SSMRP_RB_QueryDesignr600
    8. По завершении сохраните набор данных на сервере отчетов SSRS.

    Теперь можно использовать набор данных как основу для ключевых показателей эффективности и мобильных отчетов. Вы можете создать несколько наборов данных в одном источнике данных. Кроме того, вы можете создать несколько ключевых показателей эффективности и мобильных отчетов на основе этих общих наборов данных.

    Создание ключевых показателей эффективности

    Ключевые показатели эффективности создаются прямо на веб-портале Reporting Services.

    1. В правом верхнем углу экрана веб-портала щелкните Создать>Создать ключевой показатель эффективности. PBI_SSMRP_NewMenuВ окне создания ключевых показателей эффективности можно ввести значения вручную или использовать общий набор данных.
    2. Для параметра Значение вместо значения Задать вручную установите значение Поле набора данных. PBI_SSMRP_KPI_DatasetField
    3. Нажмите кнопку с многоточием ( . ) в поле Выберите поле набора данных и выберите набор данных, как указано в описании предыдущего шага. PBI_SSMRP_KPIPickDataset
    4. Выберите поле в наборе данных. PBI_SSMRP_KPIPickField
    5. Выберите необходимое агрегирование. Ключевые показатели эффективности могут отображать только одно число, так что поля будут агрегированы для отображения этого числа. Снимок экрана: раздел
    6. Нажмите кнопку ОК.
    7. В поле Набор трендов щелкните Тренд набора данных.
    8. В поле Выберите тренд набора данных нажмите кнопку с многоточием ( . ).
    9. Выберите поле и нажмите кнопку ОК. PBI_SSMRP_KPIPickTrend
    10. Присвойте имя вашему ключевому показателю эффективности и выберите тип визуализации, а затем нажмите кнопку Создать. Ключевые показатели эффективности отображаются на веб-портале Reporting Services. PBI_SSMRP_NewKPI

    Создание мобильных отчетов служб Reporting Services

    Для создания мобильных отчетов служб Reporting Services установите Издатель мобильных отчетов для Microsoft SQL Serverили запустите его на веб-портале Reporting Services.

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

    Запуск при помощи визуальных элементов

    1. На веб-портале Reporting Services нажмите Создать>Мобильный отчет, чтобы запустить издатель мобильных отчетов. PBI_SSMRP_NewMenuИздатель мобильных отчетов откроется в сетке мастер-макета.
    2. На вкладке Макет прокрутите экран вниз до раздела «Диаграммы». PBI_SSMRP_LayoutTabCharts2
    3. Перетащите карту дерева на сетку, а затем перетащите правый нижний угол таким образом, чтобы в окне отображались три столбца и три строки. PBI_SSMRP_TreeMap
    4. Свойства визуальных элементов можно просмотреть в нижней части страницы. Чтобы увидеть все свойства, возможно, придется прокручивать экран в стороны. PBI_SSMRP_TreeMapVisProps
    5. Выберите визуальный элемент карты дерева, а затем в левом верхнем углу откройте вкладку Данные . После этого отобразятся смоделированные поля и значения, созданные в издателе мобильных отчетов, и будет видно, какие размеры и цвет они имеют на карте дерева. PBI_SSMRP_TreeMapDataProps
    6. Откройте вкладку Расположение.
    7. Нажмите на шестеренку «Параметры» PBI_SSMRP_Cogв правом верхнем углу карты дерева, чтобы открыть его меню. PBI_SSMRP_OptionsWheel
    8. Щелкните стрелку посередине колесика, чтобы закрыть его.

    Добавьте ваши собственные данные

    1. Перейдите на вкладку Данные .
    2. Чтобы добавить свои данные, нажмите кнопку Добавить данные в правом верхнем углу, а затем перейдите к вашим данным.
    3. Можно использовать данные из локальной рабочей книги Excel, но в этом случае используются данные из общего набора данных на вашем веб-портале Reporting Services. Отображается сообщение «Добавлен на сервере».
    4. Выберите сервер, а затем выберите созданный вами набор данных.
    5. Вернитесь на вкладку Данные , а затем на панели Свойства данных измените свойства Представления размера, Представления цветови другие свойства полей ваших данных.
      • ПоляПредставления размера, Представления цветови Пользовательское значение центра должны содержать цифровые значения.
      • В полеГруппировать по отображается категория, поэтому это текстовое поле.

    Снимок экрана: раздел

    Добавление датчика в мобильный отчет

    Давайте добавим датчик для сравнения продаж нынешнего и прошлого годов при помощи одного и того же набора данных.

    1. На вкладке «Макет» перетащите половину кольца на полотно. Поместите его под картой дерева и перетащите правый нижний угол так, чтобы на экране отображалось три клетки в ширину и две в высоту.
    2. И снова процесс начинается с моделирования данных. Обратите внимание, что в разделе Свойства визуальных элементовпо умолчанию указано свойство Предпочтение более высоким значениям, а для свойства Разностная метка задано значение Процент целевого. Остановки диапазона заданы по умолчанию: вы можете их изменить, но пока можно использовать и их. Снимок экрана: раздел
    3. На вкладке Данные выберите таблицу с вашими данными, щелкните поле Основное значение и поле, с которым нужно его сравнить, в секции Значение сравнения.
    4. Вы можете выбрать разные агрегирования, чтобы получить одно число для поля Основное значение и еще одно для поля Значение сравнения. По умолчанию эти числа — суммы. Снимок экрана:
    5. Выберите Предварительный просмотр , чтобы посмотреть, как это выглядит. Снимок экрана: результаты предварительного просмотра кольцевой диаграммы для мобильного отчета.

    Добавление списка выбора в качестве фильтра

    Списки выбора действуют как срезы в Power BI и Excel. Такой список можно добавить, чтобы фильтровать другие визуальные элементы в мобильном отчете.

    1. На вкладке Макет перетащите список выбора в правую часть карты дерева, а затем перетащите правый нижний угол, чтобы на экране отображались две клетки в ширину и пять клеток в высоту (по высоте полотна). Снимок экрана: список выбора мобильного отчета.
    2. На вкладке Данные в разделе Свойства данныхзадайте для элементов Ключи и Метки то поле в ваших данных, которое необходимо отфильтровать. Снимок экрана: раздел свойств данных в списке выбора мобильного отчета.

    Создание мобильных отчетов для телефонов

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

    1. В правом верхнем углу нажмите на значок на холсте >Телефон.
    2. На вкладке «Макет» в разделе Control Instances(Управление экземплярами) отображаются две созданные вами диаграммы.
    3. Перетащите карту дерева на полотно телефона и разверните его на четыре столбца в ширину и три строки в высоту.

    Сохранение мобильного отчета

    Можно сохранить отчет локально или на веб-портале Reporting Services. В случае локального сохранения издатель мобильных отчетов сохраняет отчет вместе с кэшированными данными, чтобы можно было открыть его и продолжить работу. Однако вы не сможете просматривать его на мобильных устройствах.

    1. Нажмите значок сохранения в верхнем левом углу.
    2. Чтобы использовать его совместно с другими пользователями и просматривать на мобильных устройствах, щелкните Сохранить на сервере.
    3. На сервере перейдите к папке, в которой нужно сохранить мобильный отчет.
    4. Последовательно нажмите Выбрать папку>Сохранить. Вы получите сообщение с подтверждением сохранения отчета. После сохранения изменений можно вернуться на портал и просмотреть эскиз мобильного отчета.
    5. Коснитесь эскиза, чтобы просмотреть отчет на веб-портале.

    Просмотр отчета на веб-портале

    Просмотр отчета на мобильном устройстве

    Чтобы просмотреть отчет Reporting Services, сначала необходимо:

    • зарегистрироваться в службе Power BI, если у вас еще нет учетной записи;
    • скачать мобильное приложение Power BI на мобильное устройство.

    Просмотр мобильного отчета

    1. Откройте приложение Power BI на мобильном устройстве и войдите в него.
    2. Чтобы просмотреть мобильные отчеты служб Reporting Services и ключевые показатели эффективности, щелкните Службы Reporting Services.
      PBI_iPad_GetStartedSm
    3. Коснитесь значка Параметры PBI_iPad_OptionsIconв верхнем левом углу, а затем коснитесь Подключиться к серверу. PBI_iPad_SSMRP_ConnectCrop
    4. Присвойте серверу имя, а затем введите адрес сервера, ваш адрес электронной почты и пароль в следующем формате: PBI_iPad_SSMRP_ConnectContoso
    5. Сервер отобразится на левой навигационной панели. PBI_iPad_SSMRP_LeftNavBiggr

    PBI_iPad_OptionsIcon

    Коснитесь значка Параметры в любой момент для переключения между мобильными отчетами служб Reporting Services на веб-портале служб Reporting Services и панелями мониторинга службы Power BI.

    Просмотр ключевых показателей эффективности (КПЭ) и мобильных отчетов в приложении Power BI

    Нажмите вкладку Ключевые показатели эффективности или Мобильные отчеты .

    PBI_iPad_SSMRP_Portal

    PBI_iPad_SSMRP_Tile

    • Нажмите ключевой показатель эффективности, чтобы увидеть его в режиме фокусировки.
    • Нажмите мобильный отчет, чтобы открыть его и поработать с ним в приложении Power BI.

    Ключевые показатели эффективности и мобильные отчеты отображаются в тех же папках,в которых они хранятся на веб-портале служб Reporting Services.

    См. также раздел

    • Просмотр локальных отчетов мобильных отчетов и ключевых показателей эффективности в мобильном приложении Power BI для устройств с iOS и Android
    • См. статью Просмотр локальных отчетов и КПЭ для локального сервера отчетов в мобильном приложении Power BI для устройств с Windows.

    Шаг 3. Подтверждение концепции: подключение к SQL с помощью Java

    Этот пример следует рассматривать только как подтверждение концепции. Пример кода упрощен для ясности и для него не гарантируется соблюдение рекомендаций корпорации Майкрософт.

    Шаг 1. Подключение

    Используйте класс подключения для подключения к базе данных SQL.

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class SQLDatabaseConnection < // Connect to your database. // Replace server name, username, and password with your credentials public static void main(String[] args) < String connectionUrl = "jdbc:sqlserver://yourserver.database.windows.net:1433;" + "database=AdventureWorks;" + "user=yourusername@yourserver;" + "password=yourpassword;" + "encrypt=true;" + "trustServerCertificate=false;" + "loginTimeout=30;"; try (Connection connection = DriverManager.getConnection(connectionUrl);) < // Code here. >// Handle any errors that may have occurred. catch (SQLException e) < e.printStackTrace(); >> > 

    Шаг 2. Выполнение запроса

    В этом примере следует подключиться к базе данных SQL Azure, выполнить инструкцию SELECT и вернуть выбранные строки.

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class SQLDatabaseConnection < // Connect to your database. // Replace server name, username, and password with your credentials public static void main(String[] args) < String connectionUrl = "jdbc:sqlserver://yourserver.database.windows.net:1433;" + "database=AdventureWorks;" + "user=yourusername@yourserver;" + "password=yourpassword;" + "encrypt=true;" + "trustServerCertificate=false;" + "loginTimeout=30;"; ResultSet resultSet = null; try (Connection connection = DriverManager.getConnection(connectionUrl); Statement statement = connection.createStatement();) < // Create and execute a SELECT SQL statement. String selectSql = "SELECT TOP 10 Title, FirstName, LastName from SalesLT.Customer"; resultSet = statement.executeQuery(selectSql); // Print results from select statement while (resultSet.next()) < System.out.println(resultSet.getString(2) + " " + resultSet.getString(3)); >> catch (SQLException e) < e.printStackTrace(); >> > 

    Шаг 3. Вставка строки

    В этом примере выполните инструкцию INSERT, передайте параметры и получите автоматическое значение первичного ключа.

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; public class SQLDatabaseConnection < // Connect to your database. // Replace server name, username, and password with your credentials public static void main(String[] args) < String connectionUrl = "jdbc:sqlserver://yourserver.database.windows.net:1433;" + "database=AdventureWorks;" + "user=yourusername@yourserver;" + "password=yourpassword;" + "encrypt=true;" + "trustServerCertificate=false;" + "loginTimeout=30;"; String insertSql = "INSERT INTO SalesLT.Product (Name, ProductNumber, Color, StandardCost, ListPrice, SellStartDate) VALUES " + "('NewBike', 'BikeNew', 'Blue', 50, 120, '2016-01-01');"; ResultSet resultSet = null; try (Connection connection = DriverManager.getConnection(connectionUrl); PreparedStatement prepsInsertProduct = connection.prepareStatement(insertSql, Statement.RETURN_GENERATED_KEYS);) < prepsInsertProduct.execute(); // Retrieve the generated key from the insert. resultSet = prepsInsertProduct.getGeneratedKeys(); // Print the ID of the inserted row. while (resultSet.next()) < System.out.println("Generated: " + resultSet.getString(1)); >> // Handle any errors that may have occurred. catch (Exception e) < e.printStackTrace(); >> > 

    См. также:

    Необходимо обращаться к Ms sql через веб сервер IIS используя Android Studio

    Я начинающий разработчик приложений под андроид. Вопрос знатокам : Можно ли через веб сервер ISS получить доступ к MS SQL 2014, приложение пишется на JAVA среда Android Studio?Если да то каким образом? Вот код напрямую связанную с БД :

    package com.example.user.hello; import android.annotation.SuppressLint; import android.app.Application; import android.os.StrictMode; import android.util.Log; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; public class db_class extends Application < @SuppressLint("NewApi") static Connection ConnectionDB() < String url="jdbc:jtds:sqlserver://WIN-H2IOJKV9R76:1433:/Test;"; String username="khiki"; String password="12345"; StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); StrictMode.setThreadPolicy(policy); java.sql.Connection connection = null; try < Class.forName("net.sourceforge.jtds.jdbc.Driver"); connection = DriverManager.getConnection(url,username,password); >catch (SQLException se) < Log.e("error from SQL",se.getMessage()); >catch(ClassNotFoundException e) < Log.e("Error from Class",e.getMessage()); >catch (Exception ex) < Log.e("Error from Exception",ex.getMessage()); >return connection; > > 

    Отслеживать
    81.2k 7 7 золотых знаков 73 73 серебряных знака 153 153 бронзовых знака
    задан 8 ноя 2017 в 6:18
    Anonymouse Anonymouse
    119 1 1 серебряный знак 6 6 бронзовых знаков
    Как в вашем понимании связаны IIS и MS SQL Server? Это ж разные продукты.
    8 ноя 2017 в 6:42
    IIS видимо имеет коннект в SQL серверу и играет по сути роль сервера приложений
    8 ноя 2017 в 6:48
    Да Barmaley, именно. Как можно это все реализовать )?
    8 ноя 2017 в 6:52
    Берете ASP в руки и пишете веб сервис, который на запросы отвечает JSON’ами 🙂
    8 ноя 2017 в 6:56

    Задайте в форуме шарпистам (правильный) вопрос, как написать веб сервис — шарпистов здесь много — уверен, ответят.

    8 ноя 2017 в 7:06

    1 ответ 1

    Сортировка: Сброс на вариант по умолчанию

    Для мобильных устройств соединение с удаленной БД через JDBC является антипаттерном. Ну то есть при наличии правильного JDBC драйвера (то есть, написанного либо на чистом Java или же с поддержкой архитектуры девайса — типа ARM) коннект установить можно и даже можно получить ResultSet на свои запросы, но цена такого коннекта будет чрезвычайно высокой: ненадежность соединения, требования к портам девайса, требования к ширине полосы коннекта и проч. — все это обнулит ваши усилия.

    Нормальным паттерном является поднятие на стороне сервера Restful веб сервиса, который отвечает на запросы JSON/XML данными.

    Гуглевская лекция как с этим работать валяется здесь

    В вашем случае, вам нужно написать на стороне IIS небольшой веб сервис, который организует JSON ответы на запросы от Android клиента.

    Отслеживать
    ответ дан 8 ноя 2017 в 6:39
    81.2k 7 7 золотых знаков 73 73 серебряных знака 153 153 бронзовых знака

    • java
    • android
    • sql-server
    • iis
      Важное на Мете
    Похожие

    Подписаться на ленту

    Лента вопроса

    Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

    Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.30.4069

    Использование простой базы данных SQLite в Android-приложении

    В этом руководстве я подробно расскажу о том, как использовать базу данных Android SQLite .

    Обновлено: 2022-04-18 17:25:13 Вадим Дворников автор материала

    Что такое SQLite

    SQLite — это система управления реляционными базами данных, похожая на Oracle , MySQL , PostgreSQL и SQL Server . Она реализует большую часть стандарта SQL , но в отличие от четырех упомянутых выше СУБД она не поддерживает модель « клиент-сервер ». Скорее, она встроена в конечную программу. Это означает, что можно связать базу данных SQLite с приложением и получить доступ ко всем возможностям БД в своем приложении.

    Что такое SQLite

    Данная СУБД совместима как с Android , так и с iOS , и каждое приложение может создавать и использовать базу данных SQLite . В Android контакты и медиа хранятся и ссылаются на БД SQLite . Она является наиболее используемой СУБД в мире и самым распространенным программным обеспечением. Чтобы узнать о базах данных SQLite как можно больше, посетите официальный сайт SQLite.

    Подготовка

    Чтобы включить привязку данных в приложении, нужно добавить в файл build.gradle следующий код:

    dataBinding.enabled = true

    Чтобы использовать как RecyclerView , так и CardView для отображения списков, нужно включить соответствующие библиотеки в разделе зависимостей в файле build.gradle :

    dependencies

    Чтобы задействовать все возможности базы данных SQLite , лучше изучить синтаксис SQL .

    Описание примера приложения

    В нашем Android SQLite примере мы создадим две таблицы: Employer и Employee . Таблица Employee будет содержать ссылку на внешний ключ таблицы Employer . Мы рассмотрим, как вставлять, выбирать, обновлять и удалять строки из таблиц. Я также продемонстрирую, как вывести элементы, выбранные из базы данных SQLite в RecyclerView ( список ) и в Spinner .

    У нас есть MainActivity , из которого можно перейти к EmployerActivity ( для работы с таблицей Employer ) или к EmployeeActivity ( для работы с таблицей Employee ):

    Описание примера приложения

    Классы хранения базы данных SQLite

    Классы определяют то, как данные хранятся в базе. SQLite сохраняют значения с помощью пяти доступных классов хранения:

    • NULL — нулевое значение;
    • INTEGER — для целых чисел, содержащих от 1 до 8 байтов;
    • REAL — числа с плавающей запятой;
    • TEXT — текстовые строки, хранящиеся с использованием кодировки базы данных ( UTF-8 или UTF-16 );
    • BLOB — двоичные данные, хранящиеся точно так, как они были введены.

    Определение таблиц

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

    Начнем с Android SQLite query создания таблицы Employer , а затем перейдем к EmployerActivity .

    Рекомендуется размещать логику создания базы х SQLite в классе. Это облегчает устранение возможных неполадок. Назовем наш класс SampleDBContract :

    public final class SampleDBContract < private SampleDBContract() < >public static class Employer implements BaseColumns < public static final String TABLE_NAME = "employer"; public static final String COLUMN_NAME = "name"; public static final String COLUMN_DESCRIPTION = "description"; public static final String COLUMN_FOUNDED_DATE = "date"; public static final String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME + " (" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + COLUMN_NAME + " TEXT, " + COLUMN_DESCRIPTION + " TEXT, " + COLUMN_FOUNDED_DATE + " INTEGER" + ")"; >>

    Мы определяем частный конструктор для SampleDBContract , а затем создаем класс для представления таблицы Employer . Обратите внимание: класс Employer реализует интерфейс BaseColumns . Он предоставляет два столбца в нашей таблице. Это столбец _ID , который будет автоматически увеличиваться при добавлении каждой новой строки. И столбец _COUNT , который может использоваться ContentProviders для возврата количества записей, извлекаемых через запрос. Столбец _COUNT не является обязательным. Строка CREATE_TABLE компилируется в следующий оператор SQL :

    CREATE TABLE IF NOT EXISTS employer (_id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, description TEXT, date INTEGER)

    На данный момент в нашем Android SQLite примере мы определили схему таблицы Employer .

    Создание базы данных с помощью SQLiteOpenHelper

    Самый простой способ управления созданием базы данных и версиями — создать подкласс SQLiteOpenHelper . Он упрощает управление базой данных SQLite , создавая БД, если они не существуют. Необходимо только переопределить методы onCreate() и onUpgrade() , чтобы указать нужное действие для создания или обновления базы данных:

    public class SampleDBSQLiteHelper extends SQLiteOpenHelper < private static final int DATABASE_VERSION = 1; public static final String DATABASE_NAME = "sample_database"; public SampleDBSQLiteHelper(Context context) < super(context, DATABASE_NAME, null, DATABASE_VERSION); >@Override public void onCreate(SQLiteDatabase sqLiteDatabase) < sqLiteDatabase.execSQL(SampleDBContract.Employer.CREATE_TABLE); >@Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) < sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + SampleDBContract.Employer.TABLE_NAME); onCreate(sqLiteDatabase); >>

    Теперь в нашем примере Android database SQLite задаем для нашей базы данных SQLite имя ( sample_database ). Конструктор вызывает конструктор суперкласса с именем и версией базы данных. В onCreate мы указываем объекту SQLiteDatabase выполнить оператор Employer CREATE_TABLE SQL . Через onUpgrade мы сбрасываем таблицу Employer и создаем ее снова:

    Создание базы данных с помощью SQLiteOpenHelper

    Таблица Employer имеет три столбца: name , description и founded_date . Нажатие кнопки сохранения вызывает метод saveToDB() :

    Создание базы данных с помощью SQLiteOpenHelper - 2

    В saveToDB() мы получаем ссылку на объект SQLiteDatabase , используя метод getWritableDatabase() из SQLiteOpenHelper . Этот метод создает базу данных, если она еще не существует, или открывает ее, если она уже создана. GetWritableDatabase возвращает объект SQLiteDatabase , который открывает доступ на чтение / запись:

    private void saveToDB() < SQLiteDatabase database = new SampleDBSQLiteHelper(this).getWritableDatabase(); ContentValues values = new ContentValues(); values.put(SampleDBContract.Employer.COLUMN_NAME, binding.nameEditText.getText().toString()); values.put(SampleDBContract.Employer.COLUMN_DESCRIPTION, binding.descEditText.getText().toString()); try < Calendar calendar = Calendar.getInstance(); calendar.setTime((new SimpleDateFormat("dd/MM/yyyy")).parse( binding.foundedEditText.getText().toString())); long date = calendar.getTimeInMillis(); values.put(SampleDBContract.Employer.COLUMN_FOUNDED_DATE, date); >catch (Exception e) < Log.e(TAG, "Error", e); Toast.makeText(this, "Date is in the wrong format", Toast.LENGTH_LONG).show(); return; >long newRowId = database.insert(SampleDBContract.Employer.TABLE_NAME, null, values); Toast.makeText(this, "The new Row Id is " + newRowId, Toast.LENGTH_LONG).show(); >

    В приведенном выше фрагменте кода есть четыре момента:

    1. Мы получаем объект SQLiteDatabase , который открывает доступ на запись в базу данных;
    2. Значения, которые будут храниться в базе данных, помещаются в объект ContentValue с именем столбца в качестве ключа;
    3. Мы помещаем Date в объект ContentValue , который переводится в класс хранения данных Android SQLite INTEGER ;
    4. При вставке строки в базу данных с помощью метода database.insert() возвращается идентификатор строки.

    Выбор данных из базы данных SQLite

    Подобно тому, как мы применили метод getWritableDatabase() , можно вызвать getReadableDatabase() объекта SQLiteOpenHelper для получения объекта SQLiteDatabase , который можно использовать для чтения информации из базы данных. Стоит отметить, что объект SQLiteDatabase , возвращаемый getReadableDatabase() , предоставляет собой тот же самый доступ на чтение / запись в базу данных, который был возвращен функцией getWritableDatabase() , за исключением тех случаев, когда существуют определенные ограничения. Например, файловая система, содержащая заполненную базу данных, и база данных может быть открыта только для чтения.

    Метод readFromDB будет запрашивать БД, и возвращать все строки из таблицы Employer , в которых имя или описание из таблицы Employer совпадает со значением, введенным в EditText . А также строки, в которых дата основания компании совпадает со значением, введенным в EditText :

    private void readFromDB() < String name = binding.nameEditText.getText().toString(); String desc = binding.descEditText.getText().toString(); long date = 0; try < Calendar calendar = Calendar.getInstance(); calendar.setTime((new SimpleDateFormat("dd/MM/yyyy")).parse( binding.foundedEditText.getText().toString())); date = calendar.getTimeInMillis(); >catch (Exception e) <> SQLiteDatabase database = new SampleDBSQLiteHelper(this).getReadableDatabase(); String[] projection = < SampleDBContract.Employer._ID, SampleDBContract.Employer.COLUMN_NAME, SampleDBContract.Employer.COLUMN_DESCRIPTION, SampleDBContract.Employer.COLUMN_FOUNDED_DATE >; String selection = SampleDBContract.Employer.COLUMN_NAME + " like ? and " + SampleDBContract.Employer.COLUMN_FOUNDED_DATE + " > ? and " + SampleDBContract.Employer.COLUMN_DESCRIPTION + " like ?"; String[] selectionArgs = ; Cursor cursor = database.query( SampleDBContract.Employer.TABLE_NAME, // Запрашиваемая таблица projection, // Возвращаемый столбец selection, // Столбец для условия WHERE selectionArgs, // Значение для условия WHERE null, // не группировать строки null, // не фильтровать по группам строк null // не сортировать ); Log.d(TAG, "The total cursor count is " + cursor.getCount()); binding.recycleView.setAdapter(new SampleRecyclerViewCursorAdapter(this, cursor)); >

    В коде Android SQLite query , приведенного выше, projection является массивом String , представляющим столбцы, которые мы хотим получить. selection является строковым представлением условия SQL WHERE , отформатированным таким образом, что символ ‘?’ будет заменен аргументами в массиве selectionArgs String . Вы также можете группировать, фильтровать и сортировать результаты запроса. Вставка данных в базу SQLite с использованием описанного выше метода защищает от SQL-инъекций .

    Обратите внимание на объект, возвращаемый запросом — Cursor . В следующем разделе мы покажем, как вывести содержимое Cursor с помощью RecyclerView .

    Отображение содержимого объекта Cursor в RecyclerView

    Cursor предоставляет произвольный доступ к набору результатов, возвращаемому запросом к базе данных. Это означает, что через Cursor можно получить доступ к значениям в любом месте, подобно Java-спискам или массивам. Благодаря этому приему можно реализовать RecyclerView с использованием Cursor так же, как мы реализуем RecyclerView с помощью ArrayLists . Вместо вызова List.get(i) , вы перемещаете Cursor в нужную позицию, используя moveToPosition() . После этого вызываете соответствующий метод getXXX(int columnIndex) , где XXX — это Blob , Double , Float , Int , Long , Short или String .

    Чтобы не беспокоиться о корректных индексах столбцов из метода readFromDB() , примененного выше, мы используем метод getColumnIndexOrThrow() , который извлекает индекс указанного столбца или генерирует исключение, если имя столбца не существует внутри объекта Cursor :

    public class SampleRecyclerViewCursorAdapter extends RecyclerView.Adapter  < Context mContext; Cursor mCursor; public SampleRecyclerViewCursorAdapter(Context context, Cursor cursor) < mContext = context; mCursor = cursor; >public static class ViewHolder extends RecyclerView.ViewHolder < EmployerListItemBinding itemBinding; public ViewHolder(View itemView) < super(itemView); itemBinding = DataBindingUtil.bind(itemView); >public void bindCursor(Cursor cursor) < itemBinding.nameLabel.setText(cursor.getString( cursor.getColumnIndexOrThrow(SampleDBContract.Employer.COLUMN_NAME) )); itemBinding.descLabel.setText(cursor.getString( cursor.getColumnIndexOrThrow(SampleDBContract.Employer.COLUMN_DESCRIPTION) )); Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(cursor.getLong( cursor.getColumnIndexOrThrow(SampleDBContract.Employer.COLUMN_FOUNDED_DATE))); itemBinding.foundedLabel.setText(new SimpleDateFormat("dd/MM/yyyy").format(calendar.getTime())); >> @Override public int getItemCount() < return mCursor.getCount(); >@Override public void onBindViewHolder(ViewHolder holder, int position) < mCursor.moveToPosition(position); holder.bindCursor(myCursor); >@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) < View view = LayoutInflater.from(parent.getContext()).inflate( R.layout.employer_list_item, parent, false); ViewHolder viewHolder = new ViewHolder(view); return viewHolder; >>

    Отображение содержимого объекта Cursor в RecyclerView

    Определение внешних ключей

    На данный момент в нашем Android SQLite примере мы создали таблицу Employer , которую заполнили строками. Теперь создадим таблицу Employee , которая связана с таблицей Employer через столбец _ID Employer . Мы определяем класс Employee , который расширяет BaseColumns в классе SampleDBContract . Обратите внимание, что при создании таблицы Employee использовали » FOREIGN KEY(employer_id) REFERENCES employer(_id) «:

    public static class Employee implements BaseColumns

    Обновление SQLiteOpenHelper

    На данный момент в Android Studio SQLite у вас должна быть создана таблица Employer и в нее добавлены значения. Если вы не изменяете версию базы данных, новая таблица Employee не будет создана. К сожалению, если вы измените версию через повторный вызов метода onUpgrade() , то таблица Employer будет сброшена. Чтобы предотвратить это, можно закомментировать или удалить оператор drop в методе onUpgrade() и добавить оператор execSQL() для создания таблицы Employee . Поскольку таблица Employee ссылается на таблицу Employer , сначала необходимо создать таблицу Employer :

    public class SampleDBSQLiteHelper extends SQLiteOpenHelper < private static final int DATABASE_VERSION = 2; public static final String DATABASE_NAME = "sample_database"; public SampleDBSQLiteHelper(Context context) < super(context, DATABASE_NAME, null, DATABASE_VERSION); >@Override public void onCreate(SQLiteDatabase sqLiteDatabase) < sqLiteDatabase.execSQL(SampleDBContract.Employer.CREATE_TABLE); sqLiteDatabase.execSQL(SampleDBContract.Employee.CREATE_TABLE); >// Мы не хотим удалять данные пользователей. @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) < if(oldVersion == 0 && newVersion == 2) < sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + SampleDBContract.Employee.TABLE_NAME); >else < sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + SampleDBContract.Employer.TABLE_NAME); sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + SampleDBContract.Employee.TABLE_NAME); >onCreate(sqLiteDatabase); > >

    Отображение данных из запроса SQLite в Spinner

    Чтобы создать работника в таблице Employee , пользователю необходимо выбрать соответствующего работодателя в таблице Employer . Для этого можно предоставить пользователю Spinner . Отобразить содержимое Cursor в Spinner довольно просто.

    Сначала мы выполняем Android SQLite query , как было описано выше, выбираем только name из Employer и id (queryCols) . Затем создаем экземпляр SimpleCursorAdapter , передавая ему Cursor , массив столбцов для отображения ( adapterCols ) и массив представлений, с помощью которых должны отображаться столбцы ( adapterRowViews ). Затем устанавливаем Spinner Adapter для SimpleCursorAdapter :

    String[] queryCols = new String[]; SQLiteDatabase database = new SampleDBSQLiteHelper(this).getReadableDatabase(); Cursor cursor = database.query( SampleDBContract.Employer.TABLE_NAME, // Запрашиваемая таблица queryCols, // Возвращаемый столбец null, // Столбец для условия WHERE null, // Значение для условия WHERE null, // не группировать строки null, // не фильтровать по группам строк null // не сортировать ); String[] adapterCols = new String[]; int[] adapterRowViews = new int[]; SimpleCursorAdapter cursorAdapter = new SimpleCursorAdapter( this, android.R.layout.simple_spinner_item, cursor, adapterCols, adapterRowViews, 0); cursorAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); binding.employerSpinner.setAdapter(cursorAdapter);

    Отображение данных из запроса SQLite в Spinner

    Вставка внешнего ключа в базу данных

    Вставка строки, содержащей внешний ключ, полностью идентична вставке строк в таблицу без ограничений по внешнему ключу. Разница заключается в том, что в Android SQLite примере мы получаем ссылку на выбранный объект Cursor из Spinner , а затем — значение столбца _ID Employer :

    values.put(SampleDBContract.Employee.COLUMN_EMPLOYER_ID, ((Cursor)binding.employerSpinner.getSelectedItem()).getInt(0));

    Вставка внешнего ключа в базу данных

    Выборка данных из базы SQLite с помощью JOIN

    Нельзя использовать метод SQLiteDatabase query() для выполнения запроса к нескольким таблицам. Для этого нужно составить собственный SQL-запрос . В приведенном ниже примере запрос определяется в классе SampleDBContract :

    public static final String SELECT_EMPLOYEE_WITH_EMPLOYER = "SELECT * " + "FROM " + Employee.TABLE_NAME + " ee INNER JOIN " + Employer.TABLE_NAME + " er " + "ON ee." + Employee.COLUMN_EMPLOYER_ID + " = er." + Employer._ID + " WHERE " + "ee." + Employee.COLUMN_FIRSTNAME + " like ? AND ee." + Employee.COLUMN_LASTNAME + " like ?";

    Обратите внимание, что в условии WHERE мы используем символ « ? ». Чтобы не нарушить синтаксис SQL нужно определить selectArgs String [] со значениями, которые будут заменять в предоставленном SQL-запросе символ « ? »:

    private void readFromDB() < String firstname = binding.firstnameEditText.getText().toString(); String lastname = binding.lastnameEditText.getText().toString(); SQLiteDatabase database = new SampleDBSQLiteHelper(this).getReadableDatabase(); String[] selectionArgs = ; Log.d(TAG, SampleDBContract.Employee.QUERY_WITH_EMPLOYER); Cursor cursor = database.rawQuery(SampleDBContract.Employee.QUERY_WITH_EMPLOYER, selectionArgs); Log.d(TAG, "The total cursor count is " + cursor.getCount()); binding.recycleView.setAdapter(new SampleJoinRecyclerViewCursorAdapter(this, cursor)); >

    Выборка данных из базы SQLite с помощью JOIN

    В заключении

    Полная версия исходного кода доступна на github для использования и изменения. Базы данных Android SQLite — это мощное средство, доступное для всех мобильных приложений.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *