文档章节

SQLite应用实例

ForingY
 ForingY
发布于 2016/07/23 00:03
字数 1859
阅读 14
收藏 1
点赞 0
评论 0

输入图片说明

DatabaseHelper.java

/**
 * 继承SQLiteOpenHelper
 * 
 * [@author](http://my.oschina.net/arthor) Harvey
 * 
 */
public class DatabaseHelper extends SQLiteOpenHelper
{
    /**
     * 数据库名称 /.db可有可无
     */
    public static final String DATABASE_NAME = "test.db";
    
    /**
     * 数据库版本,版本号不能为0
     */
    public static final int DATABASE_VERSION = 1;
    
    /**
     * 构造方法
     * 
     * [@param](http://my.oschina.net/u/2303379) context
     */
    public DatabaseHelper(Context context)
    {
         // CursorFactory设置为null,使用默认值
        this(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    
    /**
     * 必须要有此构造方法
     * 
     * [@param](http://my.oschina.net/u/2303379) context
     *            代表应用的上下文
     * [@param](http://my.oschina.net/u/2303379) name
     *            代表数据库的名称
     * [@param](http://my.oschina.net/u/2303379) factory
     *            代表记录集游标工厂,是专门用来生成记录集游标,记录集游标是对查询结果进行迭代的
     * @param version
     *            代表数据库的版本,如果以后升级软件的时候,需要更改
     */
    public DatabaseHelper(Context context, String name, CursorFactory factory, int version)
    {
         // 必须通过super调用父类当中的构造函数
        super(context, name, factory, version);
    }
    
    /**
     * 在用户第一次使用软件时,会创建数据库,而该方法在数据库初次创建时被调用,此方法中特别适合
     * 生成数据库表的结构,它只会被调用一次,它的唯一一个参数是操作数据库的工具类,这个
     * 工具类提供了对数据的添、删、改、查等方法,用这个类实现对SQL语句的执行
     */
    @Override
    public void onCreate(SQLiteDatabase db)
    {
        db.execSQL("CREATE TABLE person (personid INTEGER PRIMARY KEY AUTOINCREMENT,name VARCHAR(20), age INTEGER)");
    }
    
    /**
     * version版本号发生改变时,此方法会被调用,在这个方法中比较适合实现软件更新时修改数据库表结构的工作
     */
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
    {
         // 数据库更新的语句
        db.execSQL("ALTER TABLE person ADD COLUMN other STRING");
    }
}

Person.java

public class Person
{
    /**
     * id
     */
    private Integer id;
    
    /**
     * name
     */
    private String name;
    
    /**
     * age
     */
    private Integer age;
    
    public Person()
    {
   
    }
    
    public Integer getId()
    {
        return id;
    }
    
    public void setId(Integer id)
    {
        this.id = id;
    }
    
    public String getName()
    {
        return name;
    }
    
    public void setName(String name)
    {
        this.name = name;
    }
    
    public Integer getAge()
    {
        return age;
    }
    
    public void setAge(Integer age)
    {
        this.age = age;
    }
    
    @Override
    public String toString()
    {
        return "id:" + id + "\nage:" + age + "\nname:" + name;
    }
}

SQLiteTestActivity.java(第一种方法)

/**
 * 数据库使用测试
 * 
 * @author admin
 * 
 */
public class SQLiteTestActivity extends Activity implements OnClickListener
{
    
    private Button addBtn, addListBtn, delBtn, updateBtn, queryBtn, countBtn, pagingBtn, otherBtn;
    
    private TextView text;
    
    private DatabaseHelper databaseHelper;
    
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        init();
    }
    
    private void init()
    {
        addBtn = (Button) findViewById(R.id.add);
        addListBtn = (Button) findViewById(R.id.addList);
        delBtn = (Button) findViewById(R.id.delete);
        updateBtn = (Button) findViewById(R.id.update);
        queryBtn = (Button) findViewById(R.id.query);
        countBtn = (Button) findViewById(R.id.count);
        pagingBtn = (Button) findViewById(R.id.paging);
        otherBtn = (Button) findViewById(R.id.other);

        // 设置监听
       addBtn.setOnClickListener(this);
        addListBtn.setOnClickListener(this);
        delBtn.setOnClickListener(this);
        updateBtn.setOnClickListener(this);
        queryBtn.setOnClickListener(this);
        countBtn.setOnClickListener(this);
        pagingBtn.setOnClickListener(this);
        otherBtn.setOnClickListener(this);
        
        text = (TextView) findViewById(R.id.text);
        databaseHelper = new DatabaseHelper(this);
    }
    
    @Override
    public void onClick(View v)
    {
        /**
         * 添加对象
         */
        if (v.equals(addBtn))
        {
            Person person = new Person();
            person.setName("Eric");
            person.setAge(23);
            addData(person);
        }
        
        /**
         * 添加对象集合
         */
        if (v.equals(addListBtn))
        {
            ArrayList<Person> personList = new ArrayList<Person>();
            Person person = new Person();
            person.setName("Tom");
            person.setAge(20);
            personList.add(person);
            
            Person person1 = new Person();
            person1.setName("Jack");
            person1.setAge(21);
            personList.add(person1);
            
            Person person2 = new Person();
            person2.setName("Harvey");
            person2.setAge(22);
            personList.add(person2);
            
            addData(personList);
        }
        
        /**
         * 删除数据
         */
        if (v.equals(delBtn))
        {
            deleteData(1);
        }
        
        /**
         * 更新数据
         */
        if (v.equals(updateBtn))
        {
            Person person = new Person();
            person.setId(2);
            person.setName("Bob");
            person.setAge(35);
            updateData(person);
        }
        
        /**
         * 查询数据
         */
        if (v.equals(queryBtn))
        {
            queryData(3);
        }
        
        /**
         * 数据总数
         */
        if (v.equals(countBtn))
        {
            System.out.println("查询总数=====" + countData());
        }
        
        /**
         * 分页
         */
        if (v.equals(pagingBtn))
        {
            getScrollData(0, 3);
        }
        
        if (v.equals(otherBtn))
        {
            other();
        }
    }
    
    /**
     * 添加对象
     */
    private void addData(Person person)
    {
        SQLiteDatabase db = databaseHelper.getWritableDatabase();// 创建或者打开一个可写数据库
        // 插入数据
        db.execSQL("INSERT INTO person(name, age) VALUES(?,?)", new Object[]
        {
                person.getName(), person.getAge()
        });
        Log.i("SQLiteTestActivity", "name:" + person.getName() + "\nage:" + person.getAge());
    }
    
    /**
     * 添加对象集合
     * 
     * @param personList
     */
    private void addData(ArrayList<Person> personList)
    {
        SQLiteDatabase db = databaseHelper.getWritableDatabase();// 创建或者打开一个可写数据库
        db.beginTransaction(); // 开始事务
        try
        {
            for (Person person : personList)
            {
                db.execSQL("INSERT INTO person(name, age) VALUES(?, ?)", new Object[]
                {
                        person.getName(), person.getAge()
                });
                Log.i("SQLiteTestActivity", "name:" + person.getName() + "\nage:" + person.getAge());
            }
            db.setTransactionSuccessful(); // 设置事务成功完成
        }
        finally
        {
            db.endTransaction(); // 结束事务
        }
    }
    
    /**
     * 删除数据
     * 
     * @param id
     */
    private void deleteData(Integer id)
    {
        SQLiteDatabase db = databaseHelper.getWritableDatabase();// 创建或者打开一个可写数据库
        db.execSQL("delete from person where personid=?", new Object[]
        {
            id
        });
    }
    
    /**
     * 更新数据
     */
    private void updateData(Person person)
    {
        SQLiteDatabase db = databaseHelper.getWritableDatabase();
        db.execSQL("update person set name=?,age=? where personid=?", new Object[]
        {
                person.getName(), person.getAge(), person.getId()
        });
    }
    
    /**
     * 查询数据
     */
    private void queryData(Integer id)
    {
        SQLiteDatabase db = databaseHelper.getReadableDatabase();// 创建或者打开一个查询数据库
        Cursor cursor = db.rawQuery("select * from person where personid=?", new String[]
        {
            String.valueOf(id)
        });
        // 迭代记录集
        if (cursor.moveToNext())
        {
            Person person = new Person();
            person.setId(cursor.getInt(cursor.getColumnIndex("personid")));
            person.setName(cursor.getString(cursor.getColumnIndex("name")));
            person.setAge(cursor.getInt(cursor.getColumnIndex("age")));
            // 将查到的字段,放入person
            System.out.println(person.toString());
            text.setText(person.toString());
        }
        cursor.close();// 游标关闭
    }
    
    /**
     * 获取记录总数
     * 
     * @return
     */
    private long countData()
    {
        SQLiteDatabase db = databaseHelper.getReadableDatabase();
        // 没有占位符参数的话,直接用null
        Cursor cursor = db.rawQuery("select * from person", null);
        int count = cursor.getCount();
        cursor.close();
        return count;
    }
    
    /**
     * 分页
     * 
     * @param offset
     * @param count
     */
    private void getScrollData(int offset, int count)
    {
        ArrayList<Person> persons = new ArrayList<Person>();
        SQLiteDatabase db = databaseHelper.getReadableDatabase();
        // offset开始索引
        // count 记录条数
        Cursor cursor = db.rawQuery("select personid,name,age from person limit ?,?", new String[]
        {
                String.valueOf(offset), String.valueOf(count)
        });
        while (cursor.moveToNext())
        {
            Person person = new Person();
            person.setId(cursor.getInt(cursor.getColumnIndex("personid")));
            person.setName(cursor.getString(cursor.getColumnIndex("name")));
            person.setAge(cursor.getInt(cursor.getColumnIndex("age")));
            persons.add(person);
            Log.i("SQLiteTestActivity", "name:" + person.getName() + "\nage:" + person.getAge());
        }
        System.out.println("大小================" + persons.size());
        cursor.close();
    }
    
    private void other()
    {
        Intent intent = new Intent(SQLiteTestActivity.this, OtherActivity.class);
        startActivity(intent);
    }
}

OtherActivity.java(第二种方法)

public class OtherActivity extends Activity implements OnClickListener
{
    private Button addBtn, addListBtn, delBtn, updateBtn, queryBtn, countBtn, pagingBtn;
    
