Android中实现SQLite数据库CRUD操作的两种方式
2017-05-10 01:46
519 查看
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 的user String 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); } //释放cursor cursor.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的user database.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改为68 ContentValues 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的user String 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中API建议的方式实现SQLite数据库的增、删、改、查的操作
- android(13)(sqlite的CRUD使用SQL和API两种方式实现以及Linearlayout的列表展示)
- Android在API推荐的方式来实现SQLite数据库的增长、删除、变化、检查操作
- Android中API建议的方式实现SQLite数据库的增、删、改、查的操作
- Android:View Animition 两种实现方式
- Android中界面实现全屏显示的两种方式
- 【Android UI设计与开发】第14期:顶部标题栏(五)两种方式实现仿微信标题栏弹窗效果
- 【Android UI设计与开发】第14期:顶部标题栏(五)两种方式实现仿微信标题栏弹窗效果
- Android 两种异步操作方式
- android 使用 SQLiteOpenHelper 实现对SQLite数据库操作
- 怎样在Android开发中FPS游戏实现的两种方式比较
- Android开发(10)使用SQLiteDatabase操作SQLite数据库实现增删改查(源码)
- android 定时请求(两种实现方式)
- android两种方式实现发送短信的功能代码
- Android开发(10)使用SQLiteDatabase操作SQLite数据库实现增删改查(源码)
- Android放大镜实现的两种方式
- Android数据库CRUD操作的封装与实现
- android中动画实现的两种方式
- Android开发教程:底部Tab的两种实现方式
- 图片设置[置顶] Android之Gallery和GridView两种方式与ImageSwitcher实现带预览的和幻灯片方式的两种图片浏览器