基础学习总结(四)--SQLite
1. 加载驱动.
2. 连接数据库.
3. 操作数据库.
SQLite:一款轻量级的数据库,除了主键(Primark key)需要设置为Integer类型且填充数据必须是integer类型,其它字段均任意类型填充
字段属性与语法sqlserver类似,但无关键字
在android系统中提供了SQLiteOpenHelper抽象类,用于版本管理与操作:
onCreate:数据库创建时执行
onUpgrade:数据库更新版本时执行
onOpen:数据库打开连接时执行
实现SQLiteOpenHelper抽象类
1 /* 2 * 数据库帮助类 3 * */ 4 public class PersonSQLiteOpenHelper extends SQLiteOpenHelper { 5 6 7 public PersonSQLiteOpenHelper(Context context) { 8 //super(context, name, factory, version); 9 /* 10 * context 上下文 11 * name 数据库名 12 * factory游标工厂 13 * version 版本,必须大于1*/ 14 super(context, "cuiOne.db", null, 1); 15 // TODO Auto-generated constructor stub 16 } 17 18 //数据库第一次创建时回调此方法 19 //初始化一些表 20 @Override 21 public void onCreate(SQLiteDatabase db) { 22 // TODO Auto-generated method stub 23 String sql="create table Person(_id integer primary key,age integer,name varchar(20));"; 24 db.execSQL(sql); 25 26 } 27 28 //数据库的版本号更新时回调此 方法, 29 //更新数据库内容 30 @Override 31 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 32 // TODO Auto-generated method stub 33 34 } 35 36 }
View Code
使用sql语句实现数据的insert、query
1 public class Persondao { 2 PersonSQLiteOpenHelper mOpenHelper;//成员变量 3 4 public Persondao(Context context){ 5 mOpenHelper=new PersonSQLiteOpenHelper(context); 6 } 7 8 public void insert(Person p){ 9 //赋给db写入权限 10 SQLiteDatabase db= mOpenHelper.getWritableDatabase(); 11 //判断数据库状态是否为打开状态 12 if(db.isOpen()){ 13 db.execSQL("insert into person(name,age) values(?,?);", new Object[]{p.getName(),p.getAge()}); 14 db.close(); 15 } 16 } 17 18 public List<Person> queryAll(){ 19 SQLiteDatabase db=mOpenHelper.getReadableDatabase(); 20 if(db.isOpen()){ 21 Cursor rawCur = db.rawQuery("select _id,age,name from Person", null); 22 if(rawCur!=null&&rawCur.getCount()>0){ 23 List<Person> list=new ArrayList<Person>(); 24 int id;int age;String name; 25 while(rawCur.moveToNext()){ 26 id=rawCur.getInt(0); 27 age=rawCur.getInt(1); 28 name=rawCur.getString(1); 29 list.add(new Person(id,age,name)); 30 } 31 db.close(); 32 return list; 33 } 34 db.close(); 35 } 36 return null; 37 } 38 39 public Person queryItem(int id){ 40 SQLiteDatabase db=mOpenHelper.getReadableDatabase(); 41 if(db.isOpen()){ 42 Cursor cur=db.rawQuery("select _id,age,name from Person where _id=?;", new String[]{String.valueOf(id)}); 43 //判断游标在移动到下一个位置时是否有值 44 if(cur!=null&&cur.moveToFirst()){ 45 int _id=cur.getInt(0); 46 int age=cur.getInt(1); 47 String name=cur.getString(2); 48 db.close(); 49 return new Person(_id,age,name); 50 } 51 db.close(); 52 } 53 return null; 54 55 } 56 }
View Code
使用SQLite工具类实现i,d,u,q
public class PersonDao2 {private static final String TAG = "PersonDao2";private PersonSQLiteOpenHelper mOpenHelper; // 数据库的帮助类对象public PersonDao2(Context context) {mOpenHelper = new PersonSQLiteOpenHelper(context);}/*** 添加到person表一条数据* @param person*/public void insert(Person person) {SQLiteDatabase db = mOpenHelper.getWritableDatabase();if(db.isOpen()) { // 如果数据库打开, 执行添加的操作 ContentValues values = new ContentValues();values.put("name", person.getName()); // key作为要存储的列名, value对象列的值values.put("age", person.getAge());long id = db.insert("person", "name", values);Log.i(TAG, "id: " + id);db.close(); // 数据库关闭 }}/*** 更据id删除记录* @param id*/public void delete(int id) {SQLiteDatabase db = mOpenHelper.getWritableDatabase(); // 获得可写的数据库对象if(db.isOpen()) { // 如果数据库打开, 执行添加的操作 String whereClause = "_id = ?";String[] whereArgs = {id + ""};int count = db.delete("person", whereClause, whereArgs);Log.i(TAG, "删除了: " + count + "行");db.close(); // 数据库关闭 }}/*** 根据id找到记录, 并且修改姓名* @param id* @param name*/public void update(int id, String name) {SQLiteDatabase db = mOpenHelper.getWritableDatabase();if(db.isOpen()) { // 如果数据库打开, 执行添加的操作ContentValues values = new ContentValues();values.put("name", name);int count = db.update("person", values, "_id = ?", new String[]{id + ""});Log.i(TAG, "修改了: " + count + "行");db.close(); // 数据库关闭 }}public List<Person> queryAll() {SQLiteDatabase db = mOpenHelper.getReadableDatabase(); // 获得一个只读的数据库对象if(db.isOpen()) {String[] columns = {"_id", "name", "age"}; // 需要的列String selection = null; // 选择条件, 给null查询所有String[] selectionArgs = null; // 选择条件的参数, 会把选择条件中的? 替换成数据中的值String groupBy = null; // 分组语句 group by nameString having = null; // 过滤语句String orderBy = null; // 排序 Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);int id;String name;int age;if(cursor != null && cursor.getCount() > 0) {List<Person> personList = new ArrayList<Person>();while(cursor.moveToNext()) { // 向下移一位, 知道最后一位, 不可以往下移动了, 停止.id = cursor.getInt(0);name = cursor.getString(1);age = cursor.getInt(2);personList.add(new Person(id, name, age));}db.close();return personList;}db.close();}return null;}/*** 根据id查询人* @param id* @return*/public Person queryItem(int id) {SQLiteDatabase db = mOpenHelper.getReadableDatabase(); // 获得一个只读的数据库对象if(db.isOpen()) {String[] columns = {"_id", "name", "age"}; // 需要的列String selection = "_id = ?"; // 选择条件, 给null查询所有String[] selectionArgs = {id + ""}; // 选择条件的参数, 会把选择条件中的? 替换成数据中的值String groupBy = null; // 分组语句 group by nameString having = null; // 过滤语句String orderBy = null; // 排序 Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);if(cursor != null && cursor.moveToFirst()) { // cursor对象不为null, 并且可以移动到第一行int _id = cursor.getInt(0);String name = cursor.getString(1);int age = cursor.getInt(2);db.close();return new Person(_id, name, age);}db.close();}return null;} }
事务的使用:
// 开启事务
db.beginTransaction();
// 标记事务成功
db.setTransactionSuccessful();
// 停止事务
db.endTransaction();
转载于:https://www.cnblogs.com/cuijl/p/4582311.html
基础学习总结(四)--SQLite相关推荐
- Shell 脚本基础学习 (四)
现在我们来讨论编写一个脚本的一般步骤.任何优秀的脚本都应该具有帮助和输入参数.并且写一个伪脚本(framework.sh),该脚本包含了大多数脚本都需要的框架结构,是一个非常不错的主意.这时候,在写一 ...
- 量子计算入门基础学习(四——对角化,算符 迹 张量积)
大家好,欢迎来到量子计算的第四部分,如果您是第一次观看我的博客,如果您也是和我一样刚入门量子力学或是量子计算相关的学习,纠结于量子的抽象与晦涩难懂,那么本专栏(量子计算)一定是您的不二之选,学海本就苦 ...
- python基础学习(四)if判断语句
if判断语句的基本语法 在python中,if判断的格式如下: if 条件:条件成立时,执行的语句...... 注意:代码的缩进要使用一个tab键或者四个空格(建议使用四个空格,tab和空格最好不要混 ...
- python基础学习十四:面向对象三大特性之继承
一.继承的基本概念 Python面向对象的继承指的是多个类之间的所属关系,即子类默认继承父类的所有属性和方法,具体如下: # ⽗类A class A(object):def __init__(self ...
- DC基础学习(四)综合优化的三个阶段
Design Compiler(以下简称DC)是Synopsys公司用于做电路综合的核心工具,可以将HDL描述的电路转换为基于工艺库的门级网表.本系列主要介绍综合相关的知识以及DC工具的使用. DC进 ...
- MySQL的基础学习(四)
文章目录 一.视图 1. 单表视图 2. 多表视图 3. 视图操作语法 4. 视图更新 二.索引 1. 原理 1.1 Hash算法 1.2 二叉树 1.3 平衡二叉树 1.4 BTree 2. 操作 ...
- java基础学习(四)
一.程序流程控制介绍: 在程序中,程序运行的流程控制决定程序是如何执行的,主要有 三大流程控制语句: 顺序控制 分支控制 循环控制 1.顺序控制:程序从上到下逐行地执行,中间没有任何判断和跳转 注:j ...
- 游戏开发 c++基础学习 第四天笔记摘要
第四天笔记摘要 数组 一组相同数据类型变量的集合 定义:类型 数组名[]:大小必须是常量或常量表达式>=1 内存:所有元素内存大小之和(连续内存) 数据元素的访问:数组名[ 下标]:下标从0开始 ...
- salesforce 零基础学习(四十二)简单文件上传下载
项目中,常常需要用到文件的上传和下载,上传和下载功能实际上是对Document对象进行insert和查询操作.本篇演示简单的文件上传和下载,理论上文件上传后应该将ID作为操作表的字段存储,这里只演示文 ...
- JavaScript基础学习第四天
目标: 1. 通过循环的方式获取数组中的值,给数组赋值. 2. 能够理解为什么程序中要用数组 3. 能使用数组操作程序中的数据 ☞ 为什么要学习数组? 1. 什么是数组?: 依然是一个用来保存数据的一 ...
最新文章
- 如何让人大致理解RxJava思想:第一节 初步理解RxJava
- 对话推荐系统_RSPapers | 对话推荐系统论文合集
- linux ssh非交互脚本,Linux expect非交互式执行脚本
- 软件设计师学习3——操作系统知识1
- getmethodid( android/widget/toast ),Android功能实现-Go语言中文社区
- SQL 事务(Tran | Transation)与 Try...Catch 的使用
- P5960 【模板】差分约束算法 · spfa
- 请为横线处选择合适的程序使得程序的运行结果是123 ( )
- 假定在使用CSMA/CD协议的10Mbit/s以太网中某个站在发送数据时检测到碰撞,执行退避算法时选择了随机数r=100.试问这个站需要等待多长时间后才能再次发送数据?如果是100Mbit/s的以太网
- (解决)org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)问题的办法
- Matlab气液相界面,MATLAB,气液相平衡程序,求帮忙改一下。
- 学号,课程名查询成绩
- Android 蓝牙 ble 随机地址深层次分析
- 公众号文章排版样式——隐藏样式
- 微信小程序电商项目源代码开放连载二三事
- 15首中秋诗词,有2首你肯定熟悉
- 临时文件传输工具推荐
- Linux安装maven
- 牛视源码定制,抖音矩阵系统。come here
- 搞懂Python切片中start、end、steps正负的区别
热门文章
- linux fork 目录,linux fork()理解
- matlab数据求加速度,通过从移动设备获取加速度数据对进行计步
- PHP中self和static的区别,php中self与static的区别
- linux服务器六个状态,六、Linux_SSH服务器状态
- vs2015编译linux源码,使用Visual Studio 2017(VS2017)编译OpenCC 1.0.4 (Open Chinese Convert)源代码...
- python迷宫问题求最短路径_用栈求解迷宫问题的所有路径及最短路径程序
- OpenCV中的尺度不变特征变换(SIFT Scale-Invariant Feature Transform)
- 使用Python、OpenCVImageMagick工具箱制作GIF动画
- 【Mysql】日期、行变列(IF、CASE WHEN THEN)语句总结
- C语言:随笔10--共用体