    private TextView text;
    
    private DatabaseHelper databaseHelper;
    
    private ArrayList<Person> personList;
    
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.other);
        init();
    }
    
    private void init()
    {
        addBtn = (Button) findViewById(R.id.add);
        addListBtn = (Button) findViewById(R.id.addList);
        delBtn = (Button) findViewById(R.id.delete);
        updateBtn = (Button) findViewById(R.id.update);
        queryBtn = (Button) findViewById(R.id.query);
        countBtn = (Button) findViewById(R.id.count);
        pagingBtn = (Button) findViewById(R.id.paging);
        
        // 设置监听
        addBtn.setOnClickListener(this);
        addListBtn.setOnClickListener(this);
        delBtn.setOnClickListener(this);
        updateBtn.setOnClickListener(this);
        queryBtn.setOnClickListener(this);
        countBtn.setOnClickListener(this);
        pagingBtn.setOnClickListener(this);
        
        text = (TextView) findViewById(R.id.text);
        databaseHelper = new DatabaseHelper(this);
    }
    
    @Override
    public void onClick(View v)
    {
        /**
         * 添加对象
         */
        if (v.equals(addBtn))
        {
            Person person = new Person();
            person.setName("Eric");
            person.setAge(3);
            addData(person);
        }
        
        /**
         * 添加对象集合
         */
        if (v.equals(addListBtn))
        {
            personList = new ArrayList<Person>();
            Person person = new Person();
            person.setName("Tom");
            person.setAge(2);
            personList.add(person);
            
            Person person1 = new Person();
            person1.setName("Jack");
            person1.setAge(3);
            personList.add(person1);
            
            Person person2 = new Person();
            person2.setName("Harvey");
            person2.setAge(6);
            personList.add(person2);
            
            addData(personList);
        }
        /**
         * 删除数据
         */
        if (v.equals(delBtn))
        {
            deleteData(1);
        }
        /**
         * 更新数据
         */
        if (v.equals(updateBtn))
        {
            Person person = new Person();
            person.setId(3);
            person.setName("Bob");
            person.setAge(0);
            updateData(person);
        }
        /**
         * 查询数据
         */
        if (v.equals(queryBtn))
        {
            queryData(3);
        }
        
        /**
         * 数据总数
         */
        if (v.equals(countBtn))
        {
            System.out.println("查询个数=====" + countData());
        }
        /**
         * 分页
         */
        if (v.equals(pagingBtn))
        {
            getScrollData(0, 3);
        }
    }
    
    /**
     * 添加数据
     */
    private void addData(Person person)
    {
        SQLiteDatabase db = databaseHelper.getWritableDatabase();// 创建或者打开一个可写数据库
        ContentValues contentValues = new ContentValues();
        contentValues.put("name", person.getName());
        contentValues.put("age", person.getAge());
        db.insert("person", null, contentValues);
    }
    
    /**
     * 添加集合数据
     * 
     * @param personList
     */
    private void addData(ArrayList<Person> personList)
    {
        SQLiteDatabase db = databaseHelper.getWritableDatabase();// 创建或者打开一个可写数据库
        db.beginTransaction(); // 开始事务
        try
        {
            for (Person person : personList)
            {
                ContentValues contentValues = new ContentValues();
                contentValues.put("name", person.getName());
                contentValues.put("age", person.getAge());
                db.insert("person", null, contentValues);
                Log.i("SQLiteTestActivity", "name:" + person.getName() + "\nage:" + person.getAge());
            }
            db.setTransactionSuccessful(); // 设置事务成功完成
        }
        finally
        {
            db.endTransaction(); // 结束事务
        }
    }
    
    /**
     * 删除数据
     * 
     * @param id
     */
    private void deleteData(Integer id)
    {
        SQLiteDatabase db = databaseHelper.getWritableDatabase();// 创建或者打开一个可写数据库
        db.delete("person", "personid=?", new String[]
        {
            String.valueOf(id)
        });
    }
    
    /**
     * 更新数据
     */
    private void updateData(Person person)
    {
        ContentValues contentValues = new ContentValues();
        contentValues.put("name", person.getName());
        contentValues.put("age", person.getAge());
        SQLiteDatabase db = databaseHelper.getWritableDatabase();
        /**
         * 第一个参数表示表名 /第二个参数表示更新的数据/第三个参数表示SQL语句的中条件部分的语句 /第四个参数占位符的值
         */
        db.update("person", contentValues, "personid=?", new String[]
        {
            String.valueOf(person.getId())
        });
    }
    
    /**
     * 查询数据
     */
    private void queryData(Integer id)
    {
        SQLiteDatabase db = databaseHelper.getReadableDatabase();// 创建或者打开一个查询数据库
        /**
         * 第一个参数表示表名 /第二个参数表示查找需要返回的字段/第三个参数表示SQL语句的中条件部分的语句
         * /第四个参数占位符的值/第五个参数表示分组
         * 可设为null/第六个参数表示SQL语句中的having,可设为null/第七个参数表示结果的排序,可设为null
         */
        Cursor cursor = db.query("person", new String[]
        {
                "personid", "name", "age"
        }, "personid=?", new String[]
        {
            String.valueOf(id)
        }, null, null, null);
        // 迭代记录集
        if (cursor.moveToNext())
        {
            Person person = new Person();
            person.setId(cursor.getInt(cursor.getColumnIndex("personid")));
            person.setName(cursor.getString(cursor.getColumnIndex("name")));
            person.setAge(cursor.getInt(cursor.getColumnIndex("age"))); // 将查到的字段,放入person
            System.out.println(person.toString());
            text.setText(person.toString());
        }
        cursor.close();// 游标关闭
    }
    
    /**
     * 获取记录总数
     * 
     * @return
     */
    private long countData()
    {
        SQLiteDatabase db = databaseHelper.getReadableDatabase();
        
        Cursor cursor = db.query("person", new String[]
        {
            "*"
        }, null, null, null, null, null);
        
        int count = cursor.getCount();
        cursor.close();// 游标关闭
        return count;
    }
    
    /**
     * 分页
     * 
     * @param offset
     * @param count
     */
    private void getScrollData(int offset, int count)
    {
        ArrayList<Person> persons = new ArrayList<Person>();
        SQLiteDatabase db = databaseHelper.getReadableDatabase();
        Cursor cursor = db.query("person", new String[]
        {
                "personid", "name", "age"
        }, null, null, null, null, null, offset + "," + count);
        while (cursor.moveToNext())
        {
            Person person = new Person();
            person.setId(cursor.getInt(cursor.getColumnIndex("personid")));
            person.setName(cursor.getString(cursor.getColumnIndex("name")));
            person.setAge(cursor.getInt(cursor.getColumnIndex("age")));
            persons.add(person);
            Log.i("OtherActivity", "name:" + person.getName() + "\nage:" + person.getAge());
        }
        System.out.println("大小================" + persons.size());
        cursor.close();
    }
}

