Android下的Sqlite数据库
SQLite,是一款轻型的数据库,它包含在一个相对小的C库中。它的设计目标是嵌入式的,而 且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需 要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很 多程序语言相结合,SQLite第一个Alpha版本诞生于2000年5月。 至2016年已经有16个年头, SQLite也迎来了一个版本 SQLite 3已经发布。
如何创建数据库
创建数据库帮助类(构造器)
//数据库表⽂文件
public static final String DB_NAME="contact.db"; //数据库版本
public static final int DB_VERSION=1;
public DbOpenHelper(Context context) {
//context 一言难尽//name 数据库名//factory表示游标//version版本
super(context, DB_NAME, null, DB_VERSION);
}
创建一般文件
File file=new File(getFilesDir(),"mock.txt");
file.createNewFile();
创建数据库文件
MyOpenHelper helper=new MyOpenHelper(this);
helper.getReadableDatabase();
创建数据库表
@Override
//数据库⽂文件创建的时候调⽤用该⽅方法
public void onCreate(SQLiteDatabase db) {
System.out.println("onCreate");
//创建数据库表
db.execSQL("create table contactinfo(_id integer primary key autoincrement," +"username varchar(20),phone varchar(15));");
}
数据库更新
//数据库更新 只要跟之前的数据库版本不⼀一样 则会调⽤用 该⽅方法可以修改数据库表的各种数 据
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// oldVersion表示旧版本 newVersion 新版本
Log.v("liwangjiang", "onUpgrade"+" oldVersion=" +oldVersion+" newVersion="+newVersion);
}
保存数据库文件:/data/data/包名/databases/xxx.db
数据库增删改查的SQL语句
增加(插入联系人 手机号到数据库):
insert into contactinfo (username,phone) values('zhangsan','150188888888');
修改(设置zhangsan的手机为1501111111):
update contactinfo set phone='150111111111' where username='zhangsan';
删除(删除那个叫李四的联系人):
delete from contactinfo where username='lisi';
查询(查询电话为15022222222的用户):
select username,phone from contactinfo where phone='15022222222';
数据库增删改查代码实现
开发步骤:
1.首先在Sqlite expert工具中确保SQL语句正常运行.
2.创建Dao层 封装你需要的Dao业务(CURD)
3.创建界面去调用
public class ContactDao {
private DbOpenHelper dbOpenHelper;
public ContactDao(Context context){
dbOpenHelper = new DbOpenHelper(context);
}
public boolean insertContact(String username,String phone){
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
//插入数据第一个tabel表示表名
//第二个是表示nullColumnHack表示是否为空
//values表示键值对
ContentValues values = new ContentValues();
values.put(DbOpenHelper.USERNAME, username);
values.put(DbOpenHelper.PHONE, phone);
//返回-1表示错误
long i = db.insert(DbOpenHelper.TABLE_NAME, null, values);
return i!=-1;
}
public boolean updataContact(String username,String newPhone){
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
//table表示表名
//values 表示更新的键值对
//whereClause where语句
//whereArgs where语句绑定的值
ContentValues values = new ContentValues();
values.put(DbOpenHelper.PHONE, newPhone);
int i = db.update(DbOpenHelper.TABLE_NAME, values,
DbOpenHelper.USERNAME+"=?", new String[]{username});
return i>0;
}
public boolean deleteContact(String username){
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
//table 表示表名
//whereClause表示where语句
//whereArgs表示绑定的值
int i = db.delete(DbOpenHelper.TABLE_NAME, ""+DbOpenHelper.USERNAME+"=?",new String[]{username});
return i>0;
}
public String selectContact(String phone){
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
//table 表示表名
//columns 返回多少列 比如 new String[]{'列名','列名2'} 行数
//selection where语句
//selectionArgs表示绑定的值
Cursor cursor = db.query(DbOpenHelper.TABLE_NAME,new String[]{DbOpenHelper.USERNAME,DbOpenHelper.PHONE} ,
""+dbOpenHelper.PHONE+"=?", new String[]{phone}, null, null, null);
String result="";
while(cursor.moveToNext()){
//根据列名返回索引
int usernameIndex=cursor.getColumnIndex(DbOpenHelper.USERNAME);
String username = cursor.getString(usernameIndex);
int phoneIndex = cursor.getColumnIndex(DbOpenHelper.PHONE);
String phones = cursor.getString(phoneIndex);
result+=("名字 : "+username+" 电话 : "+phones+" \n");
}
return result;
}
}
//直接复制即可
在这里有 SQLiteOpenHelper对象.getWritableDatabase();或getReadableDatabase();两种的区别在
1.getWritableDatabase();
--用于写数据比如你要插入一条数据插入进去是写数据 写数据就要使用getWritableDatabase();方法返回一个SQLiteDatabase对象
2.getReadableDatabase();
--用于读数据比如你要查看一条数据就是读在数据表中读取数据进来 写数据就要使用getReadableDatabase();方法返回一个SQLiteDatabase对象
以上方法他执行玩没有返回值下面图片注释可以了解
Sqlite3工具的使用
Sqlite3工具的位置:
..\android-adt-bundle\sdk\tools\sqlite3.exe
如何进入sqlite3命令行:
1. 先执行adb -s 模拟器名称 shell
2. linux shell命令: cd /data/data/包名/databases 到databases目录下 pwd 查看当前的 目录位置
Sqlite3工具常用操作:
sqlite3 数据库文件名(进入了数据库)
查看该文件下的所有数据库表 .tables
查看某个数据库表结构 select * from 表名;
退出sqlite3 .quit
数据库增删改查的Google实现
Sqlite3
File file=new File("xxxx");
1.flie.createNewFile();
2.创建一个输出流
如何创建一个数据库文件
继承SqliteOpenHelper类 在构造器里面设置数据库文件的名称 数据库的版本
SqliteOpenHelper helper=new SqliteOpenHelper();
helper.getWriteableDatabase()/getReadableDatabase()
一个数据库文件可以有多张数据库表
SqliteOpenHelper提供了两个方法:onCreate() onUpgrad()
onCreate()什么时候被调用 数据库文件被创建的时候调用
可以在该方法里面执行创建多张数据库表的操作
onUpgrad()什么时候调用 判断新安装的应用的版本号跟手机原有应用的版本号是否不同
修改数据库表 db,oladVersion,newVersion
如何执行CURD
1.通过sql语句 SqliteDatabase.executeSQL(sql,bindArgs[]);
2.通过google的API SqliteDatabase.delete()
3.查询
通过sql: Cursor=SqliteDatabase.rawQuery()
通过google的API Cursor=SqliteDatabase.query()
Cursor:数据集
1.返回多条数据 while(cursor.moveToNext()){ }
2.返回的多条数据中 移动到某一行 if(cursor.moveToPosition(int pos)){ }
3.只返回一条数据 if(cursor.moveToFirst()){ }
4.读取数据:
列的索引=cursor.getColumnIndex(列名)
cursor.get数据类型(列的索引)
对外提供服务 (使用单元测试)
/data/data/package name/databases/xxxx.db
//事务数据库 都是安卓系统在维护
/data/data/package name/databases/xxxx-后缀.db