SQLite在Android上的基本用法
来源:互联网 发布:安卓解压软件 编辑:程序博客网 时间:2024/06/05 14:31
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在
很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结
合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生
于2000年5月。 至2015年已经有15个年头,SQLite也迎来了一个版本 SQLite 3已经发布。
SQLite虽然很小巧,但是支持的SQL语句不会逊色于其他开源数据库,它支持的SQL包括:
ATTACH DATABASE
BEGIN TRANSACTION
comment
COMMIT TRANSACTION
COPY
CREATE INDEX
CREATE TABLE
CREATE TRIGGER
CREATE VIEW
DELETE
DETACH DATABASE
DROP INDEX
DROP TABLE
DROP TRIGGER
DROP VIEW
END TRANSACTION
EXPLAIN
expression
INSERT
ON CONFLICT clause
PRAGMA
REPLACE
ROLLBACK TRANSACTION
SELECT
UPDATE
数据库基本的操作都是基于这些函数方法的,不同的办法可以实现数据库不同的功能特性。
数据库一般都会存在以下几个行为:
(1)创建数据库元素:表,列等结构。(可以参考office表格的样式去理解)
(2)登录数据库或者引入数据库。(SQlite不限于语言的不同,可以很轻松的用自己的擅长的语言去访问)
(3)数据库元素的具体操作动作:增加元素,更改元素,查找元素,删除元素。
(4)数据库的性能提升。(许多时候SQLite会有小、快、简单的特点,但是提高性能依然很重要)
(5)数据安全。(对于一定级别的数据,希望采取更为可靠地数据处理方案,SQLite也是优缺点的。)
下面一整段代码是基于android关于SQLite的简单操作,要求API是11以上版本:
package com.example.SQLite;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.widget.CursorAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class MainActivity extends Activity {
SQLiteDatabase sdb;
private ListView lsv;//为了方便显示数据库提供一个可视化的View
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lsv=(ListView) findViewById(R.id.lsvId);
//1.创建或打开一个数据库
sdb=openOrCreateDatabase(
"contacts.db",//数据库名字
Context.MODE_PRIVATE,//应用模式(应用程序私有)
null);//factory CursorFactory
//2.操作数据库
//2.1)创建表(表是数据库最基本存储单元)
createTable();
//2.2)向表中写入数据
//insertTab01();
//insertTab02();
//insertTab03();
//2.3)查询表中数据
//query01();//控制台输出
//query02();//显示在页面
//2.4)修改表中数据
//update01();
//update02();
query01();
//2.5)删除表中数据
delete01();
delete02();
query01();
//3.关闭数据库
sdb.close();
}
/**创建表*/
private void createTable(){
//1.编写SQL语句(语法)
//语法: create table 表名(列名 类型 [约束],.....)
String sql=
"create table if not exists contact(" +//+是字符串换行时系统自己加上的,与SQLite语句无关
"_id integer primary key autoincrement," +//autoincrement (表示自增),这里注意Id的写法!
"name text," +
"phone text not null)";
//2.发送SQL(将此语句交给SQLite去执行)
sdb.execSQL(sql);
Log.i("TAG", "table create ok!");
}
/**向表中写入数据*/
public void insertTab01(){
String sql=
"insert into contact values " +
"(null,'zhenghe','137')";
sdb.execSQL(sql);
}
/**向表中写入数据*/
public void insertTab02(){
//此写法,不允许为空的列必须
//出现在contact()括号中
String sql=
"insert into contact(name,phone) " +
"values('fuqian','138')";
sdb.execSQL(sql);
}
/**向表中写入数据(底层帮你拼接sql)*/
public void insertTab03(){
ContentValues values=
new ContentValues();//封装要写入的数据
values.put("name", "xiaofeng");
values.put("phone","177");
long id=sdb.insert("contact",//tablename
null,//nullColumnHack(非空列给的默认值)
values);
Log.i("TAG", "insert.id="+id);
}
/**查询表中数据*/
public void query01(){
String sql="select * from contact";
Cursor c=sdb.rawQuery(sql, null);
//String sql=//"*"代表所有字段
// "select * from contact " +
//"where phone=?";//"?"代表占位符
// "where name like ? order by name desc";//模糊查询,并降序排序(升序为asc)
//Cursor c=//内置一个指针,通过指针的移动取数据
//sdb.rawQuery(sql,new String[]{"137"});//selectionArgs
//sdb.rawQuery(sql,new String[]{"%e%"});//selectionArgs
if(c==null){
Log.i("TAG", "query error!");
return;
}
if(!c.moveToFirst()){
Log.i("TAG", "no data");
return;
}
//取数据
do{//上面已经移动一次指针,第一次直接取
int id=c.getInt(
c.getColumnIndex("_id"));
String name=c.getString(c.getColumnIndex("name"));
String phone=c.getString(c.getColumnIndex("phone"));
Log.i("TAG", id+"/"+name+"/"+phone);
}while(c.moveToNext());//循环一次取一行
//关闭cursor
c.close();
}
Cursor cursor;
public void query02(){
cursor=
sdb.query("contact",//table
null,//columns ,null代表所有列
"_id=? or phone=? ",//where 子句
new String[]{"1","177"},//where 子句中?的值
null,//groupBy
null,//having
null);//orderBy
//从cursor中取数据显示在页面上
SimpleCursorAdapter adapter=
new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_2,
cursor,
new String[]{"phone","name"},//from查询字段
new int[]{android.R.id.text1,android.R.id.text2},//to表示要显示的位置
CursorAdapter.//观察者
FLAG_REGISTER_CONTENT_OBSERVER);
//关联适配器
lsv.setAdapter(adapter);
}
public void update01(){
String sql=
"update contact set name=? " +
"where _id=?";
sdb.execSQL(sql,
new String[]{"zhouhan","4"});
}
public void update02(){
ContentValues values=
new ContentValues();
values.put("name","dayuan");
sdb.update("contact",
values,
"_id=?",
new String[]{"4"});
}
public void delete01(){
//删除所有
//String sql="delete from contact";
//删除指定数据
String sql=
"delete from contact" +
" where _id=?";
sdb.execSQL(sql,
new String[]{"4"});//id=4的记录被删除
}
public void delete02(){
//删除所有
//String sql="delete from contact";
//删除指定数据
sdb.delete("contact",
"_id>=?",new String[]{"4"});
}
/**Activity销毁时执行此方法*/
@Override
protected void onDestroy() {
super.onDestroy();
if(cursor!=null)
cursor.close();
}
}
很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结
合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生
于2000年5月。 至2015年已经有15个年头,SQLite也迎来了一个版本 SQLite 3已经发布。
SQLite虽然很小巧,但是支持的SQL语句不会逊色于其他开源数据库,它支持的SQL包括:
ATTACH DATABASE
BEGIN TRANSACTION
comment
COMMIT TRANSACTION
COPY
CREATE INDEX
CREATE TABLE
CREATE TRIGGER
CREATE VIEW
DELETE
DETACH DATABASE
DROP INDEX
DROP TABLE
DROP TRIGGER
DROP VIEW
END TRANSACTION
EXPLAIN
expression
INSERT
ON CONFLICT clause
PRAGMA
REPLACE
ROLLBACK TRANSACTION
SELECT
UPDATE
数据库基本的操作都是基于这些函数方法的,不同的办法可以实现数据库不同的功能特性。
数据库一般都会存在以下几个行为:
(1)创建数据库元素:表,列等结构。(可以参考office表格的样式去理解)
(2)登录数据库或者引入数据库。(SQlite不限于语言的不同,可以很轻松的用自己的擅长的语言去访问)
(3)数据库元素的具体操作动作:增加元素,更改元素,查找元素,删除元素。
(4)数据库的性能提升。(许多时候SQLite会有小、快、简单的特点,但是提高性能依然很重要)
(5)数据安全。(对于一定级别的数据,希望采取更为可靠地数据处理方案,SQLite也是优缺点的。)
下面一整段代码是基于android关于SQLite的简单操作,要求API是11以上版本:
package com.example.SQLite;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.util.Log;
import android.widget.CursorAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
public class MainActivity extends Activity {
SQLiteDatabase sdb;
private ListView lsv;//为了方便显示数据库提供一个可视化的View
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lsv=(ListView) findViewById(R.id.lsvId);
//1.创建或打开一个数据库
sdb=openOrCreateDatabase(
"contacts.db",//数据库名字
Context.MODE_PRIVATE,//应用模式(应用程序私有)
null);//factory CursorFactory
//2.操作数据库
//2.1)创建表(表是数据库最基本存储单元)
createTable();
//2.2)向表中写入数据
//insertTab01();
//insertTab02();
//insertTab03();
//2.3)查询表中数据
//query01();//控制台输出
//query02();//显示在页面
//2.4)修改表中数据
//update01();
//update02();
query01();
//2.5)删除表中数据
delete01();
delete02();
query01();
//3.关闭数据库
sdb.close();
}
/**创建表*/
private void createTable(){
//1.编写SQL语句(语法)
//语法: create table 表名(列名 类型 [约束],.....)
String sql=
"create table if not exists contact(" +//+是字符串换行时系统自己加上的,与SQLite语句无关
"_id integer primary key autoincrement," +//autoincrement (表示自增),这里注意Id的写法!
"name text," +
"phone text not null)";
//2.发送SQL(将此语句交给SQLite去执行)
sdb.execSQL(sql);
Log.i("TAG", "table create ok!");
}
/**向表中写入数据*/
public void insertTab01(){
String sql=
"insert into contact values " +
"(null,'zhenghe','137')";
sdb.execSQL(sql);
}
/**向表中写入数据*/
public void insertTab02(){
//此写法,不允许为空的列必须
//出现在contact()括号中
String sql=
"insert into contact(name,phone) " +
"values('fuqian','138')";
sdb.execSQL(sql);
}
/**向表中写入数据(底层帮你拼接sql)*/
public void insertTab03(){
ContentValues values=
new ContentValues();//封装要写入的数据
values.put("name", "xiaofeng");
values.put("phone","177");
long id=sdb.insert("contact",//tablename
null,//nullColumnHack(非空列给的默认值)
values);
Log.i("TAG", "insert.id="+id);
}
/**查询表中数据*/
public void query01(){
String sql="select * from contact";
Cursor c=sdb.rawQuery(sql, null);
//String sql=//"*"代表所有字段
// "select * from contact " +
//"where phone=?";//"?"代表占位符
// "where name like ? order by name desc";//模糊查询,并降序排序(升序为asc)
//Cursor c=//内置一个指针,通过指针的移动取数据
//sdb.rawQuery(sql,new String[]{"137"});//selectionArgs
//sdb.rawQuery(sql,new String[]{"%e%"});//selectionArgs
if(c==null){
Log.i("TAG", "query error!");
return;
}
if(!c.moveToFirst()){
Log.i("TAG", "no data");
return;
}
//取数据
do{//上面已经移动一次指针,第一次直接取
int id=c.getInt(
c.getColumnIndex("_id"));
String name=c.getString(c.getColumnIndex("name"));
String phone=c.getString(c.getColumnIndex("phone"));
Log.i("TAG", id+"/"+name+"/"+phone);
}while(c.moveToNext());//循环一次取一行
//关闭cursor
c.close();
}
Cursor cursor;
public void query02(){
cursor=
sdb.query("contact",//table
null,//columns ,null代表所有列
"_id=? or phone=? ",//where 子句
new String[]{"1","177"},//where 子句中?的值
null,//groupBy
null,//having
null);//orderBy
//从cursor中取数据显示在页面上
SimpleCursorAdapter adapter=
new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_2,
cursor,
new String[]{"phone","name"},//from查询字段
new int[]{android.R.id.text1,android.R.id.text2},//to表示要显示的位置
CursorAdapter.//观察者
FLAG_REGISTER_CONTENT_OBSERVER);
//关联适配器
lsv.setAdapter(adapter);
}
public void update01(){
String sql=
"update contact set name=? " +
"where _id=?";
sdb.execSQL(sql,
new String[]{"zhouhan","4"});
}
public void update02(){
ContentValues values=
new ContentValues();
values.put("name","dayuan");
sdb.update("contact",
values,
"_id=?",
new String[]{"4"});
}
public void delete01(){
//删除所有
//String sql="delete from contact";
//删除指定数据
String sql=
"delete from contact" +
" where _id=?";
sdb.execSQL(sql,
new String[]{"4"});//id=4的记录被删除
}
public void delete02(){
//删除所有
//String sql="delete from contact";
//删除指定数据
sdb.delete("contact",
"_id>=?",new String[]{"4"});
}
/**Activity销毁时执行此方法*/
@Override
protected void onDestroy() {
super.onDestroy();
if(cursor!=null)
cursor.close();
}
}
0 0
- SQLite在Android上的基本用法
- Android Sqlite的基本用法
- android的SQLite基本用法
- android SQLite基本用法
- Android SQLite基本用法
- Android ,SQLite基本用法
- Android中SQLite的基本用法
- Sqlite的基本用法
- SQLITE在ANDROID上的一个BUG
- Android 操作SQLite基本用法
- Android 操作SQLite基本用法
- Android 操作SQLite基本用法
- Android 操作SQLite基本用法
- Android 操作SQLite基本用法
- Android 操作SQLite基本用法
- Android 操作SQLite基本用法
- Android 操作SQLite基本用法
- Android 操作SQLite基本用法
- J2SE:总结—基础很重要哈!
- linux下的简单计算器bc
- Java类集介绍
- httpclient向HTTPS发送数据建立SSL连接时的错误
- 蓝桥杯:删除数组零元素
- SQLite在Android上的基本用法
- 没有上司的晚会 树形DP
- 进程和线程管理(一)
- CentOS 修改 Mysql 端口
- Objective-C 基本语法:实例变量与成员变量的区别
- ci项目完成后隐藏入口文件,开启为静态,缓存
- 获取网络图片httpclicent--AsyncTask-小圆点图片轮播
- Microsoft Infrastructure as a Service Foundations-Multi-Tenant Designs
- 查看死循环