基础学习总结(四)

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 }

使用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 }

使用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();

时间: 2024-10-27 13:23:49

基础学习总结(四)的相关文章

javascript基础学习(四)

javascript之流程控制语句 学习要点: 表达式语句含义 选择语句:if.if...else.switch 循环语句:while.do...while.for.for...in 跳转语句:break.continue 异常处理语句:throw.try...catch...finally 一.表达式语句 表达式语句通常是赋值语句.函数或方法调用语句等. 二.选择语句 if(条件表达式)语句;  if(条件表达式){语句;}else{语句;}   还有就是if...lese的嵌套 switch

python基础学习第四天

4.1 编码解码 4.2 文件操作 自学第8天.标题排列学习第四天 encode 编码 docode 解码 python2 默认 ASCII格式 # -*- coding:utf-8 -*-    # 声明程序是啥编码格式 # 将文本解码unicode格式 sname = name.decode("utf-8") # 必须先声明解码的格式是啥,比如utf-8 print(sname) ssname = sname.encode("gbk") # 将文本编码成gbk格

CSS基础学习十四:盒子模型补充之display属性设置

我在CSS基础学习十三:盒子模型的i博文只是阐释了CSS盒子模型,并没有过多的使用实例来演示.这篇博文 就来做一些盒子模型知识的补充.这一部分对于网页总体布局还是蛮重要的,过去大多数使用HTML中的table元素和 框架标签来进行网页的整体布局,现在我们使用最多的是DIV+CSS网页布局.所以一定要掌握好盒子模型,记住 content,border,padding和margin各自在盒子中的作用和使用方式. 先来看一个完整元素的盒子模型实例: <!DOCTYPE html PUBLIC "

Java基础学习笔记四 Java基础语法

数组 数组的需求 现在需要统计某公司员工的工资情况,例如计算平均工资.最高工资等.假设该公司有50名员工,用前面所学的知识完成,那么程序首先需要声明50个变量来分别记住每位员工的工资,这样做会显得很麻烦. 数组的概述 数组是指一组数据的集合,数组中的每个数据被称作元素.在数组中可以存放任意类型的元素,但同一个数组里存放的元素类型必须一致. 数组的定义 格式: 数据类型[] 数组名 = new 数据类型[元素个数或数组长度]; 举例:int[] x = new int[100]; 要点说明 数据类

python基础学习(四)没有写完明天。。。。。

python3.5使用 第四天: 上次学了比较深入的输入输出写法,这次我们学习的是流程判断if else我们用上次的练习交互程序来学习它们(顺便再练习一遍) 1 username=input("username:") 2 password=input("password:") 3 print(username,password) 我们登录的时候,需要用户名和密码,那么我们的程序是不是就要判断输入的用户名和密码正不正确. 这个时候就用到了if(如果) 我们要知道用户名

salesforce 零基础学习(四十四)实现checkbox列表简单过滤功能

现在做的项目代码是原来其他公司做的,要在原来基础上业务进行适当调整加上一些CR,其中有一个需要调整的需求如下: 原来使用apex:selectCheckboxes封装了一个checkbox列表,因为数据太多导致显示起来比较丑,用户希望改进一下UI. apex:selectCheckboxes作用原理为解析成html以后变成table标签, 大概层级结构可以分成<table><tbody><tr><td><input type="checkbo

Java基础学习(四)——多线程

一.进程与线程 进程:一个计算机程序的运行实例,包含了需要执行的指令:有自己的独立地址空间,包含程序内容和数据:不同进程的地址空间是互相隔离的:进程拥有各种资源和状态信息,包括打开的文件.子进程和信号处理.一个进程可以包含1-n个线程. 线程:表示程序的执行流程,是CPU调度执行的基本单位:线程有自己的程序计数器.寄存器.堆栈和帧.同一进程中的线程共用相同的地址空间,同时共享进进程锁拥有的内存和其他资源. 二.多线程带来的好处与坏处 好处 资源利用率更好 程序设计在某些情况下更简单 程序响应更快

salesforce 零基础学习(四十一)Group

salesforce中,有的时候我们需要将一组用户放进一个Group,用来实现以下主要功能: 1.通过sharing rule设置默认的共享访问; 2.将记录分享给其他用户; 3.指定同步的联系人,这些联系人的onwer属于其他user; 4.分配Group中用户到指定的动作,比如审批流程等. Group作为系统表,其字段信息如下所示: 其中Type作为PickList字段,他的取值可以通过Schema方式取出. public with sharing class GroupPickList {

Java基础学习(四) java8线程

线程和进程:操作系统执行多任务,每个任务就是进程:进程执行多任务,每个任务就是线程:包含关系 . 一.多线程创建和启动: 1.继承Thread:重写run()方法,调用start()启动线程. public class ThreadDemo extends Thread{ @Override public void run() { //具体方法 } } 2.实现Runnable接口创建线程类,调用start()启动线程. public class RunnableDemo implements

Python基础学习(四)

Python 集合: set 顾明思义,就是个集合,集合的元素是唯一的,无序的.一个{ }里面放一些元素就构成了一个集合,set里面可以是多种数据类型(但不能是列表,集合,字典,可以是元组) 它可以对列表里面的重复元素进行去重 list1 = [1,2,3,23,1,4,2] list1 = set(list1) 集合的关系测试: a = {1,2,3,4,5} b = {1,3,5,7,9} a.symmetric_difference(b) #对称差集 a.difference(b) #差集