Android中实现SQLite数据库CRUD操作的两种方式

SQLite是一款轻量级的关系型数据库,具有运行速度、占用资源少的特点。通常只需要几百KB的内存就够了,因此特别适合在移动设备上使用。SQLite不仅支持标准的SQL语法,还遵循数据库的ACID事务。Android为了让我们更方便的管理数据库,专门提供了一个SQLiteOpenHelper帮助类,借助这个类我们很容易对数据库进行创建和升级。

  1. SQLiteOpenHelper中getReadableDatabase()和getWritableDatabase()的区别:
    相同点:这两个方法都可以创建或打开一个现有的数据库,如果数据库已经存在则直接打开,否则创建一个新的数据库,并返回一个可以对数据库进行读写的对象。

    不同点:当磁盘已满不可写入时,getReadableDatabase()方法返回的对象将以只读的方式去打开数据库,而getWritableDatabase()方法则会抛出异常。

Android中实现SQLite数据库CRUD操作的方式有两种:

1:直接用SQL语句进行操作

2:调用Android提供的系统函数

本文为了更好的说明对数据库的增删改查操作,做了两个前提条件:

1: 定义了一个User.java类

package com.example.sqlite;
import android.R.integer;
public class User {
private String name;
private String phone;
private int age;
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 int getAge() {return age;
}
public void setAge(int age) {this.age = age;
}
@Override
public String toString() {return "name=" + name + ", phone=" + phone + ", age=" + age + "+\n\n";}
}

2:定义一个MySQLiteOpenHelper 并继承SQLiteOpenHelper

    package com.example.sqlite;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteDatabase.CursorFactory;import android.database.sqlite.SQLiteOpenHelper;import android.util.Log;
