概述
Android对Sqlite提供了完全友好的支持,在应用程序内部,都可以通过名称访问任何的数据库。建议通过SQLiteOpenHelpe的子类并通过重写onCreate() 方法进行创建数据表。本文主要讲解Andriod开发中Sqlite的简单应用(增删改查),仅供学习分享使用。
涉及知识点
- SQLiteOpenHelper 管理创建数据库和版本管理的帮助类(抽象类)。
- onCreate 创建数据表的方法
- execSQL 执行一个非Select的语句,没有返回信息。
- SQLiteDatabase 管理Sqlite数据的对象,显示提供一组方法来管理数据库(CRUD)。
- SimpleCursorAdapter 一个简易的适配器,用来将Cursor适配数据到控件上。
- ContentValues 存储一组数据值(key-value)。
示例效果图
如下图所示:
数据库帮助类
代码如下:
1 package com.hex.demosqlite; 2 3 import android.content.Context; 4 import android.database.sqlite.SQLiteDatabase; 5 import android.database.sqlite.SQLiteOpenHelper; 6 7 /** 8 * Created by Administrator on 2019/4/4. 9 */10 public class DatabaseHelper extends SQLiteOpenHelper {11 12 private static final String DB_NAME="persons.db";13 14 private static final int DB_VERSION=1;15 16 public DatabaseHelper(Context context) {17 super(context, DB_NAME, null, DB_VERSION);18 }19 20 /**21 * 创建数据库,指定数据库名称,版本号22 * @param db23 */24 @Override25 public void onCreate(SQLiteDatabase db) {26 String sql="create table person(_id integer primary key autoincrement not null, name char(10),nickname char(10))";27 db.execSQL(sql);28 }29 30 /**31 * 数据库升级32 * @param db33 * @param oldVersion34 * @param newVersion35 */36 @Override37 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {38 if(newVersion>oldVersion){39 onCreate(db);40 }41 }42 }
新增(Insert)
代码如下:
1 /** 2 * 新增 3 * 4 * @param v 5 */ 6 public void add(View v) { 7 /** //一般不使用此种方法,因为execSQL方法没有返回值 8 String sql="insert into person(name,nickname)values('宋江','及时雨')"; 9 db.execSQL(sql);10 */11 ContentValues values = new ContentValues();12 values.put("name", "宋江");13 values.put("nickname", "及时雨");14 //返回值为插入行的行号15 long result = db.insert("person", null, values);16 if (result > 0) {17 Toast.makeText(this, "插入成功", Toast.LENGTH_SHORT).show();18 } else {19 Toast.makeText(this, "插入失败", Toast.LENGTH_SHORT).show();20 }21 }
查询(Query)
代码如下:
1 /** 2 * 查询 3 * 4 * @param v 5 */ 6 public void query(View v) { 7 /* 8 String sql="select * from person where name=?"; 9 Cursor cursor = db.rawQuery(sql,new String[]{"宋江"});10 */11 //columns 如果为空,则表示所有列12 Cursor cursor = db.query("person", null, "name=?", new String[]{"宋江"}, null, null, null);13 while (cursor.moveToNext()) {14 int nameIndex = cursor.getColumnIndex("name");15 int nickIndex = cursor.getColumnIndex("nickname");16 String nameValue = cursor.getString(nameIndex);17 String nickValue = cursor.getString(nickIndex);18 String s = "name=" + nameValue + ",nickname=" + nickValue;19 Toast.makeText(this, s, Toast.LENGTH_SHORT).show();20 }21 adaper.swapCursor(cursor);22 adaper.notifyDataSetChanged();23 }
修改(Update)
代码如下:
1 /** 2 * 更新 3 * 4 * @param v 5 */ 6 public void update(View v) { 7 // String sql="update person set nickname=? where name=?"; 8 9 ContentValues values = new ContentValues();10 values.put("nickname", "及时雨2");11 //更新语句受影响的行数12 int result = db.update("person", values, "name=?", new String[]{"宋江"});13 if (result > 0) {14 Toast.makeText(this, "更新成功", Toast.LENGTH_SHORT).show();15 } else {16 Toast.makeText(this, "更新失败", Toast.LENGTH_SHORT).show();17 }18 }
删除(Delete)
代码如下:
1 /** 2 * 删除 3 * 4 * @param v 5 */ 6 public void delete(View v) { 7 //String sql="delete person where name=?"; 8 9 //受删除语句影响的行数10 int result = db.delete("person", "name=?", new String[]{"宋江"});11 if (result > 0) {12 Toast.makeText(this, "删除成功", Toast.LENGTH_SHORT).show();13 } else {14 Toast.makeText(this, "没有删除成功", Toast.LENGTH_SHORT).show();15 }16 }
备注
千里之行,始于足下!