本文转载自:

共有 人打赏支持
ForingY
粉丝 23
博文 272
码字总数 156129
作品 0
杭州
程序员
不会点SQLite,都不好意思说自己是开发的

一、为什么要会点SQLite? SQLite作为一款轻量级的关系型数据库,占用的资源特别少,所以其应用场景也是特别的多。在移动开发中,我们经常会有将数据存储在本地的需求,此时SQLite将是我们最...

silencezwm
07/03
0
0
【防衰老教程】-windows环境下安装SQLite

什么是 SQLite? SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。...

Weijue
05/09
0
0
2010年SQLite学习笔记之二(2)

创建数据库文件: >SQLite3 d:/test.db 回车 就生成了一个test.db在d盘。 这样同时也SQLite3挂上了这个test.db 2) 用.help可以看看有什么命令 >.help 回车即可 3)可以在这里直接输入SQL语句创...

jpch
2013/12/11
0
0
Android:SharedPreferences解析和实现记住用户名

SharedPreferences SharedPreferences是Android平台上一个轻量级的存储类,主要是保存一些常用的配置比如窗口状态,它提供了Android平台常规的Long长整形、Int整形、String字符串型的保存。S...

岑浩源
2012/11/28
0
0
【原创】如何在 libgda 和 SQLite 之间作出选择

