android mysql sqlite_Android使用SQLite数据库的示例

本文介绍了Android中SQLite数据库的使用,包括创建数据库、创建数据表以及数据的增删改查操作。通过SQLiteOpenHelper简化数据库操作,并展示了创建英雄管理系统的例子。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一. 简介

SQLite数据库是一个轻量级的DBMS(数据库管理系统)。SQLite使用单个文件存储数据,Android标准库包含SQLite库以及配套使用的一些Java辅助类。主要特点:轻量级,单一文件,跨平台,开源。

二. Android中SQLite数据库的使用

1、创建SQLite数据库

SQLiteDatabase db=

SQLiteDatabase.openOrCreateDatabase(

"/data/data/" + getPackageName() + "/test.db",

null);

执行完这条语句,可以在adb shell下进入/data/data/package-name/下看到刚才创建的数据库文件

7521f54c00ef9857b8d30e6123987ff9.png

在Android中使用SQLiteDatabase的静态方法

openOrCreateDatabase(String path, SQLiteDatabase.CursorFactory factory)打开或者创建一个数据库。

它会自动去检测是否存在这个数据库,如果存在则打开,反之不存在就创建一个数据库;创建成功则返回一个SQLiteDatabase对象,失败抛出FileNotFoundException异常。

除了以上方法,Android还提供了SQLiteOpenHelper这个类来创建数据库,首先继承SQLiteOpenHelper,重写onCreate和onUpgrade方法及构造方法

public class MySqliteHelper extends SQLiteOpenHelper{

public MySqliteHelper(Context context) {

super(context, "mysqlite.db", null, 1);

//传入四个参数

//第一个参数context 上下文对象

//第二个参数mysqlite.db 数据库名称(文件名)

//第三个参数一般为null

//第四个参数数据库版本号,这里写1

}

@Override

public void onCreate(SQLiteDatabase db) {

/* 数据库创建的时候会回调此方法,可以用db对象执行SQL语

* 句,创建所需要的表

*/

}

@Override

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

//当数据库升级时调用此方法

}

}

接着在需要创建数据库的时候调用

SQLiteOpenHelper dbHelper = new MySqliteHelper(this);

SQLiteDatabase db = dbHelper.getWritableDatabase();

使用SQLiteOpenHelper创建的数据库,保存在/data/data/package-name/databases/目录下,通过adb shell可以看到创建的数据库文件

e3cd406d39a33747f91463ef2db3261c.png

2、创建数据库中的数据表

数据库创建完成后,要创建保存数据的表,表是存放在数据库中的。示例代码入下

private void createTable(SQLiteDatabase db){

//SQL语句

String sql =

"create table stutable(_id integer primary key autoincrement,name text,age integer)";

db.execSQL(sql);

}

这里附上SQLite数据类型

NULL: 这个值可为空值

VARCHAR(n):长度不固定且其最大长度为 n 的字串,n不能超过 4000。

CHAR(n):长度固定为n的字串,n不能超过 254。

INTEGER: 值被标识为整数,依据值的大小可以依次被存储为1,2,3,4,5,6,7,8….

REAL: 所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号.

TEXT: 值为文本字符串,使用数据库编码存储(TUTF-8, UTF-16BE or UTF-16-LE).

BLOB: 值是BLOB数据块,以输入的数据格式进行存储。如何输入就如何存储,不改变格式。

DATA :包含了 年份、月份、日期

执行完上述语句,可以通过ADM将数据库文件导出到电脑上

55351eaa405eaa1b6c3283029bebbc2c.png

通过可视化工具打开数据库文件可以看到之前创建的表,以及定义的表字段

07a50d57f4f90fa21aa19d354af01288.png

除了执行定义创建表的方法外,还可以在继承SQLiteOpenHelper类中的onCreate方法来初始化表结构,在后面的例子使用继承SQLiteOpenHelper方式创建表。

3、对表进行操作(数据表的增删改查)

增:在表中增加数据,可以使用SQLiteDatabase类中提供的execSQL(String sql)执行一条插入数据的SQL语句来插入数据,不过,AndroidSQLiteDatabase类提供了更为简单的方法来执行插入数据操作

//SQLiteDatabase类中提供的方法

public long insert(

String table,//要操作表名

String nullColumnHack,//空列的默认值

ContentValues values

//ContentValues封装了列名称和列值的Map

);

private void insertToTable(SQLiteDatabase db){

ContentValues cv = new ContentValues();

cv.put("name","wxq");

cv.put("age",11);

db.insert("stutable",null,cv);

}

执行insertTable方法,再次导出数据库可以看到stutable表中增加了一条数据

f4231bce3ded768b5ff4ee17db12201c.png

删:好吧,刚插入一条数据。。。

同样Android提供了delete方法

//SQLiteDatabase类中提供的方法

public int delete(

String table,//表名称

String whereClause,//删除条件

String[] whereArgs); //删除条件值数组

private void deleteToTable(SQLiteDatabase db){

//删除条件,这里以name为条件,也可以是age = ?

String whereClasuse = "name = ?";

//删除条件参数,

String[] whereArgs = new String[]{"wxq"};

//执行删除

db.delete("stutable",whereClasuse,whereArgs);

}

