基础学习总结(四)--SQLite
1. 加载驱动.
2. 连接数据库.
3. 操作数据库.
SQLite:一款轻量级的数据库,除了主键(Primark key)需要设置为Integer类型且填充数据必须是integer类型,其它字段均任意类型填充
字段属性与语法sqlserver类似,但无关键字
在android系统中提供了SQLiteOpenHelper抽象类,用于版本管理与操作:
onCreate:数据库创建时执行
onUpgrade:数据库更新版本时执行
onOpen:数据库打开连接时执行
实现SQLiteOpenHelper抽象类
- /*
- * 数据库帮助类
- * */
- public class PersonSQLiteOpenHelper extends SQLiteOpenHelper {
- public PersonSQLiteOpenHelper(Context context) {
- //super(context, name, factory, version);
- /*
- * context 上下文
- * name 数据库名
- * factory游标工厂
- * version 版本,必须大于1*/
- super(context, "cuiOne.db", null, 1);
- // TODO Auto-generated constructor stub
- }
- //数据库第一次创建时回调此方法
- //初始化一些表
- @Override
- public void onCreate(SQLiteDatabase db) {
- // TODO Auto-generated method stub
- String sql="create table Person(_id integer primary key,age integer,name varchar(20));";
- db.execSQL(sql);
- }
- //数据库的版本号更新时回调此 方法,
- //更新数据库内容
- @Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
- // TODO Auto-generated method stub
- }
- }
使用sql语句实现数据的insert、query
- public class Persondao {
- PersonSQLiteOpenHelper mOpenHelper;//成员变量
- public Persondao(Context context){
- mOpenHelper=new PersonSQLiteOpenHelper(context);
- }
- public void insert(Person p){
- //赋给db写入权限
- SQLiteDatabase db= mOpenHelper.getWritableDatabase();
- //判断数据库状态是否为打开状态
- if(db.isOpen()){
- db.execSQL("insert into person(name,age) values(?,?);", new Object[]{p.getName(),p.getAge()});
- db.close();
- }
- }
- public List<Person> queryAll(){
- SQLiteDatabase db=mOpenHelper.getReadableDatabase();
- if(db.isOpen()){
- Cursor rawCur = db.rawQuery("select _id,age,name from Person", null);
- if(rawCur!=null&&rawCur.getCount()>0){
- List<Person> list=new ArrayList<Person>();
- int id;int age;String name;
- while(rawCur.moveToNext()){
- id=rawCur.getInt(0);
- age=rawCur.getInt(1);
- name=rawCur.getString(1);
- list.add(new Person(id,age,name));
- }
- db.close();
- return list;
- }
- db.close();
- }
- return null;
- }
- public Person queryItem(int id){
- SQLiteDatabase db=mOpenHelper.getReadableDatabase();
- if(db.isOpen()){
- Cursor cur=db.rawQuery("select _id,age,name from Person where _id=?;", new String[]{String.valueOf(id)});
- //判断游标在移动到下一个位置时是否有值
- if(cur!=null&&cur.moveToFirst()){
- int _id=cur.getInt(0);
- int age=cur.getInt(1);
- String name=cur.getString(2);
- db.close();
- return new Person(_id,age,name);
- }
- db.close();
- }
- return null;
- }
- }
使用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 name
- String 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 name
- String 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();
基础学习总结(四)--SQLite的更多相关文章
- JavaScript 基础 学习 (四)
JavaScript 基础 学习 (四) 解绑事件 dom级 事件解绑 元素.on事件类型 = null 因为赋值的关系,所以给事件赋值为 null 的时候 事件触发的时候,就没有事件处理 ...
- javascript基础学习(四)
javascript之流程控制语句 学习要点: 表达式语句含义 选择语句:if.if...else.switch 循环语句:while.do...while.for.for...in 跳转语句:bre ...
- Java基础学习笔记四 Java基础语法
数组 数组的需求 现在需要统计某公司员工的工资情况,例如计算平均工资.最高工资等.假设该公司有50名员工,用前面所学的知识完成,那么程序首先需要声明50个变量来分别记住每位员工的工资,这样做会显得很麻 ...
- Java基础学习(四)-- 接口、集合框架、Collection、泛型详解
接口 一.接口的基本概念 关键字为:Interface,在JAVA编程语言中是一个抽象类型,是抽象方法的集合.也是使用.java文件编写. 二.接口声明 命名规范:与类名的命名规范相同,通常情况下 ...
- <数据结构基础学习>(四)链表 Part 1
一.链表基础 动态数组.栈.队列底层都是依托静态数组实现的,靠resize来解决固定容量问题. 链表是真正的动态数据结构,是一种最简单的一种动态数据结构. 更深入的理解引用(或者指针). 更深入的理解 ...
- python基础学习(四)if判断语句
if判断语句的基本语法 在python中,if判断的格式如下: if 条件: 条件成立时,执行的语句 ...... 注意:代码的缩进要使用一个tab键或者四个空格(建议使用四个空格,tab和空格最好不 ...
- Python基础学习(四)
菜鸟咀嚼python基础之继续. 一.返回函数 第三章已经简单操作了Python的高阶函数,目前继续练手函数作为返回值的特效:通常,高阶函数除了可以接收函数作为参数外,还可以把函数作为结果值返回. 案 ...
- Java基础学习(四)
流程控制 /* 控制流程语句之---if 判断语句 格式一: 只适用于一种情况下去使用. if(判断条件){ 符合条件执行的代码; } 格式二:适用于两种情况下去使用 if(判断条件){ 符合条件执行 ...
- salesforce 零基础学习(四十八)自定义列表分页之Pagination基类封装 ※※※
我们知道,salesforce中系统标准列表页面提供了相应的分页功能,如果要使用其分页功能,可以访问http://www.cnblogs.com/zero-zyq/p/5343287.html查看相关 ...
- salesforce 零基础学习(四十六)动态美观显示列表中记录的审批状态
项目中,申请者申请某些事项以后,常常需要在申请列表中查看当前申请的记录所在的审批状态,动态美观的显示状态可以使UI更符合客户要求,比如下面这样. 以Goods__c表为例,申请者申请的一些采购以前需要 ...
随机推荐
- 基于ARM-LINUX的温度传感器驱动-DS18B20
转载:http://blog.csdn.net/ayangke/article/details/6883244 作者:冯建,华清远见嵌入式学院讲师. DS18B20数字温度传感器接线方便,封装成后可应 ...
- 1.6.1 什么是 Indexing
这部分描述了建立索引的过程:添加内容到solr索引中,如果有需要,修改内容或者删除它.通过添加内容到索引里边,我们使其内容可以搜索. solr索引能够接收不同来源的数据,xml文件,逗号分隔值的(CV ...
- iOS UINavigationController 详解
developer.apple.com/cn/ 导航条 UINavigationBar继承UIView 导航控制器 UINavigationController (压栈,出栈) ...
- 解决SecureCRT中文显示乱码
操作步骤 以下两步: 远程linux机器.修改环境变量LANG.例如在~/.bash_profile里面添加 export LANG=zh_CN.UTF8 重新登录之后生效. 现在查看一下当前设置: ...
- Oracle基础 动态SQL语句
一.静态SQL和动态SQL的概念. 1.静态SQL 静态SQL是我们常用的使用SQL语句的方式,就是编写PL/SQL时,SQL语句已经编写好了.因为静态SQL是在编写程序时就确定了,我们只能使用SQL ...
- JAVA xml 流方式读取。数据挖掘大文件预处理。
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...
- Umbraco(4)-Outputting the Document Type Properties(翻译文档)
翻译原文地址:http://www.ncloud.hk/%E6%8A%80%E6%9C%AF%E5%88%86%E4%BA%AB/umbraco4outputting-the-document-typ ...
- 转: DH密钥交换和ECDH原理
转自:http://www.tuicool.com/articles/em6zEb DH密钥交换和ECDH原理 时间 2013-06-24 18:50:55 CSDN博客 原文 http://bl ...
- html2canvas 踩坑总结
需求:将html表格导出为图片,表格可以自己编辑数据,并适配各种屏幕大小.上网搜了下,找到了html2canvas,一开始使用的是最新版0.5.0,最终因为需要支持自定义div编辑框自动换行选择了v0 ...
- 【BUG】---ionic tab-demo项目在modal页跳转URL改变页面不刷新,手动刷新后显示空白
问题描述: 项目是基于ionic tab的demo,在modal上访问其他页面,地址栏变化了,但是页面不动没刷新,自己手动刷新呢,还是空白,可是访问的页面时有内容的啊 错误: 我的路由配置 .stat ...