概述
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 db 23 */ 24 @Override 25 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 db 33 * @param oldVersion 34 * @param newVersion 35 */ 36 @Override 37 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 }
备注
千里之行,始于足下!