Android中实现SQLite数据库CRUD操作的两种方式
Android中实现SQLite数据库CRUD操作的两种方式
SQLite是一款轻量级的关系型数据库,具有运行速度、占用资源少的特点。通常只需要几百KB的内存就够了,因此特别适合在移动设备上使用。SQLite不仅支持标准的SQL语法,还遵循数据库的ACID事务。Android为了让我们更方便的管理数据库,专门提供了一个SQLiteOpenHelper帮助类,借助这个类我们很容易对数据库进行创建和升级。
- 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操作的两种方式相关推荐
- android布局密码,Android中EditText显示明文与密码的两种方式
效果图如下所述: 布局 xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="h ...
- core 实例化接口_实例讲解Springboot整合MongoDB进行CRUD操作的两种方式
1 简介 Springboot是最简单的使用Spring的方式,而MongoDB是最流行的NoSQL数据库.两者在分布式.微服务架构中使用率极高,本文将用实例介绍如何在Springboot中整合Mon ...
- Android中界面实现全屏显示的两种方式
在开发android的应用当中,我们会遇到将一些界面设置为全屏显示的格式,有两种实现的方法.其一是在Java代码中实现,其二是在配置文件中实现. 1. 在Java代码中设置 super.onCreat ...
- java制作oracle程序,Java程序操作Oracle两种方式之简单实现
Java程序操作Oracle两种方式之简单实现 1.通过JDBC-ODBC桥连接Oracle数据库 (1)创建odbc源,在控制面板->管理工具->数据源(odbc)中添加DSN,比如取名 ...
- SilkTest 对 Excel 表操作的两种方式
SilkTest 对 Excel 表操作的两种方式 这两种方式都是对 SilkTest 运用的最基础的东西,我写得也比较简单.国内这方面的资料实在太少,对初学者可能有帮助. 方式一 : Data D ...
- oracle 删除原有的数据,oracle数据库删除数据的两种方式
当表中的数据不需要是,则应该删除该数据,并释放所占用的空间; 删除表中的数据有delete和truncate两种方式,下面分别介绍: 一.delete语句 (1)有条件删除 语法格式:delete [ ...
- Android之从网络上获取图片的两种方式讲解:thread+handle和AsyncTask方式
从网络上获取图片是一个比较耗时的操作,放在主线程会导致阻塞主线程,响应超时,所以我们不能把它放在主线程里操作,必须放在一个子线程里,我打算采用两种方式去实现.1.采用thread去获取图片,获取到后通 ...
- android recocery模式,小米进入Recovery模式的两种方式
刷机分为卡刷和线刷,卡刷的话必须得进入recovery模式,其中需要运用到某些按键的组合,刷机帮小编特意整理了小米进入recovery模式的方法,各位可以参考下: 小米如何进入Recovery的两种方 ...
- linux耳机插拔检测,Android应用开发之耳机插拔处理两种方式
本文将带你了解Android应用开发[RK3288][Android6.0] 耳机插拔处理两种方式,希望本文对大家学Android有所帮助. [RK3288][Android6.0] 耳机插拔处理 ...
最新文章
- Razor语法(一)
- 高并发编程-02-创建多线程的7种方式
- 麦咭早教机器人_【今日吐槽】这句台词有毒!完全忘不了!(机器人免费送)...
- BOOST内存管理(二) --- boost::pool
- CentOS 6.3系统安装配置KVM虚拟机
- [蓝桥杯][算法训练VIP]方格取数(双线程dp)
- 2600: [Ioi2011]ricehubh
- 【EWSA无线路由密码破解工具 中文特别版下载】含教程及字典(弱口令生日特殊符号等)
- python群发邮件1000人-python读取excel群发邮件(一)
- 力扣231.2的幂 C语言
- 第一次注册苹果开发者账号
- 介绍一些有趣的MySQL pager命令
- 如何设置word 中endnote的引用格式:作者(年份)
- 【电脑问题解决】回收站右键,多出来个“找回清空的文件”选项,怎么删除这个选项?
- 语音助手——问答型助手架构和设计
- 江苏华西村海洋工程服务有限公司-船讯网
- 计算机网络课设路由器,计算机网络课程设计---小型校园网络设计.doc
- 大数模板——来自jxy师兄
- apt-get update 出错 Could not connect to archive.ubuntukylin.com:10006 (120.240.95.35), connection tim
- 如何向centos服务器传文件,【实用】如何快速实现Windows和CentOS文件互传