今天这篇文章写Sqlite数据库,通过一个小案例来完整讲一下数据库常见的CRUD操作。

先对知识点总结:

SQLite数据库

  • 轻量级关系型数据库

  • 创建数据库需要使用的api:SQLiteOpenHelper

    • 必须定义一个构造方法:

      //arg1:数据库文件的名字
      //arg2:游标工厂,用不到
      //arg3:数据库版本,做版本升级
      public MyOpenHelper(Context context, String name, CursorFactory factory, int version){}
    • 数据库被创建时会调用:onCreate方法

    • 数据库升级时会调用:onUpgrade方法

创建数据库

//创建OpenHelper对象
MyOpenHelper oh = new MyOpenHelper(getContext(), "person.db", null, 1);
//获得数据库对象,如果数据库不存在,先创建数据库,后获得,如果存在,则直接获得,
SQLiteDatabase db = oh.getWritableDatabase();
  • getWritableDatabase():打开可读写的数据库,建议

  • getReadableDatabase():在磁盘空间不足时打开只读数据库,否则打开可读写数据库,不建议

  • 在创建数据库时创建表

    public void onCreate(SQLiteDatabase db) {
       // TODO Auto-generated method stub
       db.execSQL("create table person (_id integer primary key autoincrement, name char(10), phone char(20), money integer(20))");
    }

数据库的增删改查

SQL语句

  • insert into person (name, phone, money) values ('张三', '159874611', 2000);

  • delete from person where name = '李四' and _id = 4;

  • update person set money = 6000 where name = '李四';

  • select name, phone from person where name = '张三';

执行SQL语句实现增删改查

    //插入
   db.execSQL("insert into person (name, phone, money) values (?, ?, ?);", new Object[]{"张三", 15987461, 75000});
   //查找
   Cursor cs = db.rawQuery("select _id, name, money from person where name = ?;", new String[]{"张三"});

使用api实现增删改查

  • 插入

    //以键值对的形式保存要存入数据库的数据
    ContentValues cv = new ContentValues();
    cv.put("name", "刘能");
    cv.put("phone", 1651646);
    cv.put("money", 3500);
    //返回值是改行的主键,如果出错返回-1
    long i = db.insert("person", null, cv);
  • 删除

    //返回值是删除的行数
    int i = db.delete("person", "_id = ? and name = ?", new String[]{"1", "张三"});
  • 修改

    ContentValues cv = new ContentValues();
    cv.put("money", 25000);
    int i = db.update("person", cv, "name = ?", new String[]{"赵四"});
  • 查询

    //arg1:要查询的字段
    //arg2:查询条件
    //arg3:填充查询条件的占位符
    Cursor cs = db.query("person", new String[]{"name", "money"}, "name = ?", new String[]{"张三"}, null, null, null);
    while(cs.moveToNext()){
       //                          获取指定列的索引值
       String name = cs.getString(cs.getColumnIndex("name"));
       String money = cs.getString(cs.getColumnIndex("money"));
       System.out.println(name + ";" + money);
    }

开始写相关的Demo代码:

UserDB:用于创建数据和升级数据库

public class UserDB extends SQLiteOpenHelper {

    public UserDB(Context context, String name, CursorFactory factory,
           int version) {
       super(context, name, factory, version);
   }    @Override
   public void onCreate(SQLiteDatabase db) {
       //创建数据库,创建user表,有三个字段
       db.execSQL("create table user(_id integer primary key autoincrement, " +
                                    "name char(10), " +
                                    "salary char(20)," +
                                    "phone integer(20))");
   }    @Override
   public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
       //升级数据库调用,不做处理
       System.out.println("数据库升级了");
   } }

UserDao:用于CRUD,真正的对数据库的操作:

