SQLite 数据库

7 篇文章 0 订阅
4 篇文章 0 订阅

1 SQLite简介

SQLite是一种轻量级的基于文件的数据库管理系统,由c语言编写,实现了标准SQL中的CRUD操作。SQLite具有小巧、高效的特点,因此常用于手机等嵌入式设备中来进行数据的存取和各种操作。
SQLite内部支持的数据类型

数据类型说明
NULL空值
INTEGER有符号整数
REAL浮点数,存储在8个字节的空间
TEXT文本字符串,以数据库编码方式存储文本
BLOB二进制字节数据

实际上SQLite完全可以接受varchar(n)、char(n)、decima(p,s)等数据类型,只不过SQLite会在运算或保存时将它们转换成上面5种数据类型中的相应类型。

2 SQLite基本操作

事实上SQLite同Java操作Mysql、SQL Server等基本相同。只不过操作步骤没有那么繁琐了而已。

2.1 操作顺序

以下步骤以android为例
1.安装SQLite。官网下载,然后配置环境
2.对应Android工程下导入相信数据库文件
3.创建SQLDatabase对象操作(这个SQLite对象相当于Java操作数据库中的Connection和Statement结合体)

2.2 SQLDatabase常用方法

常用静态方法打开或创建数据库

方法名说明
static SQLiteDatabase openDatabase(String path, SQLiteDatabase.CursorFactory factory, int flags)打开path文件所代表的SQLite数据库
static SQLiteDatabase openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory)打开或创建(不存在)path文件所代表的SQLite数据库
static SQLiteDatabase openOrCreateDatabase(File file, SQLiteDatabase.CursorFactory factory)打开或创建(不存在)file文件所代表的SQLite数据库

以上方法都是返回一个SQLDatabase数据库对象,此对象为操作的核心。
上边的CursorFactory factory是指明查询操作的Cursor对象,常采用默认工厂。
常用操作方法

方法名说明
executeSQL(String sql, Object[] bindArgs)执行带占位符的sql语句
executeSQL(String sql)执行sql语句
rawQuerySQL(String sql, String[] selectionArgs)执行带占位符的sql语句

除此之外,SQLlite还提供了其他大量方法,比如说insert、delete、update等

2.3 Cursor类提供方法

Cursor类似Java操作数据库中的ResultSet,因此方法大多类似。
常用方法

方法名说明方法名说明
move(int offset)offset为正则下移,为负则上移boolean moveToNext()指针移向下一行
boolean moveToFirst()记录指针移到第一行boolean moveToLast()记录指针移到最后一行
boolean moveToPosition(int position)记录指针移到指定行boolean moveToPrevious()记录指针移到上一行
2.4 实例
public class DataConnection implements DataFunction{
 SQLiteDatabase con = null;
 public DataConnection(String path, String tableName) {
  	con = SQLiteDatabase.openOrCreateDatabase(path, null);
  	try {
   		con.execSQL("create table " + tableName 
    			 + " (id varchar(10) primary key, name varchar(20) not null)");
 	} catch(SQLException e) {
   		e.printStackTrace();
  	}	
 }
 @Override
 public Cursor select(String tableName) {
  	Cursor cr = con.rawQuery("select * from " + tableName, null);
  	return cr;
 }
 @Override
 public Cursor select(String tableName, String id) {
  	Cursor cr = con.rawQuery("select * from " + tableName 
    		+ " where id = ?", new String[] {id});
  	return cr;
 }
 @Override
 public boolean insert(String tableName, User user) {
  	boolean flag = true;
  	try {
   		con.execSQL("insert into " + tableName + " values(?, ?)", 
    			new String[] {user.getID(), user.getName()});
  	} catch(SQLException e) {
   		flag = false;
   		e.printStackTrace();
  	}
  	return flag;
 }
 @Override
 public boolean delete(String tableName, String id) {
  	boolean flag = true;
  	try {
   		con.execSQL("delete from " + tableName + " where id = ?", 
    			new String[] {id});
  	} catch(SQLException e) {
   		flag = false;
   		e.printStackTrace();
  	}
  	return flag;
 }
 @Override
 public boolean update(String tableName, String id, String name) {
  	boolean flag = true;
  	try {
   		con.execSQL("update " + tableName + " set name = ? where id = ?", 
    			new String[] {name, id});
  	} catch(SQLException e) {
   		flag = false;
   		e.printStackTrace();
  	}
  	return flag;
 }
 @Override
 public boolean delete(String tableName) {
  	boolean flag = true;
  	try {
   		con.execSQL("delete from " + tableName);
  	} catch(SQLException e) {
   		e.printStackTrace();
  	}
  	return flag;
 }
}

