前言
上一篇文章我写了Android的5种常见存储方式,由于时间问题写的不够详细,所以准备单独一节进行细说一下sqlite 同时模拟在项目中的使用希望对自己和他人能够有所帮助 ,让我们开始吧!从此学会在项目中轻量使用sqlite数据库 ! 你也可以选择点击喜欢,以便在工作中查看复习
1.Sqlite数据库(优点)
- 开源的
- 轻量的
- sql的增删改查语句和mysql很像
2.数据库的创建
java在硬盘上创建文件
//在内存中创建指向D盘的文件对象
File file=new File("D://data.txt");
//用file对象在硬盘上创建一个文件
FileOutputStream fos=new FileOutputStream(file);
fos.write("hello".getBytes());
fos.close();
Android在手机上创建数据库文件
1)在内存中创建数据库帮助类对象
2)用数据库对象去创建文件
路径:/data/data/包名/databases/
数据库的创建:
//在内存中创建数据库对象 使用数据库帮助类进行创建
MyDbOpenHelper dbHelper = new MyDbOpenHelper(this);
//创建一个可写入的数据库
SQLiteDatabase db dbHelper.getWritableDatabase();
数据库帮助类:
package yingxininfo.net.netidcard.data;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class MyDbOpenHelper extends SQLiteOpenHelper {
private static final String Tag = "MyDbOpenHelper";
/**
*
* @param context
* 上下文
* @param name
* 数据库名称
* @param factory
* 游标(null用默认的游标工厂)
* @param version
* 数据库版本 >=1的整数
*/
public MyDbOpenHelper(Context context) {
super(context, "student.db", null, 1);
// TODO Auto-generated constructor stub
Log.i(Tag, "数据库帮助类对象创建");
}
/**
* 只在第一次创建数据库的时候调用
* 比较适合用来创建数据库的表
*/
@Override
public void onCreate(SQLiteDatabase db) {
//
Log.i(Tag, "onCreate方法被调用了!");
// 创建数据库的表
db.execSQL("create table stu(_id integer primary key autoincrement,name varcher(20),num varcher(20))");
Log.i(Tag, "数据库表创建成功!");
}
/**
* 数据库的版本升级时调用 数据库只可升级不可降级 升级时能够修改表结构
*/
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
// TODO Auto-generated method stub
Log.i(Tag, "onUpgrade方法被调用了,数据库版本升级了");
}
}
第一次创建数据库的时候会调用 onCreate();
这方法值调用一次 比较适合用于创建收库的表
// 创建数据库的表
db.execSQL("create table stu(_id integer primary key autoincrement,name varcher(20),num varcher(20))");
在升级的时候修改表 onUpgrade();
db.execSQL("alter table stu add stopdate varcher(20)");
SQL数据库升级
数据库的版本升级时调用
version递增 不能降级
3.数据库的增删改查语句
增加 insert into 表名 (‘字段名’....)values('字段名对应的数据'....)
insert into stu ('name','num')
values('lixioayang','410185199211044510')
查询 select * from 表名 查询表中所有的数据
select * from stu
-修改 update 表名 set 字段名=“” where 字段名=“”
update stu set name='happy' where _id=4 把_id为4的 数据的名字改为‘happy’
-删除 delete from 表名 where 字段=“”
delete FROM stu WHERE _id=3 删除表中_id为3的一行数据
4.数据库增删改查在Android中两种写法
1.书写sql语句的方式进行增删改查
-增加
//在内存中创建数据库对象
MyDbOpenHelper dbHelper = new MyDbOpenHelper(this);
//创建一个可写入的数据库
SQLiteDatabase db = dbHelper.getWritableDatabase();
//在Android中双引号内是不允许写入单引号的所以使用占位符?
db.execSQL("insert into stu (name,num) values(?,?)"
,new Object[]{"alibaba","11111111111111"});
//释放资源
db.close();
-删除
//在内存中创建数据库对象
MyDbOpenHelper dbHelper = new MyDbOpenHelper(this);
//创建一个可写入的数据库
SQLiteDatabase db = dbHelper.getWritableDatabase();
//在Android中双引号内是不允许写入单引号的
db.execSQL("delete from stu where name=?"
,new String[]{"alibaba"});
//释放资源
db.close();
-修改
//在内存中创建数据库对象
MyDbOpenHelper dbHelper = new MyDbOpenHelper(this);
//创建一个可写入的数据库
SQLiteDatabase db = dbHelper.getWritableDatabase();
//在Android中双引号内是不允许写入单引号的
db.execSQL("update stu set name='im_risingsun' where _id=?",new Object[]{4});
//释放资源
db.close();
-查询
//在内存中创建数据库对象
MyDbOpenHelper dbHelper = new MyDbOpenHelper(this);
//创建一个可写入的数据库
SQLiteDatabase db = dbHelper.getWritableDatabase();
//在Android中双引号内是不允许写入单引号的
Cursor cursor = db.rawQuery("select * from stu",null);
//将数据库中的内容逐条读取出来 并进行打印 movetonext是如果有下一条 返回true
while (cursor.moveToNext()) {
int id = cursor.getInt(0);
String name = cursor.getString(1);
String num = cursor.getString(2);
System.out.println("id:"+id+" name:"+name+" num:"+num+"\n");
}
//释放资源
db.close();
2.使用Android的系统API进行增删改查
-增加
//在内存中创建数据库对象
MyDbOpenHelper dbHelper = new MyDbOpenHelper(this);
//创建一个可写入的数据库
SQLiteDatabase db = dbHelper.getWritableDatabase();
//要添加的字段的键值对
ContentValues values = new ContentValues();
values.put("name", "blibli");
values.put("num", "123456");
/**
* table 表名
* nullColumnHack null
* values ContentValues要添加的字段的键值对
*return long 返回结果是表示 添加的数据的位置 -1代表修改失败
*/
long id = db.insert("stu", null, values);
if(id==-1){
Toast.makeText(this, "添加数据失败喽", 0).show();
}else {
Toast.makeText(this, "添加数据成功,插入的位置是id= "+id, 0).show();
}
//释放资源
db.close();
-删除
//在内存中创建数据库对象
MyDbOpenHelper dbHelper = new MyDbOpenHelper(this);
//创建一个可写入的数据库
SQLiteDatabase db = dbHelper.getWritableDatabase();
/**
* table 表名
* whereClause 占位符
* whereArgs 参数
*return 返回结果是表示 删除了多少条数据 -1代表修改失败
*/
int result = db.delete("stu", "name=?",new String[]{"blibli"});
if(result==-1){
Toast.makeText(this, "删除数据失败喽", 0).show();
}else {
Toast.makeText(this, "删除成功 "+result+" 行", 0).show();
}
//释放资源
db.close();
-修改
//在内存中创建数据库对象
MyDbOpenHelper dbHelper = new MyDbOpenHelper(this);
//创建一个可写入的数据库
SQLiteDatabase db = dbHelper.getWritableDatabase();
//要修改为的字段的键值对
ContentValues values = new ContentValues();
values.put("name", "risingsun");
values.put("num", "100861110010");
/**
* table 表名
* values 修改的列
* whereClause 条件
* whereArgs 修改条件中的占位符
*
*return 返回结果是表示 修改了多少条数据 -1代表修改失败
*/
int result = db.update("stu", values, null, null);
if(result==-1){
Toast.makeText(this, "修改数据失败喽", 0).show();
}else {
Toast.makeText(this, "修改成功 "+result+" 行", 0).show();
}
//释放资源
db.close();
-查询
//在内存中创建数据库对象
MyDbOpenHelper dbHelper = new MyDbOpenHelper(this);
//创建一个可写入的数据库
SQLiteDatabase db = dbHelper.getWritableDatabase();
/**
* table 表名
* columns 要查询的列
* selection 查询条件
* selectionArgs 查询条件的占位符
* groupBy 分组
* having 查询条件
* orderBy 排序
* limit 限制
*/
Cursor cursor = db.query("stu", new String[]{"_id","name","num"},null, null, null, null, null, null);
while (cursor.moveToNext()) {
int id = cursor.getInt(0);
String name = cursor.getString(1);
String num = cursor.getString(2);
System.out.println("id:"+id+" name:"+name+" num:"+num+"\n");
}
//释放资源
db.close();
网友评论