public class MySQLiteOpenHelper extends SQLiteOpenHelper{
/*** @param context: 上下文 * @param name:数据库的名称* @param factory: null代表使用系统默认的游标* @param version:数据库文件的版本号,必须大于等于1*/
public MySQLiteOpenHelper(Context context, String name, CursorFactory factory, int version) {super(context, name, factory, version);
}
/*** 用于创建表的结构* 第一次使用MySQLiteOpenHelper类时,如果表结构没有被创建就执行一次,创建表的结构,如果表的结构创建了就不执行*/
@Override
public void onCreate(SQLiteDatabase db) {Log.d("tag", "oncrate");String sql = "create table t_user (_id integer primary key,name varchar(20), phone varchar(20) ,age integer)";db.execSQL(sql );
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}

1. 直接用SQL语句进行操作

1.1 直接用SQL语句插入数据
public void insertOne(View view){//得到一个MySQLiteOpenHelper对象MySQLiteOpenHelper sqLiteOpenHelper = new MySQLiteOpenHelper(this, DB_NAME, null, VERSION);//拿到SQLiteDateBase对象SQLiteDatabase dataBase = sqLiteOpenHelper.getReadableDatabase();//向表中插入数据String sql= "insert into t_user (name,phone,age) values (?,?,?)";dataBase.execSQL(sql, new Object[]{"zhangsan"+new Random().nextInt(100),(5000+new Random().nextInt(100)+""),new Random().nextInt(100)});//关闭资源dataBase.close();Toast.makeText(this, "方法1插入数据成功!", Toast.LENGTH_SHORT).show();
}
1.2 直接用SQL语句删除数据
public void deleteOne(View view){//得到一个MySQLiteOpenHelper对象MySQLiteOpenHelper sqLiteOpenHelper = new MySQLiteOpenHelper(this, DB_NAME, null, VERSION);SQLiteDatabase database = sqLiteOpenHelper.getWritableDatabase();//删除age < 30 的userString sql = "delete from t_user where age < ?";database.execSQL(sql , new Object []{30});//关闭资源database.close();Toast.makeText(this, "方法1删除数据成功!", Toast.LENGTH_SHORT).show();
}
1.3 直接用SQL语句修改数据
public void updateOne(View view){MySQLiteOpenHelper sqLiteOpenHelper = new MySQLiteOpenHelper(this, DB_NAME, null, VERSION);//得到SQLiteDataBase对象SQLiteDatabase database = sqLiteOpenHelper.getReadableDatabase();//更新 name = zhangsan45时,age修改为58;String sql = "update t_user set age = ? where name = ?";database.execSQL(sql , new Object[]{58,"zhangsan45"});//关闭资源database.close();Toast.makeText(this, "方法1更新数据成功!", Toast.LENGTH_SHORT).show();
}
1.4 直接用SQL语句查询数据
public void queryOne(View view){ArrayList<User> userList = new ArrayList<User>();MySQLiteOpenHelper sqLiteOpenHelper = new MySQLiteOpenHelper(this, DB_NAME, null, VERSION);//得到SQLiteDataBase对象SQLiteDatabase database = sqLiteOpenHelper.getReadableDatabase();//查询年龄大于50,且desc排序String sql = "select name ,phone,age from t_user where age > ? order by age desc";Cursor cursor = database.rawQuery(sql, new String[]{50+""});while(cursor.moveToNext()){User user = new User();user.setName(cursor.getString(0));user.setPhone(cursor.getString(1));user.setAge(cursor.getInt(2));userList.add(user);}//释放cursorcursor.close();//关闭资源database.close();//在一个TextView中显示查询到的数据tv_data.setText(userList.toString());Toast.makeText(this, "方法1查询数据成功!", Toast.LENGTH_SHORT).show();
}

2. 调用Android提供的系统函数

2.1 调用Android提供的系统函数插入数据
public void insertTwo(View view){MySQLiteOpenHelper sqLiteOpenHelper = new MySQLiteOpenHelper(this, DB_NAME, null, VERSION);SQLiteDatabase database = sqLiteOpenHelper.getReadableDatabase();ContentValues values = new ContentValues();values.put("name", "lisi"+new Random().nextInt(100));values.put("phone", "8000"+ new Random().nextInt(100));values.put("age", new Random().nextInt(100));long insertNum = database.insert("t_user", null, values );Toast.makeText(this, "成功插入第"+insertNum+"条数据!", Toast.LENGTH_SHORT).show();//关闭资源database.close();
}
2.2 调用Android提供的系统函数删除数据
public void deleteTwo (View view){MySQLiteOpenHelper sqLiteOpenHelper = new MySQLiteOpenHelper(this, DB_NAME, null, VERSION);SQLiteDatabase database = sqLiteOpenHelper.getReadableDatabase();//删除 age>90的userdatabase.delete("t_user", "age > ?", new String []{"90"});Toast.makeText(this, "方法2删除数据成功!", Toast.LENGTH_SHORT).show();//关闭资源database.close();
}
2.3 调用Android提供的系统函数修改数据
public void updateTwo(View view){MySQLiteOpenHelper sqLiteOpenHelper = new MySQLiteOpenHelper(this, DB_NAME, null, VERSION);SQLiteDatabase database = sqLiteOpenHelper.getReadableDatabase();//将name = zhangsan96 的age改为68ContentValues values = new ContentValues();values.put("age", "68");int update = database.update("t_user", values , "name = ?", new String[]{"zhangsan96"});Toast.makeText(this, "方法2更新数据成功!", Toast.LENGTH_SHORT).show();//关闭资源database.close();
}
2.4 调用Android提供的系统函数查询数据
public void queryTwo(View view){MySQLiteOpenHelper sqLiteOpenHelper = new MySQLiteOpenHelper(this, DB_NAME, null, VERSION);SQLiteDatabase database = sqLiteOpenHelper.getReadableDatabase();//查询年龄大于60的userString sql = "select name ,phone,age from t_user where age > ?";Cursor cursor = database.rawQuery(sql , new String[]{"60"});ArrayList<User> list = new ArrayList<User>();while(cursor.moveToNext()){User user = new User();user.setName(cursor.getString(0));user.setPhone(cursor.getString(1));user.setAge(cursor.getInt(2));list.add(user);}Toast.makeText(this, "方法2查询数据成功!", Toast.LENGTH_SHORT).show();//关闭资源database.close();//显示查询到的数据tv_data.setText(list.toString());}

OK,本文到此结束。让我们共同学习,一起进步。

Android中实现SQLite数据库CRUD操作的两种方式相关推荐

  1. android布局密码,Android中EditText显示明文与密码的两种方式

    效果图如下所述: 布局 xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="h ...

  2. core 实例化接口_实例讲解Springboot整合MongoDB进行CRUD操作的两种方式

    1 简介 Springboot是最简单的使用Spring的方式,而MongoDB是最流行的NoSQL数据库.两者在分布式.微服务架构中使用率极高,本文将用实例介绍如何在Springboot中整合Mon ...

  3. Android中界面实现全屏显示的两种方式

    在开发android的应用当中,我们会遇到将一些界面设置为全屏显示的格式,有两种实现的方法.其一是在Java代码中实现,其二是在配置文件中实现. 1. 在Java代码中设置 super.onCreat ...

  4. java制作oracle程序,Java程序操作Oracle两种方式之简单实现

    Java程序操作Oracle两种方式之简单实现 1.通过JDBC-ODBC桥连接Oracle数据库 (1)创建odbc源,在控制面板->管理工具->数据源(odbc)中添加DSN,比如取名 ...

  5. SilkTest 对 Excel 表操作的两种方式

    SilkTest 对 Excel 表操作的两种方式  这两种方式都是对 SilkTest 运用的最基础的东西,我写得也比较简单.国内这方面的资料实在太少,对初学者可能有帮助. 方式一 : Data D ...

  6. oracle 删除原有的数据,oracle数据库删除数据的两种方式

    当表中的数据不需要是,则应该删除该数据,并释放所占用的空间; 删除表中的数据有delete和truncate两种方式,下面分别介绍: 一.delete语句 (1)有条件删除 语法格式:delete [ ...

  7. Android之从网络上获取图片的两种方式讲解:thread+handle和AsyncTask方式

    从网络上获取图片是一个比较耗时的操作,放在主线程会导致阻塞主线程,响应超时,所以我们不能把它放在主线程里操作,必须放在一个子线程里,我打算采用两种方式去实现.1.采用thread去获取图片,获取到后通 ...

  8. android recocery模式,小米进入Recovery模式的两种方式

    刷机分为卡刷和线刷,卡刷的话必须得进入recovery模式,其中需要运用到某些按键的组合,刷机帮小编特意整理了小米进入recovery模式的方法,各位可以参考下: 小米如何进入Recovery的两种方 ...

  9. linux耳机插拔检测,Android应用开发之耳机插拔处理两种方式

    本文将带你了解Android应用开发[RK3288][Android6.0] 耳机插拔处理两种方式,希望本文对大家学Android有所帮助. [RK3288][Android6.0]   耳机插拔处理 ...

最新文章

  1. Razor语法(一)
  2. 高并发编程-02-创建多线程的7种方式
  3. 麦咭早教机器人_【今日吐槽】这句台词有毒!完全忘不了!(机器人免费送)...
  4. BOOST内存管理(二) --- boost::pool
  5. CentOS 6.3系统安装配置KVM虚拟机
  6. [蓝桥杯][算法训练VIP]方格取数(双线程dp)
  7. 2600: [Ioi2011]ricehubh
  8. 【EWSA无线路由密码破解工具 中文特别版下载】含教程及字典(弱口令生日特殊符号等)
  9. python群发邮件1000人-python读取excel群发邮件(一)
  10. 力扣231.2的幂 C语言
  11. 第一次注册苹果开发者账号
  12. 介绍一些有趣的MySQL pager命令
  13. 如何设置word 中endnote的引用格式:作者(年份)
  14. 【电脑问题解决】回收站右键,多出来个“找回清空的文件”选项,怎么删除这个选项?
  15. 语音助手——问答型助手架构和设计
  16. 江苏华西村海洋工程服务有限公司-船讯网
  17. 计算机网络课设路由器,计算机网络课程设计---小型校园网络设计.doc
  18. 大数模板——来自jxy师兄
  19. apt-get update 出错 Could not connect to archive.ubuntukylin.com:10006 (120.240.95.35), connection tim
  20. 如何向centos服务器传文件,【实用】如何快速实现Windows和CentOS文件互传

热门文章

  1. 搜索推荐炼丹笔记:评论是怎么影响推荐的?
  2. 0215互联网新闻 | TikTok在美月度用户数量过去三个月内增加3000万;5G智能手机测试机首批正式交付...
  3. 网易云推出了一组程序猿の真实写照【文末有彩蛋】
  4. 解决ie7不支持after、before的方法
  5. 2016.8.1今天是建军节
  6. iOS培训章节——C++函数的重载
  7. 查看域名真实IP地址NSlookup命令使用浅析
  8. WinForm窗体缩放动画
  9. SQL Server远程部署
  10. 将SQL Server中所有表的列信息显示出来