How to choose between Libgda and SQLite 如何在 libgda 和 SQLite 之间作出选择 (本文为官方文档翻译,以中英对照形式呈现) Libgda has been added as a new external dependency for G...

摩云飞
2013/03/20
0
0
Android 小项目之--SQLite 使用法门

每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的、与操作系统无关的SQL数据库 --大名鼎鼎的SQLite。SQLite是一款轻量级数据库,它的设计目的是嵌入式,而且它占用的资...

mayi
2011/11/14
0
2
手机开发-如何查看android数据文件和数据库

在Android中可以使用Eclipse插件DDMS来查看,也可以使用Android工具包中的adb工具来查看。android项目中的sqlite数据库位于/data/data/项目包/databases中。 工具/原料 doc命令adb工具,ecl...

娶到笨笨
2014/03/14
0
0
安卓应用安全指南 4.5.3 使用 SQLite 高级话题

安卓应用安全指南 4.5.3 使用 SQLite 高级话题 原书:Android Application Secure Design/Secure Coding Guidebook 译者:飞龙 协议:CC BY-NC-SA 4.0 4.5.3.1 在 SQL 语句的断言中使用通配符...

apachecn_飞龙
03/22
0
0
给JFinal添加 Sqlite 数据库支持

Sqlite 的单文件便携性、高性能在开发中方便性无与伦比,即使部署在中小型应用中也胜任有余。 在JFinal中添加对 Sqlite 的支持 Step by Step: 1、点击 http://www.xerial.org/maven/reposi...