/**对数据进行CRUD的Dao层*/
public class UserDao {    //要对数据CRUD,必须拿到userDB的实例
   private UserDB userDB;    public UserDao(Context context){
       //创建UserDB实例
       this.userDB = new UserDB(context, "user.db", null, 1);
   }    //增加
   public void insert(){
       SQLiteDatabase database = userDB.getWritableDatabase();
       //使用sql语句插入数据
       database.execSQL("insert into user (name, salary, phone)values(?, ?, ?)", new Object[]{"小志的老婆", "13000", 138438});
       database.execSQL("insert into user (name, salary, phone)values(?, ?, ?)", new Object[]{"小志的儿子", 14000, "13888"});
       database.execSQL("insert into user (name, salary, phone)values(?, ?, ?)", new Object[]{"小志", 14000, "13888"});
       //使用api插入数据
       ContentValues values = new ContentValues();
       //往表中的列中添加数据
       values.put("name", "游天龙");//这里的键值不是随便写入的,要与数据库里面的内容一样。
       values.put("salary", 16000);
       values.put("phone", "15999");//这里的值可以不是字符串也可以,sqlite能把数据以字符串的形式存储进去
       //利用SQLiteDatabase对象,对数据进行添加
       long insert = database.insert("user", null, values);//这里的null就始终写成null就好了
       System.out.println(insert);//返回值是改行的主键,如果出错返回-1
       database.close();//关闭数据库
   }    //修改
   public void updata(){
       SQLiteDatabase database = userDB.getWritableDatabase();
       ContentValues values = new ContentValues();
       values.put("salary", 16000);//更新数据,因此更新的数据要用ContentValues对象传递进去
       //返回值:the number of rows affected
       int i = database.update("user", values, "name = ?", new String[]{"游天龙"});//the number of rows affected
       System.out.println(i);
       database.close();
   }    //删除
   public void delete(){
       SQLiteDatabase database = userDB.getWritableDatabase();
       int i = database.delete("user", "name = ? and _id = ?", new String[]{"游天龙", "3"});
       //the number of rows affected。删除了几行就返回。就是说有几行被影响了。
       System.out.println(i);
       database.close();
   }    //查询
   public List<UserBean> query(){
       List<UserBean> datas = new ArrayList<UserBean>();
       SQLiteDatabase database = userDB.getWritableDatabase();
       Cursor cursor = database.query("user", null, null, null, null, null, null, null);
       while(cursor.moveToNext()){
           UserBean userBean = new UserBean();
           String name = cursor.getString(cursor.getColumnIndex("name"));
           String phone = cursor.getString(cursor.getColumnIndex("phone"));
           String salary = cursor.getString(cursor.getColumnIndex("salary"));
           userBean.setName(name);
           userBean.setPhone(phone);
           userBean.setSalary(salary);
           datas.add(userBean);
       }
       database.close();
       cursor.close();
       return datas;
   }
}

基于面向对象的思想,数据存储到javabean中

public class UserBean {
   private String name;
   private String phone;
   private String salary;    public String getName() {
       return name;
   }    public void setName(String name) {
       this.name = name;
   }    public String getPhone() {
       return phone;
   }    public void setPhone(String phone) {
       this.phone = phone;
   }    public String getSalary() {
       return salary;
   }    public void setSalary(String salary) {
       this.salary = salary;
   }    @Override
   public String toString() {
       return "\n姓名 :" + name + "\n电话 :" + phone + "\n薪水 :" + salary;
   } }

最后在活动中,添加四个按钮分别进行增删改查

public class MainActivity extends Activity {

    private UserDao dao;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       dao = new UserDao(this);
   }
   /**增*/
   public void insertApi(View v){
       dao.insert();
   }
   /**删*/
   public void deleteApi(View v){
       dao.delete();
   }
   /**改*/
   public void updateApi(View v){
       dao.updata();
   }
   /**查*/
   public void selectApi(View v){
       List<UserBean> mDatas = dao.query();        //可以封装在listView等其它界面端显示
       System.out.println(mDatas.toString());
   } }

最后查询后的输出结果:

