sqlite数据库学习

1.0版代码:

package com.swust.sqlitedatabase.test;

import com.swust.sqlitedatabase.myOpenHelper;

import android.database.sqlite.SQLiteDatabase;
import android.test.AndroidTestCase;

public class TestCase extends AndroidTestCase {
    public void test(){
        //第一个参数:this->现在应用没启动,没有,真正的时候用this。所以获取虚拟上下文getContext()
        //第二个参数:数据库文件
        //第四个参数:版本号
        //recNO字段是系统的,无视
        myOpenHelper moh = new myOpenHelper(getContext(), "people.db", null, 1);
        //如果数据库不存在,先创建数据库,再获取可读可写数据库对象,如果数据存在,就直接打开
        SQLiteDatabase db=moh.getWritableDatabase();
        //创建对象也可读可写,如果存储空间满了,那么返回只读数据库对象
        //SQLiteDatabase db=moh.getReadableDatabase();
    }
    public void insert(){
        myOpenHelper moh = new myOpenHelper(getContext(), "people.db", null, 1);
        SQLiteDatabase db=moh.getWritableDatabase();
        //数据库char ,double等都是字符串,因为这个轻量级数据不检测数据
        db.execSQL("insert into person(name,salary,phone)values(?,?,?)",new Object[]{"王**","25.34",12.345});
        db.execSQL("insert into person(name,salary,phone)values(?,?,?)",new Object[]{"王**大学",25.34,"12.345"});
        db.execSQL("insert into person(name,salary,phone)values(?,?,?)",new Object[]{"王**","25.34",12.345});
        db.execSQL("insert into person(name,salary,phone)values(?,?,?)",new Object[]{"王**大学",25.34,"12.345"});
        db.close();
    }
}

插入后:

删除:

public void delete(){
        myOpenHelper moh = new myOpenHelper(getContext(), "people.db", null, 1);
        SQLiteDatabase db=moh.getWritableDatabase();
        db.execSQL("delete from person where name =?",new Object[]{"王**"});
    }

之后,字段名字为“王**”的被删除

效果:

-------------------------------------

代码未优化:

package com.swust.sqlitedatabase.test;

import com.swust.sqlitedatabase.myOpenHelper;

import android.database.sqlite.SQLiteDatabase;
import android.test.AndroidTestCase;

public class TestCase extends AndroidTestCase {
    public void test(){
        //第一个参数:this->现在应用没启动,没有,真正的时候用this。所以获取虚拟上下文getContext()
        //第二个参数:数据库文件
        //第四个参数:版本号
        //recNO字段是系统的,无视
        myOpenHelper moh = new myOpenHelper(getContext(), "people.db", null, 1);
        //如果数据库不存在,先创建数据库,再获取可读可写数据库对象,如果数据存在,就直接打开
        SQLiteDatabase db=moh.getWritableDatabase();
        //创建对象也可读可写,如果存储空间满了,那么返回只读数据库对象
        //SQLiteDatabase db=moh.getReadableDatabase();
    }
    public void insert(){
        myOpenHelper moh = new myOpenHelper(getContext(), "people.db", null, 1);
        SQLiteDatabase db=moh.getWritableDatabase();
        //数据库char ,double等都是字符串,因为这个轻量级数据不检测数据
        db.execSQL("insert into person(name,salary,phone)values(?,?,?)",new Object[]{"王**","25.34",12.345});
        db.execSQL("insert into person(name,salary,phone)values(?,?,?)",new Object[]{"王**大学",25.34,"12.345"});
        db.execSQL("insert into person(name,salary,phone)values(?,?,?)",new Object[]{"王**","25.34",12.345});
        db.execSQL("insert into person(name,salary,phone)values(?,?,?)",new Object[]{"王树青大学",25.34,"12.345"});
        db.close();
    }
    public void delete(){
        myOpenHelper moh = new myOpenHelper(getContext(), "people.db", null, 1);
        SQLiteDatabase db=moh.getWritableDatabase();
        db.execSQL("delete from person where name =?",new Object[]{"王**"});
    }
}

优化后:

package com.itheima.sqlitedatabase.test;

import com.itheima.sqlitedatabase.MyOpenHelper;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.test.AndroidTestCase;

public class TestCase extends AndroidTestCase {