子午
2012/07/31
0
4
sqlite3中BLOB数据类型存储大对象运用示例

1:常用接口 个人比较喜欢sqlite, 使用最方便,唯一的准备工作是下载250K的源;而且作者很热心,有问必答。 以下演示一下使用sqlite的步骤,先创建一个数据库,然后查询其中的内容。2个重要结...

涩女郎
2015/08/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

改造工程步骤

背景: 对于存在有问题的项目(包括 代码不规范 数据库表命名不规范 )需要改造 步骤: 1 新建工程 : 将需要改造的项目拷贝一份 修改项目名称 2 将相应的表结构拷贝到新的数据库中 修改不直...

猿神出窍
7分钟前
0
0
node报错{ xxx, xxx}

nodemon 启动语法报错 重新打开项目node代码报错,在node4.4.2下报错,把node版本切换到6就没有问题

x29
10分钟前
0
0
防火墙未来的发展趋势在哪里?

防火墙(Firewall),也称防护墙,是由Check Point创立者Gil Shwed于1993年发明并引入国际互联网。当下互联网时代,无论是大小企业,大部分都会部署有防火墙的设备,但这些防火墙往往并不是都利...

六库科技
11分钟前
0
0
Elasitcsearch High Level Rest Client学习笔记(二) 基础API