Android中Sqlite数据库进行增删改查的更多相关文章

  1. android 对sqlite数据库的增删改查等各种操作

    转载:http://blog.csdn.net/vrix/article/details/6717090 package com.sqlite.main; import java.io.File; i ...

  2. Android对Sqlite数据库的增删改查

    SqLite 数据库 Google 为我们提供了sqlite相关的api SqLiteOpenHelper 这是一个抽象的类 如果想要使用的话,需要其他的类去继承他 SqLiteDatabase 类 ...

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

    上一篇文章中介绍了手工拼写sql语句进行数据库的CRUD操作,本文将介绍调用sqlite内置的方法实现CRUD操作,其实质也是通过拼写sql语句. 首先,创建一个新的android项目: 其次,查看代 ...

  4. java程序设计课期中考试——数据库的增删改查和简单的js界面

    首先是设计思路,对于数据库的增删改查,我们借助Ecilipse来进行前端和后端的编写.Ecilipse是可以进行java web项目的操作的. 前端,我们选择用使用jsp,所谓的jsp就是可以嵌入其他 ...

  5. Android下利用SQLite数据库实现增删改查

    1: 首先介绍如何利用adb查看数据库 1: adb shell 2: cd /data/data/包名/databases 3:  sqlite3 数据库 4   接下来就可以进行数据库的sql语法 ...

  6. [Android] SQLite数据库之增删改查基础操作

        在编程中常常会遇到数据库的操作,而Android系统内置了SQLite,它是一款轻型数据库,遵守事务ACID的关系型数据库管理系统,它占用的资源非常低,可以支持Windows/Linux/Un ...

  7. greendao对SQLite数据库的增删改查操作

    利用greendao操作数据库时,都是以对象或者对象的list来进行增删改查的操作,操作的结果都是用一个list来接收的!!! 1.增加一条记录 Stu stu01=new Stu();stu01.s ...

  8. SQLite数据库以及增删改查的案例

    Android使用开源的与操作系统无关的SQL数据库——SQLite 一:在命令行下创建数据库: 1.启动模拟器后,打开命令行,执行adb shell 2.进入所在工程目录 3.执行sqlite3 m ...

  9. django中对数据库的增删改查

    Django的配置文件时settings.py中的 TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplate ...

随机推荐

  1. BOM,Dom 回顾

    加给元素: offsetLeft(距离定位父级的距离)/offsetTop(距离定位父级的距离)/offsetWidth(可视宽度)/offHeight(可视高度) clientLeft(左边框宽度) ...

  2. HMM基础

    一.HMM建模 HMM参数: 二.HMM的3个假设 (一)马尔科夫假设 (二)观测独立性假设 (三)不变性假设 转移矩阵A不随时间变化 三.HMM的3个问题 (一)概率计算/评估---likeliho ...

  3. Scriplet的三种代码

    Jsp中注释分为显示注释和隐式注释, 显示注释 -- 可以通过查看源代码看到 <!-- 第一种注释 -->  隐式注释 --  源代码中看不到 <%--jsp注释---%> & ...

  4. Hibernate | Spring JPA | MySQL 使用过程遇到的一些问题

    1. 使用过程 2. 背景 3. 遇到问题 3.1 不指定Hibernate数据库方言,默认SQL生成方式 3.2 抛出异常Hibernate加入了@Transactional事务不会回滚 3.3 H ...

  5. Maven 项目管理工具基础入门系列(二)

    一.前言 在 Maven 项目管理工具基础知识系列(一) 这篇文章中,我们已经初步了解了 Maven,也知道了使用 Maven 作为项目管理工具的好处,特别是已经知道如何快速通过 Maven 构建 W ...

  6. ABP领域层知识回顾之---仓储

    1. 前言  在上一篇博文中 http://www.cnblogs.com/xiyin/p/6810350.html 我们讲到了ABP领域层的实体,这篇博文继续讲ABP的领域层,这篇博文的主题是ABP ...

  7. BZOJ4894 天赋

    Description 小明有许多潜在的天赋,他希望学习这些天赋来变得更强.正如许多游戏中一样,小明也有n种潜在的天赋,但有 一些天赋必须是要有前置天赋才能够学习得到的.也就是说,有一些天赋必须是要在 ...

  8. PKUWC2018划水记

    PKUWC2018划水记 Day -1 ​ 从福州出发去长沙,原本是预定Day0当天的航班,后来怕来不及提前到了今天. ​ 由于最近长沙下雪,所以听说飞机取消了很多班次,所以早上起来的时候还特地看了一 ...

  9. ●洛谷P2664 树上游戏

    题链: https://www.luogu.org/problemnew/show/P2664题解: 扫描线,线段树维护区间覆盖 https://www.luogu.org/blog/ZJ75211/ ...

  10. ●SPOJ 1811 Longest Common Substring

    题链: http://poj.org/problem?id=2774 题解: 求两个字符串(S,T)的最长公共子串.对 S串建后缀自动机.接下来就用这个自动机去求出能和 S串匹配的 T的每一个前缀的最 ...