SQLite 第一个Alpha版本诞生于2000年5月,它是一款轻型数据库,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用,它占用的资源非常少,在嵌入式设备中,可能只需要几百kb内存就够了。也许这正是Android系统要采用SQLite数据库的原因之一吧。

SQLite 数据库是 D.Richard Hipp 用C语言编写的开源嵌入式数据库,支持的数据库大小为2TB。它具有如下特征。

1.轻量级
SQLite和C/S模式的数据库软件不同,它是进程内的数据引擎,因此不存在数据库的客户端和服务器。使用SQLite 一般只需要带上它的一个动态库,就可以享受它的全部功能。而且那个动态库的尺寸也相当小。

2.独立性
SQLite数据库的核心引擎本身不依赖第三方软件,使用它也不需要“安装”。所以在部署的时候能省去不少麻烦。

3.隔离性
SQLite 数据库中所有的信息(比如表、视图、触发器) 都包含在一个文件内,方便管理和维护。

4.跨平台
SQLite数据库支持大部分操作系统,除了我们在电脑上使用的操作系统外,很多手机系统同样可以运行,比如Android、Windows Mobile、Sysbin、Palm等。

5.多语言接口
SQLite 数据库支持很多语言接口,比如C/C++、java、Python、dotNet、Ruby、Perl等,得到更多开发者的喜爱。

6.安全性
SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程在同一时间从同一数据库读取数据,但只有一个可以写入数据。在某个进程或线程向数据库执行写操作前,必须获得独占锁定。在发出独占锁定后,其他的读或写操作将不会再发生。
  1. public DbHelper(Context context, String name, CursorFactory factory, int version){
  2. super(context, name, factory, version);
  3. }
此函数中的参数name就是数据库名称,也就是数据库文件名; version则从1开始,当将来数据库的表格以及字段发生变化时,用户可以提高此version,从而触发onUpgrade()达到旧数据升级的效果。在onCreate函数中创建表格: java代码:
  1. public void onCreate(SQLiteDatabase db) {
  2. StringBuilder sql = new StringBuilder();
  3. sql.append("CREATE TABLE ");
  4. sql.append(TBL_NAME);
  5. sql.append(" (");
  6. sql.append(FIELD_ID + " TEXT PRIMARY KEY NOT NULL, ");
  7. sql.append(FIELD_NAME + " TEXT, ");
  8. sql.append(FIELD_AGE + " INTEGER");
  9. sql.append(");");
  10. db.execSQL(sql.toString());
  11. }
onCreate函数只会在数据库第一次创建时调用,所以此处适合做一些数据库初始化操作。上面的函数最终实际上效果是执行了SQL语句: java代码: 向表格中添加数据有两种方式可以向表格中添加数据,一种是通过SQLiteDatabase提供的execSQL函数直接执行SQL指令; 一种是通过SQLiteDatabase提供的insert函数,此函数把SQL语句进行了封装方便用户使用。 通过execSQL("INSERT INTO mytable VALUES('idStr', 'nameStr', 20);");可以插入一条记录, 当插入记录出错时会抛出异常需要处理。 通过insert函数:insert函数需要一个ContentValues类型的值,此类型类似于hashmap,一个key,一个值配成一对。key就是字段名。 java代码:
  1. ContentValues v = new ContentValues();
  2. v.put("id", "101");
  3. v.put("name", "user 101");
  4. v.put("age", 44);
  5. mDb.insert("mytable", "null", v);
