Android使用SQLite数据库的示例

Android使用SQLite数据库的示例,第1张

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

一. 简介

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/下看到刚才创建的数据库文件

 

在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}@OverrIDepublic voID onCreate(sqliteDatabase db) {  /* 数据库创建的时候会回调此方法,可以用db对象执行sql语   * 句,创建所需要的表   */}@OverrIDepublic 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可以看到创建的数据库文件

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将数据库文件导出到电脑上

 

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

 

除了执行定义创建表的方法外,还可以在继承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",cv);   }

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

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

同样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);  }

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

查:在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(游标)对象  }

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

 

主要 *** 作数据库的代码

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,cv);  }  /**   * 删除记录   * @param   */  public voID deleteData(int ID) {    String whereClasuse = "_ID = ?";    String[] whereArgs = new String[]{String.valueOf(ID)};    db.delete(table_name,whereArgs);  }  /**   * 修改记录   * @param hero   */  public voID updateData(Hero hero) {    ContentValues cv = new ContentValues();    cv.put(name_FIELD,hero.defense);    String whereClasuse = "_ID = ?";    String[] whereArgs = new String[]{String.valueOf(hero.ID)};    db.update(table_name,whereArgs);  }  /**   * 查询所有的英雄   * @return   */  public List<Hero> selectData() {    List<Hero> 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;  }}

SQLiteDemo  

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

总结

以上是内存溢出为你收集整理的Android使用SQLite数据库的示例全部内容,希望文章能够帮你解决Android使用SQLite数据库的示例所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1147201.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存