1、index API IndexRequest request = new IndexRequest( "posts", //index "doc",  //type 类型,我对类型的理解有点类似于数据库中的表 index类似于数据库中的datab...

木子SMZ
13分钟前
0
0
[DUBBO] Ignore empty notify urls for subscribe url

学习dubbo,按照官方文档编写了 provider consumer 使用的注册中心是Multicast 多播(组播),报了上面的警告,客户端服务端都有类似的警告,并且服务消费者不能发现服务。网上找了各种解决办...

颖辉小居
25分钟前
0
0
unorder_map 随机元素

对于hash的结构来说 思路1:直接随机内部list 即可,但是数据量大的话 iter 要定位起来是个很麻烦的事情 思路2:先随机到一个可用bucket 然后再里面随机一个元素即可

梦想游戏人
31分钟前
0
0
g++编译过程

gcc & g++现在是gnu中最主要和最流行的c & c++编译器 。 g++是将默认语言设为c++,链接时自动使用C++标准库而不用 c标准库 C++标准库:http://www.runoob.com/cplusplus/cpp-standard-librar...

SibylY
32分钟前
0
0
docker更换镜像源

国内下载docker镜像大部分都比较慢,下面给大家介绍2个镜像源。 一、阿里云的docker镜像源 注册一个阿里云用户,访问 https://cr.console.aliyun.com/#/accelerator 获取专属Docker加速器地址...

xiaomin0322
34分钟前
0
0
7.07-获取多少天之前(之后)的日期

public String getDate(Date date,int days){ Calendar calendar=Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DATE,days); ......

静以修身2025
35分钟前
0
0
react native 0.56.0

0.56.0 更新日志 能力有限,如有问题,请包涵(哈哈)原文请点击 欢迎 React Native 2018年6月份正式版的发布,超过53位捐献者提供797次提交,非常感谢你们每一位。 在您阅读本文的此刻,这个...

古乙丁三雨
36分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部