Android   发布时间:2022-04-28  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Android使用SQLite数据库的示例大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_772_0@一. 简介

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

@H_772_0@二. Android中sqlite数据库的使用

@H_772_0@1、创建sqlite数据库

sqliteDatabase db=
sqliteDatabase.openOrCreateDatabase(
"/data/data/" + getPackagename() + "/test.db",null);
@H_772_0@执行完这条语句,可以在adb sHell下进入/data/data/package-name/下看到刚才创建的数据库文件

@H_772_0@

Android使用SQLite数据库的示例

 

@H_772_0@在Android中使用sqliteDatabase的静态方法
openOrCreateDatabase(String path,sqliteDatabase.cursorFactory factory)打开或者创建一个数据库

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

@H_772_0@除了以上方法,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) {
//当数据库升级调用方法
}
}

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

sqliteOpenHelper dbHelper = new MysqLiteHelper(this);
sqliteDatabase db = dbHelper.getWritableDatabase();
@H_772_0@使用sqliteOpenHelper创建的数据库,保存在/data/data/package-name/databases/目录下,通过adb sHell可以看到创建的数据库文件

@H_772_0@

Android使用SQLite数据库的示例

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

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

  private void createTable(sqliteDatabase db){
    //sql语句
    String sql = 
    "create table stutable(_id INTEGER PRIMary key autoincrement,@R_768_4687@t,age integer)";
    db.execsql(sql);
  }
@H_772_0@这里附上sqlite数据类型

@H_772_0@NULL: 这个值可为空值

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

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

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

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

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

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

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

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

@H_772_0@

Android使用SQLite数据库的示例

 

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

@H_772_0@ 

Android使用SQLite数据库的示例

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

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

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

  //sqliteDatabase类中提供的方法
  public long insert(
     String table,//要操作表名 
     String nullColumnHack,//空列的认值 
     ContentValues values
//ContentValues封装了列名称和列值的Map
     ); 

  private void insert@R_980_10586@ble(sqliteDatabase db){
    ContentValues cv = new ContentValues();
    cv.put("name","wxq");
    cv.put("age",11);
    db.insert("stutable",cv); 
  }

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

@H_772_0@

Android使用SQLite数据库的示例

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

@H_772_0@同样Android提供了delete方法

  //sqliteDatabase类中提供的方法
  public int delete(
      String table,//表名称
      String whereClause,//删除条件
      String[] whereArgs); //删除条件值数组

  private void delete@R_980_10586@ble(sqliteDatabase db){
    //删除条件,这里以name为条件,也可以是age = ?
    String whereClasuse = "name = ?";
    //删除条件参数,String[] whereArgs = new String[]{"wxq"};
    //执行删除
    db.delete("stutable",whereClasuse,whereArgs);
  }

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

@H_772_0@改:

  //sqliteDatabase类中提供的方法
  public int update(
  //表名称
  String table,//和行列ContentValues键值对应的key-value
  ContentValues values,//更新条件
  String whereClause,//更新条件数组
  String[] whereArgs
  );

  private void update@R_980_10586@ble(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);
  }

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

@H_772_0@

Android使用SQLite数据库的示例

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

  public cursor rawQuery(
  String sql,//查询sql语句
  String[] SELEctionArgs//当sql语句中含有?,这里代表值
  );

  public void query@R_980_10586@ble(sqliteDatabase db){
    String sql = "SELEct * from stutable";//全查
    cursor c = db.rawQuery(sql,null);//这里会返回一个cursor(游标)对象
  }

@H_772_0@

Android使用SQLite数据库的示例

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

@H_772_0@

Android使用SQLite数据库的示例

 

@H_772_0@主要操作数据库代码

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;
  }
}

@H_772_0@SQLiteDemo  

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

大佬总结

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

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

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:androidsqlite