    //此时测试框架还没有初始化完毕,没有虚拟上下文对象
//    private MyOpenHelper oh = new MyOpenHelper(getContext(), "people.db", null, 1);
    private MyOpenHelper oh;
    private SQLiteDatabase db;
    public void test(){
        //getContext():获取一个虚拟的上下文
        MyOpenHelper oh = new MyOpenHelper(getContext(), "people.db", null, 1);
        //如果数据库不存在,先创建数据库,再获取可读可写的数据库对象,如果数据库存在,就直接打开
        SQLiteDatabase db = oh.getWritableDatabase();
        //如果存储空间满了,那么返回只读数据库对象
//        SQLiteDatabase db = oh.getReadableDatabase();
    }

    //测试框架初始化完毕之后,在测试方法执行之前,此方法调用
    @Override
    protected void setUp() throws Exception {
        super.setUp();

        oh = new MyOpenHelper(getContext(), "people.db", null, 1);
        db = oh.getWritableDatabase();
    }

    //测试方法执行完毕之后,此方法调用
    @Override
    protected void tearDown() throws Exception {
        // TODO Auto-generated method stub
        super.tearDown();
        db.close();
    }

    public void insert(){

//        db.execSQL("insert into person (name, salary, phone)values(?, ?, ?)", new Object[]{"小志的老婆[1]", "13000", 138438});
//        db.execSQL("insert into person (name, salary, phone)values(?, ?, ?)", new Object[]{"小志的儿子", 14000, "13888"});
        db.execSQL("insert into person (name, salary, phone)values(?, ?, ?)", new Object[]{"小志", 14000, "13888"});
    }

    public void delete(){
        db.execSQL("delete from person where name = ?", new Object[]{"小志"});
    }

    public void update(){
        db.execSQL("update person set phone = ? where name = ?", new Object[]{186666, "小志的儿子"});
    }

    public void select(){
        Cursor cursor = db.rawQuery("select name, salary from person", null);

        while(cursor.moveToNext()){
            //通过列索引获取列的值
            String name = cursor.getString(cursor.getColumnIndex("name"));
            String salary = cursor.getString(1);
            System.out.println(name + ";" + salary);
        }
    }

    public void insertApi(){
        //把要插入的数据全部封装至ContentValues对象
        ContentValues values = new ContentValues();
        values.put("name", "游天龙");
        values.put("phone", "15999");
        values.put("salary", 16000);
        db.insert("person", null, values);
    }

    public void deleteApi(){
        int i = db.delete("person", "name = ? and _id = ?", new String[]{"小志的儿子", "3"});
        System.out.println(i);
    }

    public void updateApi(){
        ContentValues values = new ContentValues();
        values.put("salary", 26000);
        int i = db.update("person", values, "name = ?", new String[]{"游天龙"});
        System.out.println(i);
    }

    public void selectApi(){
        Cursor cursor = db.query("person", null, null, null, null, null, null, null);
        while(cursor.moveToNext()){
            String name = cursor.getString(cursor.getColumnIndex("name"));
            String phone = cursor.getString(cursor.getColumnIndex("phone"));
            String salary = cursor.getString(cursor.getColumnIndex("salary"));
            System.out.println(name + ";" + phone + ";" + salary);
        }
    }

    public void transaction(){
        try{
            //开启事务
            db.beginTransaction();
            ContentValues values = new ContentValues();
            values.put("salary", 12000);
            db.update("person", values, "name = ?", new String[]{"小志"});

            values.clear();
            values.put("salary", 16000);
            db.update("person", values, "name = ?", new String[]{"小志的儿子"});

            int i = 3/0;
            //设置  事务执行成功
            db.setTransactionSuccessful();
        }
        finally{
            //关闭事务,同时提交,如果已经设置事务执行成功,那么sql语句就生效了,反之,sql语句回滚
            db.endTransaction();
        }
    }
}
时间: 2024-12-23 19:59:17

sqlite数据库学习的相关文章

Android数据存储之SQLite 数据库学习

Android提供了五种存取数据的方式 (1)SharedPreference,存放较少的五种类型的数据,只能在同一个包内使用,生成XML的格式存放在设备中 (2) SQLite数据库,存放各种数据,是一个轻量级的嵌入式数据库 (3) File文件,通过读取写入方式生成文件存放数据 (4) ContentProvider,主要用于让其他应用程序使用保存的数据 (5)通过网络获取数据和写入数据到网络存储空间 SQLite 数据库介绍 SQLite 是一款轻量级的关系型数据库,它的运算速度非常快,占

SQLite数据库学习小结(2)