执行上述语句,将会删除stutable表中刚才插入的数据。

改:

//SQLiteDatabase类中提供的方法

public int update(

//表名称

String table,

//和行列ContentValues键值对应的key-value

ContentValues values,

//更新条件

String whereClause,

//更新条件数组

String[] whereArgs

);

private void updateToTable(SQLiteDatabase db){

//实例化ContentValues

ContentValues cv= new ContentValues();

cv.put("age",23);

//更新条件

String whereClause = "name = ?";

//更新条件数组

String[] whereArgs = new String[]{"wxq"};

db.update("stutable",cv,whereClause,whereArgs);

}

执行完更新语句,导出数据库文件,在可视化工具中查看

630dca04f32369515c2c45370bbd8b40.png

查:在Android中查询数据是通过Cursor类来实现的,可以使用SQLiteDatabase.query()方法时,这里使用别一个方法rawQuery

public Cursor rawQuery(

String sql,//查询的SQL语句

String[] selectionArgs//当SQL语句中含有?,这里代表值

);

public void queryToTable(SQLiteDatabase db){

String sql = "select * from stutable";//全查

Cursor c = db.rawQuery(sql,null);//这里会返回一个Cursor(游标)对象

}

0a3c7e78f2b35c250fef5ccbe8e6e06f.png

使用SQLite的一个Demo(英雄管理系统)

da0c3633dbd3cd604cdae91aec5ce6b5.png

主要操作数据库的代码

public class HeroSqliteManager {

private SQLiteOpenHelper dbHelper;

private SQLiteDatabase db;

private static HeroSqliteManager instance;

private static final String TABLE_NAME = "hero";

private static final String NAME_FIELD = "name";

private static final String ICOID_FIELD = "icoId";

private static final String ATTACK_FIELD = "attack";

private static final String DEFENSE_FIELD = "defense";

public static HeroSqliteManager getInstance() {

if (instance == null) {

synchronized (HeroSqliteManager.class) {

if (instance == null) {

instance = new HeroSqliteManager();

}

}

}

return instance;

}

private HeroSqliteManager() {

dbHelper = new HeroSqliteHelper(HeroApplication.getContext());

db = dbHelper.getWritableDatabase();

}

/**

* 插入记录

* @param hero

*/

public void insertData(Hero hero) {

ContentValues cv = new ContentValues();

cv.put(NAME_FIELD, hero.name);

cv.put(ICOID_FIELD, hero.icoId);

cv.put(ATTACK_FIELD, hero.attack);

cv.put(DEFENSE_FIELD, hero.defense);

db.insert(TABLE_NAME, null, cv);

}

/**

* 删除记录

* @param

*/

public void deleteData(int id) {

String whereClasuse = "_id = ?";

String[] whereArgs = new String[]{String.valueOf(id)};

db.delete(TABLE_NAME, whereClasuse, whereArgs);

}

/**

* 修改记录

* @param hero

*/

public void updateData(Hero hero) {

ContentValues cv = new ContentValues();

cv.put(NAME_FIELD, hero.name);

cv.put(ICOID_FIELD, hero.icoId);

cv.put(ATTACK_FIELD, hero.attack);

cv.put(DEFENSE_FIELD, hero.defense);

String whereClasuse = "_id = ?";

String[] whereArgs = new String[]{String.valueOf(hero.id)};

db.update(TABLE_NAME, cv, whereClasuse, whereArgs);

}

/**

* 查询所有的英雄

* @return

*/

public List selectData() {

List heroList = new ArrayList<>();

Cursor c = db.rawQuery("select * from " + TABLE_NAME, null);

while (c.moveToNext()) {

Hero hero = new Hero();

hero.id = c.getInt(c.getColumnIndex("_id"));

hero.name = c.getString(c.getColumnIndex(NAME_FIELD));

hero.icoId = c.getInt(c.getColumnIndex(ICOID_FIELD));

hero.attack = c.getInt(c.getColumnIndex(ATTACK_FIELD));

hero.defense = c.getInt(c.getColumnIndex(DEFENSE_FIELD));

heroList.add(hero);

}

c.close();

return heroList;

}

/**

* 按name查询

* @param name

* @return

*/

public Hero selectForName(String name) {

Cursor c = db.rawQuery("select * from " + TABLE_NAME + " where name = ?", new String[]{name});

Hero hero = null;

if (c.moveToNext()) {

hero = new Hero();

hero.id = c.getInt(c.getColumnIndex("_id"));

hero.name = c.getString(c.getColumnIndex(NAME_FIELD));

hero.icoId = c.getInt(c.getColumnIndex(ICOID_FIELD));

hero.attack = c.getInt(c.getColumnIndex(ATTACK_FIELD));

hero.defense = c.getInt(c.getColumnIndex(DEFENSE_FIELD));

}

c.close();

return hero;

}

public void destroy() {

// if (db != null) {

// db.close();

// }

// db = null;

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值