如果v中的key没有完全的指定所有字段,比如少name或者少id,那么记录能否被成功插入要根据表格创建时的字段限制来决定, 比如少name,那么此记录会插入,只是name字段的值为NULL;如果少id,那么记录不会被插入,因为创建时指定了NOT NULL.可以通过以下指令来查看结果:adb shell执行后进入shell;cd /data/data/cn.demo.sqlsqlite3 database.db 进入了sqlite操作界面。.help可以看到命令帮助。 .dump 可以看到数据库中的数据。
为了方便使用,可以自定义一个insert函数,将值通过参数传入,而ContentValues设置则在函数内部实现。 java代码:
  1. public void insert(String id, String name, int age) {

  2. if( mDb == null ) mDb = getWritableDatabase();
  3. ContentValues v = new ContentValues();
  4. v.put("id", id);
  5. v.put("name", name);
  6. if(age > 0) v.put("age", age);
  7. mDb.insert(TBL_NAME, "null", v);
从表格中查询记录SQL语句:SELECT column list FROM table WHERE expr ORDER BY column list; 通过SQLiteDatabase类的query()函数 Java代码:
  1. Cursor SQLiteDatabase.query(String table,
  2. String[] columns, String selection, String[] selectionArgs,
  3. String groupBy, String having, String orderBy);
Parameters: table 要更新的记录所在的表名。 values 要更新的字段值。 whereClause Where子句。更新哪些记录。 whereArgs Where子句中的'?'替换串。 执行update操作时,如果只给部分字段赋值,那么update后,没有赋值的字段仍然保持原来的值不变。从表格中删除记录:

SQLite内建语法表

结构定义
CREATE TABLE

创建新表。

语法:

sql-command ::= CREATE [TEMP | TEMPORARY] TABLE table-name (
column-def [, column-def]*
[, constraint]*
)
sql-command ::= CREATE [TEMP | TEMPORARY] TABLE [database-name.] table-name AS select-statement
column-def ::= name [type] [[CONSTRAINT name] column-constraint]*
type ::= typename |
typename ( number ) |
typename ( number , number )
column-constraint ::= NOT NULL [ conflict-clause ] |
PRIMARY KEY [sort-order] [ conflict-clause ] |
UNIQUE [ conflict-clause ] |
CHECK ( expr ) [ conflict-clause ] |
DEFAULT value |
COLLATE collation-name
constraint ::= PRIMARY KEY ( column-list ) [ conflict-clause ] |
UNIQUE ( column-list ) [ conflict-clause ] |
CHECK ( expr ) [ conflict-clause ]
conflict-clause ::= ON CONFLICT conflict-algorithm

CREATE VIEW

创建一个视图(虚拟表),该表以另一种方式表示一个或多个表中的数据。

语法:

sql-command ::= CREATE [TEMP | TEMPORARY] VIEW [database-name.] view-name AS select-statement

例子:
CREATE VIEW master_view AS
SELECT * FROM sqlite_master WHERE type='view';
说明:
创建一个名为master_view的视图,其中包括sqlite_master这个表中的所有视图表。
CREATE TRIGGER

创建触发器,触发器是一种特殊的存储过程,在用户试图对指定的表执行指定的数据修改语句时自动执行。

语法:

sql-statement ::= CREATE [TEMP | TEMPORARY] TRIGGER trigger-name [ BEFORE | AFTER ]
database-event ON [database-name .] table-name
trigger-action
sql-statement ::= CREATE [TEMP | TEMPORARY] TRIGGER trigger-name INSTEAD OF
database-event ON [database-name .] view-name
trigger-action
database-event ::= DELETE |
INSERT |
UPDATE |
UPDATE OF column-list
trigger-action ::= [ FOR EACH ROW | FOR EACH STATEMENT ] [ WHEN expression ]
BEGIN
trigger-step ; [ trigger-step ; ]*
END
trigger-step ::= update-statement | insert-statement |
delete-statement | select-statement

例子:
CREATE TRIGGER update_customer_address UPDATE OF address ON customers
BEGIN
UPDATE orders SET address = new.address WHERE customer_name = old.name;
END;
说明:
创建了一个名为update_customer_address的触发器,当用户更新customers表中的address字段时,将触发并更新orders表中的address字段为新的值。
比如执行如下一条语句:
UPDATE customers SET address = '1 Main St.' WHERE name = 'Jack Jones';
数据库将自动执行如下语句:
UPDATE orders SET address = '1 Main St.' WHERE customer_name = 'Jack Jones';

CREATE INDEX

为给定表或视图创建索引。

语法:

sql-statement ::= CREATE [UNIQUE] INDEX index-name
ON [database-name .] table-name ( column-name [, column-name]* )
[ ON CONFLICT conflict-algorithm ]
column-name ::= name [ COLLATE collation-name] [ ASC | DESC ]

例子:
CREATE INDEX idx_email ON customers (email);
说明:
为customers表中的email创建一个名为idx_email的字段。

结构删除
DROP TABLE

删除表定义及该表的所有索引。

语法:

sql-command ::= DROP TABLE [database-name.] table-name
例子:
DROP TABLE customers;
DROP VIEW

删除一个视图。

语法:

sql-command ::= DROP VIEW view-name

例子:
DROP VIEW master_view;

DROP TRIGGER

删除一个触发器。

语法:

sql-statement ::= DROP TRIGGER [database-name .] trigger-name

例子:
DROP TRIGGER update_customer_address;

DROP INDEX

删除一个索引。

语法:

sql-command ::= DROP INDEX [database-name .] index-name

例子:
DROP INDEX idx_email;

数据操作
INSERT

将新行插入到表。

语法:

sql-statement ::= INSERT [OR conflict-algorithm] INTO [database-name .] table-name [(column-list)] VALUES(value-list) |
INSERT [OR conflict-algorithm] INTO [database-name .] table-name [(column-list)] select-statement
UPDATE

更新表中的现有数据。

语法:

sql-statement ::= UPDATE [ OR conflict-algorithm ] [database-name .] table-name
SET assignment [, assignment]*
[WHERE expr]
assignment ::= column-name = expr

DELETE

从表中删除行。

语法:

sql-statement ::= DELETE FROM [database-name .] table-name [WHERE expr]
SELECT

从表中检索数据。

语法:

sql-statement ::= SELECT [ALL | DISTINCT] result [FROM table-list]
[WHERE expr]
[GROUP BY expr-list]
[HAVING expr]
[compound-op select]*
[ORDER BY sort-expr-list]
[LIMIT integer [( OFFSET | , ) integer]]
result ::= result-column [, result-column]*
result-column ::= * | table-name . * | expr [ [AS] string ]
table-list ::= table [join-op table join-args]*
table ::= table-name [AS alias] |
( select ) [AS alias]
join-op ::= , | [NATURAL] [LEFT | RIGHT | FULL] [OUTER | INNER | CROSS] JOIN
join-args ::= [ON expr] [USING ( id-list )]
sort-expr-list ::= expr [sort-order] [, expr [sort-order]]*
sort-order ::= [ COLLATE collation-name ] [ ASC | DESC ]
compound_op ::= UNION | UNION ALL | INTERSECT | EXCEPT
REPLACE

类似INSERT

语法:

sql-statement ::= REPLACE INTO [database-name .] table-name [( column-list )] VALUES ( value-list ) |
REPLACE INTO [database-name .] table-name [( column-list )] select-statement
事务处理
BEGIN TRANSACTION

标记一个事务的起始点。

语法:

sql-statement ::= BEGIN [TRANSACTION [name]]

END TRANSACTION

标记一个事务的终止。

语法:

sql-statement ::= END [TRANSACTION [name]]
COMMIT TRANSACTION

标志一个事务的结束。

语法:

sql-statement ::= COMMIT [TRANSACTION [name]]
ROLLBACK TRANSACTION

将事务回滚到事务的起点。

语法:

sql-statement ::= ROLLBACK [TRANSACTION [name]]
其他操作
COPY

主要用于导入大量的数据。

语法:

sql-statement ::= COPY [ OR conflict-algorithm ] [database-name .] table-name FROM filename
[ USING DELIMITERS delim ]
例子:
COPY customers FROM customers.csv;
EXPLAIN

语法:

sql-statement ::= EXPLAIN sql-statement
PRAGMA

语法:

sql-statement ::= PRAGMA name [= value] |
PRAGMA function(arg)
VACUUM

语法:

sql-statement ::= VACUUM [index-or-table-name]
ATTACH DATABASE

附加一个数据库到当前的数据库连接。

语法:

sql-statement ::= ATTACH [DATABASE] database-filename AS database-name
DETTACH DATABASE

从当前的数据库分离一个使用ATTACH DATABASE附加的数据库。

语法:

sql-command ::= DETACH [DATABASE] database-name

SQLite内建函数表

算术函数
abs(X) 返回给定数字表达式的绝对值。
max(X,Y[,...]) 返回表达式的最大值。
min(X,Y[,...]) 返回表达式的最小值。
random(*) 返回随机数。
round(X[,Y]) 返回数字表达式并四舍五入为指定的长度或精度。
字符处理函数
length(X) 返回给定字符串表达式的字符个数。
lower(X) 将大写字符数据转换为小写字符数据后返回字符表达式。
upper(X) 返回将小写字符数据转换为大写的字符表达式。
substr(X,Y,Z) 返回表达式的一部分。
randstr()
quote(A)
like(A,B) 确定给定的字符串是否与指定的模式匹配。
glob(A,B)
条件判断函数
coalesce(X,Y[,...])
ifnull(X,Y)
nullif(X,Y)
集合函数
avg(X) 返回组中值的平均值。
count(X) 返回组中项目的数量。
max(X) 返回组中值的最大值。
min(X) 返回组中值的最小值。
sum(X) 返回表达式中所有值的和。
其他函数
typeof(X) 返回数据的类型。
last_insert_rowid() 返回最后插入的数据的ID。
sqlite_version(*) 返回SQLite的版本。
change_count() 返回受上一语句影响的行数。
last_statement_change_count()
数据库基础概念SQlite 通过文件来保存数据库,一个文件就是一个数据库。数据库里又包含数个表格;每个表格里面包含了多个记录;每个记录由多个字段组成;每个字段都有其对应的值;每个值都可以指定类型。数据库名称即文件名;表格有自己的名称;记录没有名称;每个字段都有名称。在SQlite中,记录没有顺序的概念,不存在第一、第二此类的概念;只能通过
因为之前用的时候都是封装好的,直接调用就好,碰到忘记的时候就百度一下,导致一直记不住,所以今天我觉得有必要抽点时间来 总结 一下这块。 1、创建表:可以通过工具直接创建(注意其主键的设置),也可用sql语句创建 create table if not exists student(_ id integer primary key autoincrement, name varchar, sex v...
import android .annotation.SuppressLint; import android .content.ContentValues; import android .content.Context; import android .database.Cursor; import android .database. sqlite . SQLite Database; import andr...
通常使用方法: //打开或创建 数据 SQLite Database db=openOrCreateDatabase("test.db", Context.MODE_PRIVATE, null); db.execSQL("DROP TABLE IF EXISTS person");
总结 SQLite 花了好多时间,参考了不少资料。以下知识如果觉得眼熟,不要怀疑,这些 总结 中的代码,虽然很多不是我自己写的,但是这些代码都是通用的。 SQLite 存储并不难,就是麻烦而已,希望下面的 总结 能够对你们有帮助。 Android 中每一个 数据 库对创建它的应用程序包套件来说都是私有的,默认情况下其他应用程序无法直接访问此私有 数据 库。所有的 数据 库文件存放在手机中的/data/dat...
### 回答1: Android Studio是一种集成开发环境,用于开发 Android 移动应用程序。而学生信息管理 SQLite 是一种使用 SQLite 数据 库的学生信息管理系统。 在 Android Studio中,我们可以创建一个新项目来建立学生信息管理系统。首先,我们需要创建一个 SQLite 数据 库,并定义学生的相关信息,如学生 ID 、姓名、年龄、性别等。然后,我们可以使用 SQLite OpenHelper类来管理 数据 库的创建和版本控制。 在应用程序的界面上,我们可以使用各种 Android 组件来展示学生的信息,如ListView或RecyclerView来展示学生的列表,EditText和Button来添加和修改学生的信息。我们还可以使用SQL语句来进行 数据 库的 查询 和更新操作,如通过姓名 查询 学生、修改学生的年龄等。 为了提高用户体验,我们还可以使用一些 Android Studio提供的功能和类库,如Shared Preferences来保存用户的配置信息,如排序方式、模糊搜索等。我们还可以使用 Android 的模板和样式来美化界面,使用户操作更加友好和直观。 总而言之,在 Android Studio中,我们可以使用 SQLite 数据 库来实现学生信息管理系统。通过创建 数据 库、定义表结构、使用SQL语句进行 数据 库操作以及合理运用 Android Studio提供的功能和类库,我们可以开发一个功能完善、易用且美观的学生信息管理系统。 ### 回答2: 在 Android Studio中使用 SQLite 数据 库进行学生信息管理非常简单。首先,我们需要在项目中创建一个 数据 库和表来存储学生的信息。可以使用 SQLite OpenHelper类来创建 数据 库和表。 在创建 数据 库时,需要定义 数据 库的名称和版本号,然后在onCreate()方法中创建表,并定义表的列。例如,可以创建一个名为"students"的表,包含 id 、姓名和年龄这三个列。 在应用程序的主界面上,可以使用EditText和Button来输入和保存学生的信息。当用户点击保存按钮时,首先获取EditText中的学生信息并存储在相应的变量中。然后,创建一个ContentValues对象,将学生信息插入到 数据 库表中。 下一步是显示已保存的学生信息。可以使用RecyclerView来显示学生列表。在RecyclerView的适配器中 查询 数据 库,并将 查询 结果显示在列表中。可以将学生的姓名和年龄显示在列表项中,并为每个列表项添加了一个点击事件监听器。 在点击学生列表项时,可以使用Intent来传递学生信息到下一个界面,以便进行学生详细信息的展示和编辑。可以在目标界面使用TextView和EditText来显示和编辑学生信息。并且还可以添加一个删除按钮,让用户可以删除存储在 数据 库中的学生信息。 总结 来说,使用 Android Studio进行学生信息管理 SQLite 数据 库是一个简单而有用的应用。通过创建 数据 库和表、使用适配器将 数据 展示在RecyclerView中,并使用意图传递 数据 到其他界面,我们可以轻松地实现学生信息的存储、显示和编辑。 ### 回答3: Android Studio 是一款用于开发 Android 应用程序的集成开发环境。学生信息管理是一个常见的应用场景,可以利用 Android Studio 结合 SQLite 数据 库来实现。 首先,在 Android Studio 中创建一个新的项目。在项目的布局文件中,可以设计一个输入学生信息的界面,包括学生的姓名、学号、性别、年龄等信息。 接下来,创建一个 DBHelper 类来管理 数据 库的创建、更新和操作。通过 SQLite Database 类提供的方法,可以创建 数据 库、创建表、插入 数据 查询 数据 等。例如,可以创建一个名为 "students" 的表来存储学生的信息,包括学生的姓名、学号、性别、年龄等字段。 在应用程序的逻辑代码中,可以编写增、删、改、查等操作的方法,并与用户界面进行交互。例如,可以编写一个添加学生信息的方法,当用户在界面上输入学生信息并点击提交按钮时,可以将信息通过 DBHelper 类插入到 数据 库中。另外,也可以编写一个 查询 学生信息的方法,当用户点击 查询 按钮时,可以根据输入的 查询 数据 库中的学生信息,并在界面上显示 查询 结果。 此外,还可以使用 RecyclerView 来展示学生信息列表,可以通过适配器将 查询 到的 数据 展示在 RecyclerView 中。可以根据学号、姓名等关键字对学生信息进行排序和搜索,并进行相应的响应操作,如删除、修改等。 综上所述,通过使用 Android Studio 和 SQLite 数据 库,可以实现学生信息的管理功能。这样的应用程序可以方便地记录和管理学生的基本信息,并支持增、删、改、查等操作,提高学校管理的效率和便利性。