3. SQLite的Frameworks层实现 3.1 Frameworks层架构 Android系统方便应用使用,在Frameworks层中封装了一套Content框架,之所以叫Content框架而不叫数据库框架之类的,是因为这里Content不一定是来自数据库的内容,也可以是来自其他数据源的内容,开发人员只需要知道如何使用ContentResovler和ContentProvider就可以在应用进程之间共享数据了. 这里我们只讨论数据源是数据库的ContentProvider,开发人员需要实

SQLite数据库学习小结(1)

1. SQlite概述 SQLite是一款轻量.快速.跨平台的嵌入式数据库,是遵守ACID(注:ACID指数据库事务正确执行的四个基本要素的缩写.包含:原子性(Atomicity).一致性(Consistency).隔离性(Isolation).持久性(Durability))的关系型数据库管理系统,它包含在一个相对小的C库中. SQLite 的设计目标是简单,从这种意义上说,SQLite 和其他很多现代的 SQL 数据库都不相同.SQLite 力求简单,即使这导致了它的某些特征偶尔执行效率比较

android简单登陆和注册功能实现+SQLite数据库学习

最近初学android,做了实验室老师给的基本任务,就是简单的登陆和注册,并能通过SQLite实现登陆,SQlLite是嵌入在安卓设备中的 好了下面是主要代码: 数据库的建立: 这里我只是建立了一个用简单的存储用户名和密码的表单 MyDBHelper.java public class MyDBHelper extends SQLiteOpenHelper { public static final String CREATE_USERDATA="create table userData(&q

android学习十一(android的SQLite数据库的使用)

SQLite是一款轻量级的关系型数据库,它运算速度快,占用资源少,通常只需要几百k的内存就够了,支持标准的sql语法和数据库的ACID事务.在android中为了能够更加方便的管理数据库,专门提供了一个SQLiteOpenHelper帮助类,借助这个类就可以非常简单的对数据库进行创建和升级. SQLiteOpenHelper是一个抽象类,如果我们要使用的话,就需要创建一个自己的类去继承它.SQLiteOpenHelper中有2个抽象方法,分别是onCreate和onUpgrade方法,我们必须在

Android学习---SQLite数据库的增删改查和事务(transaction)调用

上一篇文章中介绍了手工拼写sql语句进行数据库的CRUD操作,本文将介绍调用sqlite内置的方法实现CRUD操作,其实质也是通过拼写sql语句. 首先,创建一个新的android项目: 其次,查看代码实现增删查改: 1.创建DB工具类 MyDBHelper.java(创建数据库的操作) package com.amos.android_db; import android.content.Context; import android.database.sqlite.SQLiteDatabas

Android学习笔记--Sqlite数据库

前几天学习了Android中的数据存储,包括文件存储,SharedPreferences存储,还有就是Acndroid中的特色:SQLite数据库存储了.让我比较惊讶的是Android中竟然内嵌了一个轻量型的数据库SQLite数据库,使得本地的数据持久化有了一个质的飞跃. 通过前两天上课听老师讲解,和课下自己看书总结,想在博客上把自己对于SQLite数据库的理解做一下总结,也是方便之后的复习.Android为了让我们能够更加方便的管理数据库,专门提供了SQLiteOpenHelper帮助类,这个

Android 学习笔记之如何使用SQLite数据库来保存数据...

PS:最近一阵子都在为考试复习...坑爹的计算机网络,复习了3天,最后该不会的还是不会...明天还考英语...真蛋疼... 学习内容: 1.使用SQLite数据库来保存数据... SQLite:   SQLite一个轻量级的数据库,数据库这东西就是为了保存大量数据而存在的一个工具,SQLite支持SQL语言,其实和Mysql差不多,语句基本都是一样的,增删改查也非常的方便...SQLite独立性非常的好,使用SQLite不需要安装...不依赖与任何的引擎就可以独立的去执行...感觉这一点还是非常

IOS开发-UI学习-sqlite数据库的操作

IOS开发-UI学习-sqlite数据库的操作 sqlite是一个轻量级的数据库,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了,而且它的处理速度比Mysql.PostgreSQL这两款著名的数据库都还快,在ios和安卓app中常用来完成对数据进行离线缓存的处理,如新闻数据的离线缓存. 它的基本操作步骤是: 1.先加入sqlite开发库libsqlite3.dylib, 2.新建或打开数据库, 3.创建数据表, 4.插入数据, 5.查询数据并打印, 6.关闭数据库, 具体操作步