3 SQLiteOpenHelper

3.1 简介
顾名思义,这是一个工具类,主要用来帮我们创建或打开数据库。使用之前需要创建其子类,其子类会重写一个构造器以及两个方法。首先介绍构造器,接下来再介绍两个重写的方法。
构造器

public DataOpenHelper(Context context, String dbname, int version, String tableName, String sql) {
  	super(context, dbname, null, version);
 }

需要调用父类构造器,并且传入四个参数。四个参数分别是:Context(可以理解为Activity),数据库名称,Cursor工厂(使用默认Cursor工厂),版本。
强调一下这个版本,首先这个版本是一个整型数值,是由程序员自己指定的。要求:版本需要是递增的,当系统即SQLiteOpenHelper的upgrade()方法检测到目前版本大于之前版本便会被调用执行。
当然我们也可以继续在子类构造器里添加其他内容。
方法

方法说明
onCreate(SQLiteDatabase db)创建指定地数据库,首次执行时调用
onUpgrade(SQLiteDatabase db, int oleVersion, int newVersion)指定数据库被更新时调用,第二、三参数分别用来指定需要被更新的旧的数据库版本号和更新后新的数据库版本号

onCreate(…)内通常放执行创建表的sql语句

3.2 实例

接下来实例主要是通过SQLiteOpenHelper创建数据库以及表,然后插入数据和读取数据。
SQLiteOpenHelper的子类

public class DataOpenHelper extends SQLiteOpenHelper{
 String createTable;
 String tableName;
 public DataOpenHelper(Context context, String dbname, int version, String tableName, String sql) {
  	super(context, dbname, null, version);
  	createTable = sql;
  	this.tableName = tableName;
 }
 @Override
 public void onCreate(SQLiteDatabase db) {
  	db.execSQL(createTable);
 }
 @Override
 public void onUpgrade(SQLiteDatabase db, int oleVersion, int newVersion) {
  	db.execSQL("drop table id exists " + tableName);
  	onCreate(db);
 }
}

具体操作类

public class DataConnection {
 SQLiteDatabase db;
 String dbName = "temp";
 int dbVersion = 1;
 String dbTableName = "student";
 DataOpenHelper helper;
 String sql = "";
 
 public DataConnection(Context context) {
  	sql = "create table student (id varchar(10) primary key, name varchar(20) not null)";
  	helper = new DataOpenHelper(context, dbName, dbVersion, dbTableName, sql);
  	db = helper.getWritableDatabase();
 }
 public boolean insert(String id, String name) {
  boolean flag = true;
  	try {
   		db.execSQL("insert into " + dbTableName + " values(?, ?)", new String[] {id, name});
  	} catch(SQLiteException e) {
   		flag = false;
   		e.printStackTrace();
  }
  	return flag;
 }
 public Cursor select() {
  	Cursor cs = db.rawQuery("select * from student", null);
  	return cs;
 }
}

这里只写了插入和查找方法,删除和更新类似。
这里这是测试,具体项目可以自行传入数据库名称、数据表名等。这里只给出了后台代码,具体活动中代码只是对后台的调用,因此不再给出。

执行完之后,我们可以通过DDMS File Explorer查看数据库位置。File Explorer内容很多,数据库在data文件夹下的data,具体位置在项目文件夹下。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值