Содержание
- 1 Классы для работы с SQLite
- 2 SELECT 操作
- 3 UPDATE 操作
- 4 CPU Architectures
- 5 DELETE 操作
- 6 Adding Notes UI
- 7 Вставляем картинки в базу
- 8 DELETE Operation
- 9 创建表
- 10 Create a Table
- 11 SQLite in JAVA Interface
- 12 Запускаем SQLite на эмуляторе
- 13 SELECT Operation
- 14 创建表
- 15 UPDATE 操作
- 16 UPDATE Operation
- 17 SQLiteDatabase
- 18 INSERT 操作
- 19 Top sqliteopenhelper Askers
- 20 Connect to SQLite Database using Java
Классы для работы с SQLite
Начиная с конца 2017 года, прямая работа с приложением считается несколько нерациональным подходом к структуре таблиц.
Суть управления базой сводится к выполнению ряда условий:
- создание самой базы данных и запуск на устройстве или эмуляторе;
- набор таблицы команд;
- разработка интерфейсного модуля для работы с данными, модуль «insert»;
- выполнение интерфейсного модуля управления запросами;
- завершение работы с созданной базой данных.
Класс ContentValues
Класс ContentValues отвечает за работу с таблицами базы данных и добавление в них вновь созданных строк.
Каждый созданный объект в классе «ContentValues» – это одна строка в виде массива, содержащего данные о столбцах таблицы и информационных блоках, соответствующих столбцам.
Курсоры
Курсоры являются еще одним классом в Android, они отражают перечень запросов к базе данных. Классы «Cursor» выдают результирующую ссылку на адрес хранения исходной информации. Такой подход намного продуктивней альтернативного – извлечение текущей информации из базы и возврат копии запроса.
Классы типа «Cursor» работают со строками или позициями в текущем времени по отношению к общему набору запрашиваемых данных.
SELECT 操作
下面的 Java 程序显示了如何从前面创建的 COMPANY 表中获取并显示记录:
import java.sql.*; public class SQLiteJDBC { public static void main( String args[] ) { Connection c = null; Statement stmt = null; try { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jdbc:sqlite:test.db"); c.setAutoCommit(false); System.out.println("Opened database successfully"); stmt = c.createStatement(); ResultSet rs = stmt.executeQuery( "SELECT * FROM COMPANY;" ); while ( rs.next() ) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); String address = rs.getString("address"); float salary = rs.getFloat("salary"); System.out.println( "ID = " + id ); System.out.println( "NAME = " + name ); System.out.println( "AGE = " + age ); System.out.println( "ADDRESS = " + address ); System.out.println( "SALARY = " + salary ); System.out.println(); } rs.close(); stmt.close(); c.close(); } catch ( Exception e ) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); System.exit(0); } System.out.println("Operation done successfully"); } }
上述程序编译和执行时,它会产生以下结果:
Opened database successfully ID = 1 NAME = Paul AGE = 32 ADDRESS = California SALARY = 20000.0 ID = 2 NAME = Allen AGE = 25 ADDRESS = Texas SALARY = 15000.0 ID = 3 NAME = Teddy AGE = 23 ADDRESS = Norway SALARY = 20000.0 ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-Mond SALARY = 65000.0 Operation done successfully
UPDATE 操作
下面的 Java 代码显示了如何使用 UPDATE 语句来更新任何记录,然后从 COMPANY 表中获取并显示更新的记录:
import java.sql.*; public class SQLiteJDBC { public static void main( String args[] ) { Connection c = null; Statement stmt = null; try { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jdbc:sqlite:test.db"); c.setAutoCommit(false); System.out.println("Opened database successfully"); stmt = c.createStatement(); String sql = "UPDATE COMPANY set SALARY = 25000.00 where ID=1;"; stmt.executeUpdate(sql); c.commit(); ResultSet rs = stmt.executeQuery( "SELECT * FROM COMPANY;" ); while ( rs.next() ) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); String address = rs.getString("address"); float salary = rs.getFloat("salary"); System.out.println( "ID = " + id ); System.out.println( "NAME = " + name ); System.out.println( "AGE = " + age ); System.out.println( "ADDRESS = " + address ); System.out.println( "SALARY = " + salary ); System.out.println(); } rs.close(); stmt.close(); c.close(); } catch ( Exception e ) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); System.exit(0); } System.out.println("Operation done successfully"); } }
上述程序编译和执行时,它会产生以下结果:
Opened database successfully ID = 1 NAME = Paul AGE = 32 ADDRESS = California SALARY = 25000.0 ID = 2 NAME = Allen AGE = 25 ADDRESS = Texas SALARY = 15000.0 ID = 3 NAME = Teddy AGE = 23 ADDRESS = Norway SALARY = 20000.0 ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-Mond SALARY = 65000.0 Operation done successfully
CPU Architectures
The native library is built for the following CPU architectures:
- ~1.4 MB
- ~2 MB
- ~2.1 MB
- ~2.1 MB
However you may not want to include all binaries in your apk. You can exclude certain variants by using :
android { packagingOptions { exclude 'lib/armeabi-v7a/libsqlite3x.so' exclude 'lib/arm64-v8a/libsqlite3x.so' exclude 'lib/x86/libsqlite3x.so' exclude 'lib/x86_64/libsqlite3x.so' } }
The size of the artifacts with only the armeabi-v7a binary is ~1.4 MB. In general you can use armeabi-v7a on the majority of Android devices including Intel Atom which provides a native translation layer, however performance under the translation layer is worse than using the x86 binary.
DELETE 操作
下面的 Java 代码显示了如何使用 DELETE 语句删除任何记录,然后从 COMPANY 表中获取并显示剩余的记录:
import java.sql.*; public class SQLiteJDBC { public static void main( String args[] ) { Connection c = null; Statement stmt = null; try { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jdbc:sqlite:test.db"); c.setAutoCommit(false); System.out.println("Opened database successfully"); stmt = c.createStatement(); String sql = "DELETE from COMPANY where ID=2;"; stmt.executeUpdate(sql); c.commit(); ResultSet rs = stmt.executeQuery( "SELECT * FROM COMPANY;" ); while ( rs.next() ) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); String address = rs.getString("address"); float salary = rs.getFloat("salary"); System.out.println( "ID = " + id ); System.out.println( "NAME = " + name ); System.out.println( "AGE = " + age ); System.out.println( "ADDRESS = " + address ); System.out.println( "SALARY = " + salary ); System.out.println(); } rs.close(); stmt.close(); c.close(); } catch ( Exception e ) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); System.exit(0); } System.out.println("Operation done successfully"); } }
上述程序编译和执行时,它会产生以下结果:
Adding Notes UI
Now we have the database helper class ready. Let’s quickly build the main interface and integrate it with the database.
First we need an adapter to display the notes in list manner. For this, we need a layout file and Adapter class.
8. Create new xml layout named note_list_row.xml. This layout holds the design of single note item in the list.
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:clickable="true" android:foreground="?attr/selectableItemBackground" android:paddingBottom="@dimen/dimen_10" android:paddingLeft="@dimen/activity_margin" android:paddingRight="@dimen/activity_margin" android:paddingTop="@dimen/dimen_10"> <TextView android:id="@+id/dot" android:layout_width="wrap_content" android:layout_height="@dimen/dot_height" android:layout_marginRight="@dimen/dot_margin_right" android:layout_marginTop="@dimen/dimen_10" android:includeFontPadding="false" android:textColor="@color/colorAccent" android:lineSpacingExtra="0dp" android:textSize="@dimen/dot_text_size" /> <TextView android:id="@+id/timestamp" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_toRightOf="@id/dot" android:textColor="@color/timestamp" android:textSize="@dimen/timestamp" /> <TextView android:id="@+id/note" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/timestamp" android:layout_toRightOf="@id/dot" android:textColor="@color/note_list_text" android:textSize="@dimen/note_list_text" /> </RelativeLayout>
9. Under view package, create a class named NotesAdapter.java. This adapter class renders the RecyclerView with defined layout and data set.
import android.content.Context; import android.support.v7.widget.RecyclerView; import android.text.Html; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.List; import info.androidhive.sqlite.R; import info.androidhive.sqlite.database.model.Note; public class NotesAdapter extends RecyclerView.Adapter<NotesAdapter.MyViewHolder> { private Context context; private List<Note> notesList; public class MyViewHolder extends RecyclerView.ViewHolder { public TextView note; public TextView dot; public TextView timestamp; public MyViewHolder(View view) { super(view); note = view.findViewById(R.id.note); dot = view.findViewById(R.id.dot); timestamp = view.findViewById(R.id.timestamp); } } public NotesAdapter(Context context, List<Note> notesList) { this.context = context; this.notesList = notesList; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.note_list_row, parent, false); return new MyViewHolder(itemView); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { Note note = notesList.get(position); holder.note.setText(note.getNote()); // Displaying dot from HTML character code holder.dot.setText(Html.fromHtml("•")); // Formatting and displaying timestamp holder.timestamp.setText(formatDate(note.getTimestamp())); } @Override public int getItemCount() { return notesList.size(); } /** * Formatting timestamp to `MMM d` format * Input: 2018-02-21 00:15:42 * Output: Feb 21 */ private String formatDate(String dateStr) { try { SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = fmt.parse(dateStr); SimpleDateFormat fmtOut = new SimpleDateFormat("MMM d"); return fmtOut.format(date); } catch (ParseException e) { } return ""; } }
Вставляем картинки в базу
База данных SQLite не имеет прямого функционала взаимодействия с форматами изображений, из чего вытекает единственный метод решения проблемы – двухсторонняя конвертация изображения в массив байтового уровня.
Обратная конвертация массива в формат изображения при извлечении картинки выполняется реверсивно.
package ru.alexKlimov.test; import java.io.ByteArrayOutputStream; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Bitmap.CompressFormat; public class Utilities { // convert from bitmap to byte array public static byte [] getBytes (Bitmap bitmap) { ByteArrayQutputStream stream = new ByteArrayQutputStream(); bitmap.compress (CompressFormat.PNG, O, stream); return stream.toByteArray(); } // convert from byte array to bitmap public static Bitmap getImage(byte[] image) { return BitmapFactory.decodeByteArray(image, O, image.lenght); } }
DELETE Operation
Following Java code shows how to use use DELETE statement to delete any record and then fetch and display the remaining records from the our COMPANY table.
import java.sql.*; public class SQLiteJDBC { public static void main( String args[] ) { Connection c = null; Statement stmt = null; try { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jdbc:sqlite:test.db"); c.setAutoCommit(false); System.out.println("Opened database successfully"); stmt = c.createStatement(); String sql = "DELETE from COMPANY where ID=2;"; stmt.executeUpdate(sql); c.commit(); ResultSet rs = stmt.executeQuery( "SELECT * FROM COMPANY;" ); while ( rs.next() ) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); String address = rs.getString("address"); float salary = rs.getFloat("salary"); System.out.println( "ID = " + id ); System.out.println( "NAME = " + name ); System.out.println( "AGE = " + age ); System.out.println( "ADDRESS = " + address ); System.out.println( "SALARY = " + salary ); System.out.println(); } rs.close(); stmt.close(); c.close(); } catch ( Exception e ) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); System.exit(0); } System.out.println("Operation done successfully"); } }
When the above program is compiled and executed, it will produce the following result.
Opened database successfully ID = 1 NAME = Paul AGE = 32 ADDRESS = California SALARY = 25000.0 ID = 3 NAME = Teddy AGE = 23 ADDRESS = Norway SALARY = 20000.0 ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-Mond SALARY = 65000.0 Operation done successfully
Previous Page Print Page
Next Page
创建表
下面的 Java 程序将用于在先前创建的数据库中创建一个表:
import java.sql.*; public class SQLiteJDBC { public static void main( String args[] ) { Connection c = null; Statement stmt = null; try { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jdbc:sqlite:test.db"); System.out.println("Opened database successfully"); stmt = c.createStatement(); String sql = "CREATE TABLE COMPANY " + "(ID INT PRIMARY KEY NOT NULL," + " NAME TEXT NOT NULL, " + " AGE INT NOT NULL, " + " ADDRESS CHAR(50), " + " SALARY REAL)"; stmt.executeUpdate(sql); stmt.close(); c.close(); } catch ( Exception e ) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); System.exit(0); } System.out.println("Table created successfully"); } }
上述程序编译和执行时,它会在 test.db 中创建 COMPANY 表,最终文件列表如下所示:
-rw-r--r--. 1 root root 3201128 Jan 22 19:04 sqlite-jdbc-3.7.2.jar -rw-r--r--. 1 root root 1506 May 8 05:43 SQLiteJDBC.class -rw-r--r--. 1 root root 832 May 8 05:42 SQLiteJDBC.java -rw-r--r--. 1 root root 3072 May 8 05:43 test.db
Create a Table
Following Java program will be used to create a table in the previously created database.
import java.sql.*; public class SQLiteJDBC { public static void main( String args[] ) { Connection c = null; Statement stmt = null; try { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jdbc:sqlite:test.db"); System.out.println("Opened database successfully"); stmt = c.createStatement(); String sql = "CREATE TABLE COMPANY " + "(ID INT PRIMARY KEY NOT NULL," + " NAME TEXT NOT NULL, " + " AGE INT NOT NULL, " + " ADDRESS CHAR(50), " + " SALARY REAL)"; stmt.executeUpdate(sql); stmt.close(); c.close(); } catch ( Exception e ) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); System.exit(0); } System.out.println("Table created successfully"); } }
When the above program is compiled and executed, it will create COMPANY table in your test.db and final listing of the file will be as follows −
-rw-r--r--. 1 root root 3201128 Jan 22 19:04 sqlite-jdbc-3.7.2.jar -rw-r--r--. 1 root root 1506 May 8 05:43 SQLiteJDBC.class -rw-r--r--. 1 root root 832 May 8 05:42 SQLiteJDBC.java -rw-r--r--. 1 root root 3072 May 8 05:43 test.db
SQLite in JAVA Interface
We can easily interact with SQLite in JAVA language using a JDBC driver. This JDBC driver is known as the SQLite-JDBC package which contains both JAVA classes and SQLite libraries to perform different operations like connect to the database, create tables, insert data in tables, etc. on Windows, Linux, and Mac OS platform.
Before we proceed to interact with SQLite using JAVA language first we need to make sure that JAVA setup available in our PC. In case if JAVA setup is not available means follow Java Tutorial for JAVA installation.
If JAVA setup available in our PC, now we will install SQLite-JDBC driver for that download latest JDBC driver sqlite-jdbc-version.jar from available list of JDBC drivers.
Now we need to add downloaded JDBC driver jar file (sqlite-jdbc-version.jar) to our classpath like shown in our following programs.
Запускаем SQLite на эмуляторе
Эмулятор Android – один из главных инструментов современного разработчика. Он дает возможность создавать и тестировать работу исходного кода и таблиц в SQl Android Studio без задействования штатных мобильных устройств.
Перед первым запуском база данных в Андроид Студио требует обновления SDK Tools до крайней на текущий момент версии.
С четвертой версии Android и выше в эмуляторе появилась возможность визуальной навигации по панели настроек. А Android Studio база данных может быть расположена на произвольном логическом разделе дискового пространства.
Панель навигации может быть не видна при работе на устройствах с малым разрешением экрана. Чтобы устранить недостаток и вывести панель на экран, требуется активировать пиктограмму «Display a skin with hardware controls».
В штатной командной строке операционной системы компьютера запустить на исполнение программу adb.exe. После начала работы софта необходимо исполнить запуск программной оболочки Shell.
Для пользователей альтернативных операционных систем может понадобиться ввод команды «C:\Program Files\Android\android-sdk\platform-tools]adb -e shell».
Пиктограмма решетки «#» означает приглашение системы к вводу дополнительных команд.
Далее необходимо определить место, где будет непосредственно храниться информация. Например, если исходный пакет с наименованием «su.aivanushkadur.sample», то полный путь к размещенной базе данных будет выглядеть как «data/data/su.aivanushkadur.sample/databases».
Последней командой для запуска базы данных на эмуляторе будет «cd data/data/su. aivanushkadur.sample/databases/ls/user_db».
База данных корректно запущена на эмуляторе мобильного устройства выбранного форм-фактора.
SELECT Operation
Following Java program shows how to fetch and display records from the COMPANY table created in the above example.
import java.sql.*; public class SQLiteJDBC { public static void main( String args[] ) { Connection c = null; Statement stmt = null; try { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jdbc:sqlite:test.db"); c.setAutoCommit(false); System.out.println("Opened database successfully"); stmt = c.createStatement(); ResultSet rs = stmt.executeQuery( "SELECT * FROM COMPANY;" ); while ( rs.next() ) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); String address = rs.getString("address"); float salary = rs.getFloat("salary"); System.out.println( "ID = " + id ); System.out.println( "NAME = " + name ); System.out.println( "AGE = " + age ); System.out.println( "ADDRESS = " + address ); System.out.println( "SALARY = " + salary ); System.out.println(); } rs.close(); stmt.close(); c.close(); } catch ( Exception e ) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); System.exit(0); } System.out.println("Operation done successfully"); } }
When the above program is compiled and executed, it will produce the following result.
Opened database successfully ID = 1 NAME = Paul AGE = 32 ADDRESS = California SALARY = 20000.0 ID = 2 NAME = Allen AGE = 25 ADDRESS = Texas SALARY = 15000.0 ID = 3 NAME = Teddy AGE = 23 ADDRESS = Norway SALARY = 20000.0 ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-Mond SALARY = 65000.0 Operation done successfully
创建表
下面的 Java 程序将用于在先前创建的数据库中创建一个表:
import java.sql.*; public class SQLiteJDBC { public static void main( String args[] ) { Connection c = null; Statement stmt = null; try { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jdbc:sqlite:test.db"); System.out.println("Opened database successfully"); stmt = c.createStatement(); String sql = "CREATE TABLE COMPANY " + "(ID INT PRIMARY KEY NOT NULL," + " NAME TEXT NOT NULL, " + " AGE INT NOT NULL, " + " ADDRESS CHAR(50), " + " SALARY REAL)"; stmt.executeUpdate(sql); stmt.close(); c.close(); } catch ( Exception e ) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); System.exit(0); } System.out.println("Table created successfully"); } }
上述程序编译和执行时,它会在 test.db 中创建 COMPANY 表,最终文件列表如下所示:
-rw-r--r--. 1 root root 3201128 Jan 22 19:04 sqlite-jdbc-3.7.2.jar -rw-r--r--. 1 root root 1506 May 8 05:43 SQLiteJDBC.class -rw-r--r--. 1 root root 832 May 8 05:42 SQLiteJDBC.java -rw-r--r--. 1 root root 3072 May 8 05:43 test.db
UPDATE 操作
下面的 Java 代码显示了如何使用 UPDATE 语句来更新任何记录,然后从 COMPANY 表中获取并显示更新的记录:
import java.sql.*; public class SQLiteJDBC { public static void main( String args[] ) { Connection c = null; Statement stmt = null; try { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jdbc:sqlite:test.db"); c.setAutoCommit(false); System.out.println("Opened database successfully"); stmt = c.createStatement(); String sql = "UPDATE COMPANY set SALARY = 25000.00 where ID=1;"; stmt.executeUpdate(sql); c.commit(); ResultSet rs = stmt.executeQuery( "SELECT * FROM COMPANY;" ); while ( rs.next() ) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); String address = rs.getString("address"); float salary = rs.getFloat("salary"); System.out.println( "ID = " + id ); System.out.println( "NAME = " + name ); System.out.println( "AGE = " + age ); System.out.println( "ADDRESS = " + address ); System.out.println( "SALARY = " + salary ); System.out.println(); } rs.close(); stmt.close(); c.close(); } catch ( Exception e ) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); System.exit(0); } System.out.println("Operation done successfully"); } }
上述程序编译和执行时,它会产生以下结果:
Opened database successfully ID = 1 NAME = Paul AGE = 32 ADDRESS = California SALARY = 25000.0 ID = 2 NAME = Allen AGE = 25 ADDRESS = Texas SALARY = 15000.0 ID = 3 NAME = Teddy AGE = 23 ADDRESS = Norway SALARY = 20000.0 ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-Mond SALARY = 65000.0 Operation done successfully
UPDATE Operation
Following Java code shows how to use UPDATE statement to update any record and then fetch and display the updated records from the COMPANY table.
import java.sql.*; public class SQLiteJDBC { public static void main( String args[] ) { Connection c = null; Statement stmt = null; try { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jdbc:sqlite:test.db"); c.setAutoCommit(false); System.out.println("Opened database successfully"); stmt = c.createStatement(); String sql = "UPDATE COMPANY set SALARY = 25000.00 where ID=1;"; stmt.executeUpdate(sql); c.commit(); ResultSet rs = stmt.executeQuery( "SELECT * FROM COMPANY;" ); while ( rs.next() ) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); String address = rs.getString("address"); float salary = rs.getFloat("salary"); System.out.println( "ID = " + id ); System.out.println( "NAME = " + name ); System.out.println( "AGE = " + age ); System.out.println( "ADDRESS = " + address ); System.out.println( "SALARY = " + salary ); System.out.println(); } rs.close(); stmt.close(); c.close(); } catch ( Exception e ) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); System.exit(0); } System.out.println("Operation done successfully"); } }
When the above program is compiled and executed, it will produce the following result.
Opened database successfully ID = 1 NAME = Paul AGE = 32 ADDRESS = California SALARY = 25000.0 ID = 2 NAME = Allen AGE = 25 ADDRESS = Texas SALARY = 15000.0 ID = 3 NAME = Teddy AGE = 23 ADDRESS = Norway SALARY = 20000.0 ID = 4 NAME = Mark AGE = 25 ADDRESS = Rich-Mond SALARY = 65000.0 Operation done successfully
SQLiteDatabase
Класс «SQLiteDatabase» – основа управления данными интерфейса. Базовый набор класса «SQLiteDatabase» штатно включает в себя методы:
- query();
- insert();
- delete();
- update().
Рабочий функционал методов, входящих в состав класса, ограничен базовым набором управления. Доступно только создание, удаление, внесение изменений и чтение информационной составляющей. Отдельно стоит упомянуть о решении, позволяющем подстраивать код любой структуры на исполнение в среде языка SQL.
Метод query()
Метод «query()» в большинстве случаев используется для выполнения операций чтения данных из общей базы.
Составляющие метода делятся семь условных параметров, вызываемых в процессе запросов или отражаемых командой «null». В число параметров входят:
- «Table» — информативное имя табличных данных, выдаваемое по запросу;
- «String[] columnNames» — общий массив полей возвращаемых по запросу;
- «String whereClause» — вспомогательный параметр, выдающий определенные выражения (в зависимости от типа команд) и выражения «WHERE»;
- «String[] selectionArgs» — предоставляет аргументы функции таблицы по командному запросу;
- «String[] groupBy» — параметр фильтрации значения по принципу группового формирования;
- «String[] having» — аналогичный предыдущему фильтр, группирующий данные по избирательному принципу;
- «String[] orderBy» — вспомогательный параметр при запросе, который отличается от команды «null», выдает выражение «ORDER».
Метод rawQuery()
Метод используется нечасто из-за редкого использования пустых запросов к SQL базе. Основан на прямом написании командной строки, вида аналогичного прямому написанию в среде SQL.
Cursor cursor = get ReadableDatabase(). rawQuery(“select * from todo where _id = ?”, new String [] { id })
Метод insert()
Метод имеет перспективу частого применения, необходим при вставке данных в таблицы SQLite, в своем составе имеет три параметра:
- «table» — задает переменную имени для будущей таблицы и вставок;
- «nullColumnHack» — параметр, контролирующий отсутствие в базе SQLite полностью или частично пустых строк, при выявлении задается команда «null»;
- «values» — параметр отображения данных класса Map, ключи, передаваемые данным карты, являются первичными значениями таблицы параметров.
Метод update()
Суть работы метода исходит из его названия – обновление существующих и вновь созданных (загруженных) данных. Для корректной работы необходимо задать методу параметры таблицы базы данных, требующей обновления.
//Определите содержимое обновленной строки. ContentValues updatedValues = new ContentValues(); //Назначьте значения для каждой строки. newValues.put (COLUMN_NAME, newValue); String where = KEY_ID +”=”+ rowId; //Обновите строку с указанным индексом, используя новые значения. myDatabase.update(DATABASE_TABLE, newValues, where, null);
Метод delete()
Работает по принципу аналогичному методу «update()», за исключением конечного результата выполнения. При заявленных параметрах местонахождения таблицы базы данных, «delete» удаляет все информационные составляющие.
Требует обязательного отражения оператора «WHERE», после выполнения которого на экране визуализируются удаленные строки.
myDatabase.delete(DATABASE_TABLE, “NAME = ?”, New String [] {“Murzik”});
Метод open Or Create Database: Открытие и создание баз данных без использования SQLite Open Helper
INSERT 操作
下面的 Java 代码显示了如何在上面创建的 COMPANY 表中创建记录:
import java.sql.*; public class SQLiteJDBC { public static void main( String args[] ) { Connection c = null; Statement stmt = null; try { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jdbc:sqlite:test.db"); c.setAutoCommit(false); System.out.println("Opened database successfully"); stmt = c.createStatement(); String sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " + "VALUES (1, 'Paul', 32, 'California', 20000.00 );"; stmt.executeUpdate(sql); sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " + "VALUES (2, 'Allen', 25, 'Texas', 15000.00 );"; stmt.executeUpdate(sql); sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " + "VALUES (3, 'Teddy', 23, 'Norway', 20000.00 );"; stmt.executeUpdate(sql); sql = "INSERT INTO COMPANY (ID,NAME,AGE,ADDRESS,SALARY) " + "VALUES (4, 'Mark', 25, 'Rich-Mond ', 65000.00 );"; stmt.executeUpdate(sql); stmt.close(); c.commit(); c.close(); } catch ( Exception e ) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); System.exit(0); } System.out.println("Records created successfully"); } }
上述程序编译和执行时,它会在 COMPANY 表中创建给定记录,并会显示以下两行:
Opened database successfully Records created successfully
Top sqliteopenhelper Askers
All Time
53 |
Rushabh Chheda 63311 gold badge66 silver badges55 bronze badges |
|
38 |
flp 94011 gold badge1111 silver badges1818 bronze badges |
|
28 |
kartheeki j 1,67633 gold badges1919 silver badges4444 bronze badges |
|
27 |
Toni Kanoni 1,93644 gold badges1919 silver badges2626 bronze badges |
|
21 |
Pramod Yadav 2,07611 gold badge2020 silver badges3131 bronze badges |
|
21 |
iTurki 15.2k1919 gold badges7979 silver badges126126 bronze badges |
|
20 |
Alex Busuioc 38933 silver badges1414 bronze badges |
|
19 |
Timon Devos 43311 gold badge66 silver badges1818 bronze badges |
|
18 |
Cristiano Santos 2,01522 gold badges3131 silver badges4747 bronze badges |
|
16 |
user2504611 17311 silver badge77 bronze badges |
|
16 |
waiter.james 42155 silver badges1616 bronze badges |
|
16 |
liftdeadtrees 43144 silver badges1616 bronze badges |
|
15 |
André Alves 5,28533 gold badges1414 silver badges2222 bronze badges |
|
15 |
cmoaciopm 1,47611 gold badge1616 silver badges2828 bronze badges |
|
14 |
mithrop 3,08322 gold badges1818 silver badges3939 bronze badges |
|
13 |
qkx 1,96144 gold badges2121 silver badges4242 bronze badges |
|
12 |
XGouchet 9,41399 gold badges4242 silver badges7979 bronze badges |
|
11 |
SBerg413 13.8k66 gold badges5252 silver badges8585 bronze badges |
|
11 |
Tim 95844 gold badges1414 silver badges3333 bronze badges |
|
11 |
Garzahd 5,65922 gold badges1515 silver badges1919 bronze badges |
Only non community-wiki questions and answers are included in these totals (updated daily)
Connect to SQLite Database using Java
Now we will connect to the SQLite database using JAVA if exists otherwise it will create a new database and then connect to it.
Following is the JAVA program which is used to connect a database if it exists otherwise first it will create a database and then connect to it.
import java.sql.*;
public class DBUsingJava
{
public static void main( String args[] )
{
Connection c = null;
try {
Class.forName(«org.sqlite.JDBC»);
c = DriverManager.getConnection(«jdbc:sqlite:SqliteJavaDB.db»);
}
catch ( Exception e ) {
System.err.println( e.getClass().getName() + «: » + e.getMessage() );
System.exit(0);
}
System.out.println(«database successfully created»);
}
}
If you observe above code we are trying to connect “SqliteJavaDB.db” if exists otherwise it will create new database in current path and we are assuming that sqlite-jdbc-3.8.11.2.jar is available at the same location where our program exists.
Javac DBUsingJava.java
java -classpath «.;sqlite-jdbc-3.8.11.2.jar» SQLiteJDBC
database successfully created
The above statements will compile and run our program to create “SqliteJavaDB.db” in current directory. If you check the current directory of the program, one file called SqliteJavaDB.db created.
С этим читают
- Модуль sqlite
- Class yii\grid\actioncolumn
- Вспомогательные классы для работы со строками в java
- Как используют цикл for в java
- Что такое субд
- Download all versions of mysql-connector-java jar files with all dependencies
- Sql server express localdb
- Java swing tutorial: examples to create gui
- Условные операторы: if, ‘?’
- Download sql server management studio (ssms)