Android中Sqlite数据库进行增删改查
今天这篇文章写Sqlite数据库,通过一个小案例来完整讲一下数据库常见的CRUD操作。
先对知识点总结:
SQLite数据库
轻量级关系型数据库
创建数据库需要使用的api:SQLiteOpenHelper
必须定义一个构造方法:
//arg1:数据库文件的名字
//arg2:游标工厂,用不到
//arg3:数据库版本,做版本升级
public MyOpenHelper(Context context, String name, CursorFactory factory, int version){}数据库被创建时会调用:onCreate方法
数据库升级时会调用:onUpgrade方法
创建数据库
//创建OpenHelper对象
MyOpenHelper oh = new MyOpenHelper(getContext(), "person.db", null, 1);
//获得数据库对象,如果数据库不存在,先创建数据库,后获得,如果存在,则直接获得,
SQLiteDatabase db = oh.getWritableDatabase();
getWritableDatabase():打开可读写的数据库,建议
getReadableDatabase():在磁盘空间不足时打开只读数据库,否则打开可读写数据库,不建议
在创建数据库时创建表
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("create table person (_id integer primary key autoincrement, name char(10), phone char(20), money integer(20))");
}
数据库的增删改查
SQL语句
insert into person (name, phone, money) values ('张三', '159874611', 2000);
delete from person where name = '李四' and _id = 4;
update person set money = 6000 where name = '李四';
select name, phone from person where name = '张三';
执行SQL语句实现增删改查
//插入
db.execSQL("insert into person (name, phone, money) values (?, ?, ?);", new Object[]{"张三", 15987461, 75000});
//查找
Cursor cs = db.rawQuery("select _id, name, money from person where name = ?;", new String[]{"张三"});
使用api实现增删改查
插入
//以键值对的形式保存要存入数据库的数据
ContentValues cv = new ContentValues();
cv.put("name", "刘能");
cv.put("phone", 1651646);
cv.put("money", 3500);
//返回值是改行的主键,如果出错返回-1
long i = db.insert("person", null, cv);删除
//返回值是删除的行数
int i = db.delete("person", "_id = ? and name = ?", new String[]{"1", "张三"});修改
ContentValues cv = new ContentValues();
cv.put("money", 25000);
int i = db.update("person", cv, "name = ?", new String[]{"赵四"});查询
//arg1:要查询的字段
//arg2:查询条件
//arg3:填充查询条件的占位符
Cursor cs = db.query("person", new String[]{"name", "money"}, "name = ?", new String[]{"张三"}, null, null, null);
while(cs.moveToNext()){
// 获取指定列的索引值
String name = cs.getString(cs.getColumnIndex("name"));
String money = cs.getString(cs.getColumnIndex("money"));
System.out.println(name + ";" + money);
}
开始写相关的Demo代码:
UserDB:用于创建数据和升级数据库
public class UserDB extends SQLiteOpenHelper {
public UserDB(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
//创建数据库,创建user表,有三个字段
db.execSQL("create table user(_id integer primary key autoincrement, " +
"name char(10), " +
"salary char(20)," +
"phone integer(20))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//升级数据库调用,不做处理
System.out.println("数据库升级了");
}
}
UserDao:用于CRUD,真正的对数据库的操作:
/**对数据进行CRUD的Dao层*/
public class UserDao {
//要对数据CRUD,必须拿到userDB的实例
private UserDB userDB;
public UserDao(Context context){
//创建UserDB实例
this.userDB = new UserDB(context, "user.db", null, 1);
}
//增加
public void insert(){
SQLiteDatabase database = userDB.getWritableDatabase();
//使用sql语句插入数据
database.execSQL("insert into user (name, salary, phone)values(?, ?, ?)", new Object[]{"小志的老婆", "13000", 138438});
database.execSQL("insert into user (name, salary, phone)values(?, ?, ?)", new Object[]{"小志的儿子", 14000, "13888"});
database.execSQL("insert into user (name, salary, phone)values(?, ?, ?)", new Object[]{"小志", 14000, "13888"});
//使用api插入数据
ContentValues values = new ContentValues();
//往表中的列中添加数据
values.put("name", "游天龙");//这里的键值不是随便写入的,要与数据库里面的内容一样。
values.put("salary", 16000);
values.put("phone", "15999");//这里的值可以不是字符串也可以,sqlite能把数据以字符串的形式存储进去
//利用SQLiteDatabase对象,对数据进行添加
long insert = database.insert("user", null, values);//这里的null就始终写成null就好了
System.out.println(insert);//返回值是改行的主键,如果出错返回-1
database.close();//关闭数据库
}
//修改
public void updata(){
SQLiteDatabase database = userDB.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("salary", 16000);//更新数据,因此更新的数据要用ContentValues对象传递进去
//返回值:the number of rows affected
int i = database.update("user", values, "name = ?", new String[]{"游天龙"});//the number of rows affected
System.out.println(i);
database.close();
}
//删除
public void delete(){
SQLiteDatabase database = userDB.getWritableDatabase();
int i = database.delete("user", "name = ? and _id = ?", new String[]{"游天龙", "3"});
//the number of rows affected。删除了几行就返回。就是说有几行被影响了。
System.out.println(i);
database.close();
}
//查询
public List<UserBean> query(){
List<UserBean> datas = new ArrayList<UserBean>();
SQLiteDatabase database = userDB.getWritableDatabase();
Cursor cursor = database.query("user", null, null, null, null, null, null, null);
while(cursor.moveToNext()){
UserBean userBean = new UserBean();
String name = cursor.getString(cursor.getColumnIndex("name"));
String phone = cursor.getString(cursor.getColumnIndex("phone"));
String salary = cursor.getString(cursor.getColumnIndex("salary"));
userBean.setName(name);
userBean.setPhone(phone);
userBean.setSalary(salary);
datas.add(userBean);
}
database.close();
cursor.close();
return datas;
}
}
基于面向对象的思想,数据存储到javabean中
public class UserBean {
private String name;
private String phone;
private String salary;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getSalary() {
return salary;
}
public void setSalary(String salary) {
this.salary = salary;
}
@Override
public String toString() {
return "\n姓名 :" + name + "\n电话 :" + phone + "\n薪水 :" + salary;
}
}
最后在活动中,添加四个按钮分别进行增删改查
public class MainActivity extends Activity {
private UserDao dao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dao = new UserDao(this);
}
/**增*/
public void insertApi(View v){
dao.insert();
}
/**删*/
public void deleteApi(View v){
dao.delete();
}
/**改*/
public void updateApi(View v){
dao.updata();
}
/**查*/
public void selectApi(View v){
List<UserBean> mDatas = dao.query();
//可以封装在listView等其它界面端显示
System.out.println(mDatas.toString());
}
}
最后查询后的输出结果:
Android中Sqlite数据库进行增删改查的更多相关文章
- android 对sqlite数据库的增删改查等各种操作
转载:http://blog.csdn.net/vrix/article/details/6717090 package com.sqlite.main; import java.io.File; i ...
- Android对Sqlite数据库的增删改查
SqLite 数据库 Google 为我们提供了sqlite相关的api SqLiteOpenHelper 这是一个抽象的类 如果想要使用的话,需要其他的类去继承他 SqLiteDatabase 类 ...
- Android学习---SQLite数据库的增删改查和事务(transaction)调用
上一篇文章中介绍了手工拼写sql语句进行数据库的CRUD操作,本文将介绍调用sqlite内置的方法实现CRUD操作,其实质也是通过拼写sql语句. 首先,创建一个新的android项目: 其次,查看代 ...
- java程序设计课期中考试——数据库的增删改查和简单的js界面
首先是设计思路,对于数据库的增删改查,我们借助Ecilipse来进行前端和后端的编写.Ecilipse是可以进行java web项目的操作的. 前端,我们选择用使用jsp,所谓的jsp就是可以嵌入其他 ...
- Android下利用SQLite数据库实现增删改查
1: 首先介绍如何利用adb查看数据库 1: adb shell 2: cd /data/data/包名/databases 3: sqlite3 数据库 4 接下来就可以进行数据库的sql语法 ...
- [Android] SQLite数据库之增删改查基础操作
在编程中常常会遇到数据库的操作,而Android系统内置了SQLite,它是一款轻型数据库,遵守事务ACID的关系型数据库管理系统,它占用的资源非常低,可以支持Windows/Linux/Un ...
- greendao对SQLite数据库的增删改查操作
利用greendao操作数据库时,都是以对象或者对象的list来进行增删改查的操作,操作的结果都是用一个list来接收的!!! 1.增加一条记录 Stu stu01=new Stu();stu01.s ...
- SQLite数据库以及增删改查的案例
Android使用开源的与操作系统无关的SQL数据库——SQLite 一:在命令行下创建数据库: 1.启动模拟器后,打开命令行,执行adb shell 2.进入所在工程目录 3.执行sqlite3 m ...
- django中对数据库的增删改查
Django的配置文件时settings.py中的 TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplate ...
随机推荐
- STL之map排序
描述 STL的map中存储了字符串以及对应出现的次数,请分别根据字符串顺序从小到大排序和出现次数从小到大排序. 部分代码已经给出,请补充完整,提交时请勿包含已经给出的代码. int main() { ...
- angular中使用echart遇到的获取容器高度异常的问题记录
问题 在使用echart去创建图表时,发现图表只占了容器的一个角落,如图,并没有充满容器. 第一反应是容器元素的样式有问题,于是我把容器的宽高都改为px指定的(之前是百分比设定的,查询资料发现说ech ...
- 浅谈轮播图(原生JavaScript实现)
现在各种轮播图插件,玲琅满目,用起来也非常方便,通常只需要选择元素然后传入参数就可以了.但是,和授人以鱼不如授人以渔一样的道理,不管怎样最基本的轮播图原理还是应当掌握的.这样不仅有利于我们自己写出来满 ...
- Centos常用命令之:ls和cd
在使用centos这个linux系统的时候,我们总是免不了需要查看当前目录中的内容,需要切换到别的目录,新建删除等等一系列在window中非常普通的操作. 那在linux中这些操作是什么样的呢. 在l ...
- [测试题]幸运序列(lucky)
Description Ly喜欢幸运数字,众所周知,幸运数字就是数字位上只有4和7的数字. 但是本题的幸运序列和幸运数字完全没关系,就是一个非常非常普通的序列.哈哈,是不是感觉被耍了,没错,你就是被耍 ...
- hdu 5893 (树链剖分+合并)
List wants to travel Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/O ...
- 【USACO】 录制唱片
题目描述 贝西想从奶牛摇滚乐队的 N 首歌里挑出一些录制一套专辑.专辑分 K 张唱片,每张唱片可容纳总长为 C 分钟的歌曲.第 i 首歌的长度为 T i 分钟,录制唱片时,唱片之间的歌曲需要保持原本的 ...
- 2015 多校联赛 ——HDU5323(搜索)
Solve this interesting problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- python 用codecs实现数据的读取
import numpy as np import codecs f=codecs.open('testsklearn.txt','r','utf-8').readlines() print(f) d ...
- Amazon新一代云端关系数据库Aurora(上)
本文由 网易云发布. 在2017年5月芝加哥举办的世界顶级数据库会议SIGMOD/PODS上,作为全球最大的公有云服务提供商,Amazon首次系统的总结 了新一代云端关系数据库Aurora的设计实现 ...