zoukankan      html  css  js  c++  java
  • Android数据存储:SQLite

    Android数据存储之SQLite

    SQLite:Android提供的一个标准的数据库,支持SQL语句。
    用来处理数据量较大的数据。
    △ SQLite特征:
    1.轻量性
    2.独立性
    3.隔离性
    4.跨平台性
    5.多语言接口
    6.安全性
    △ SQLite数据库的一般操作包括:创建数据库、打开数据库、创建表、向表中添加数据、从表中删除数据、修改表中的数据、关闭数据库、删除指定表、删除数据库和查询表中的某条数据。
    1.创建和打开数据库:使用openOrCreateDatabase方法来实现,因为它会自动去检测是否存在这个数据库,如果存在则打开,如果不存在则创建一个数据库。
    创建成功后返回一个SQLiteDatabase对象。
    /* 数据库对象 */
    private SQLiteDatabase  mSQLiteDatabase = this.openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null);
    2.创建表:要创建表可以通过execSQL方法来执行一条SQL语句。
    /* 创建表的sql语句 */
    private final static String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " (" + TABLE_ID + " INTEGER PRIMARY KEY," + TABLE_NUM + " INTERGER,"+ TABLE_DATA + " TEXT)";
      // 获取数据库Phones的Cursor
      try
      {
       /* 在数据库mSQLiteDatabase中创建一个表 */
       mSQLiteDatabase.execSQL(CREATE_TABLE);
      }
    3.向表中添加一条数据:
    可以使用insert方法来添加数据,但是insert方法要求把数据都打包到ContentValues中,ContentValues其实就是一个Map,Key值是字段名称,Value值是字段值。通过ContentValues的put方法就可以把数据放到ContentValues对象中,然后插入到表中去。
    /* 更新一条数据 */
    public void UpData()
    {
      ContentValues cv = new ContentValues();
      cv.put(TABLE_NUM, 1);
      cv.put(TABLE_DATA, "测试数据库数据" );
      mSQLiteDatabase.insert(TABLE_NAME, null, cv );
      /* 同样可以通过execSQL 方法来执行一条"插入"的SQL语句,代码如下 :
      String INSTERT_DATA = "INSERT INTO table1(_id,num,data) values(1,1,'通过SQL语句插入')";
      mSQLiteDatabase.execSQL(INSERT_DATA);*/
    }
    4.从表中删除数据
    mSQLiteDatabase.delete( "Examples.db", "WHERE _id="+0, null );
    /* 也可以通过执行 execSQL 方法来执行SQL语句删除数据:
    string DELETE_DATA = "DELETE FROM table1 WHERE _id=1";
    mSQLiteDatabase.execSQL(DELETE_DATA); */
    5.修改表中的数据
    ContentValues cv = new ContentValues();
    cv.put("TABLE_NUM",3);
    cv.put("TABLE_DATA","修改后的数据");
    mSQLiteDatabase.update("table1",cv,"num"+"="+Integer.toString(0), null );
    6.关闭数据库
    关闭数据库很重要,也是大家经常容易忘记的。关闭的方法很简单,直接使用SQLiteDatabase的close方法。
    mSQLiteDatabase.close();
    7.删除指定表
    mSQLiteDatabase.execSQL("DROP TABLE table1");
    8.删除数据库
    this.deleteDatabase("Examples.db");
    9.查询表中的某条数据
    Android中查询数据通过Cursor类来实现的。我们使用SQLiteDatabase.query()方法,会得到一个Cursor对象,Cursor指向的就是每一条数据。
    代码如下:
    /* 删除数据库 */
    public void DeleteDataBase()
    {
      this.deleteDatabase(DATABASE_NAME);
      this.finish();
    }

    /* 删除一个表 */
    public void DeleteTable()
    {
      mSQLiteDatabase.execSQL("DROP TABLE " + TABLE_NAME);
      this.finish();
    }

    /* 更新一条数据 */
    public void UpData()
    {
      ContentValues cv = new ContentValues();
      cv.put(TABLE_NUM, miCount);
      cv.put(TABLE_DATA, "修改后的数据" + miCount);
      /* 更新数据 */
      mSQLiteDatabase.update(TABLE_NAME, cv, TABLE_NUM + "=" + Integer.toString(miCount - 1), null);
      UpdataAdapter();
    }

    /* 向表中添加一条数据 */
    public void AddData()
    {
      ContentValues cv = new ContentValues();
      cv.put(TABLE_NUM, miCount);
      cv.put(TABLE_DATA, "测试数据库数据" + miCount);
      /* 插入数据 */
      mSQLiteDatabase.insert(TABLE_NAME, null, cv);
      miCount++;
      UpdataAdapter();
    }

    /* 从表中删除指定的一条数据 */
    public void DeleteData()
    {
      /* 删除数据 */
      mSQLiteDatabase.execSQL("DELETE FROM " + TABLE_NAME + " WHERE _id=" + Integer.toString(miCount));
      miCount--;
      if (miCount < 0)
      {
       miCount = 0;
      }
      UpdataAdapter();
    }
    ☆ SQLiteOpenHelper应用:
    在使用SQLiteOpenHelper时需要注意:SQLiteOpenHelper的构造方法中分别需要传入Content、数据库名称、CursorFactory(一般传入null,否则为默认数据库)、数据库版本号(不能为负数)。SQLiteOpenHelper构造函数中并没有真正创建数据库,而是在调用getWritableDatabase或者getReadableDatabase方法时才真正去创建数据库,并返回一个SQLiteDatabase对象。
    代码如下:
    // 打开数据库,返回数据库对象
    public void open() throws SQLException
    {
      mDatabaseHelper = new DatabaseHelper(mContext);
      mSQLiteDatabase = mDatabaseHelper.getWritableDatabase();
    }

    // 关闭数据库
    public void close()
    {
      mDatabaseHelper.close();
    }
    /* 插入一条数据 */
    public long insertData(int num, String data)
    {
      ContentValues initialValues = new ContentValues();
      initialValues.put(KEY_NUM, num);
      initialValues.put(KEY_DATA, data);
      return mSQLiteDatabase.insert(DB_TABLE, KEY_ID, initialValues);
    }
    /* 删除一条数据 */
    public boolean deleteData(long rowId)
    {
      return mSQLiteDatabase.delete(DB_TABLE, KEY_ID + "=" + rowId, null) > 0;
    }
    /* 通过Cursor查询所有数据 */
    public Cursor fetchAllData()
    {
      return mSQLiteDatabase.query(DB_TABLE, new String[] { KEY_ID, KEY_NUM, KEY_DATA }, null, null, null, null, null);
    }
    /* 查询指定数据 */
    public Cursor fetchData(long rowId) throws SQLException
    {
      Cursor mCursor =
      mSQLiteDatabase.query(true, DB_TABLE, new String[] { KEY_ID, KEY_NUM, KEY_DATA }, KEY_ID + "=" + rowId, null, null, null, null, null);
      if (mCursor != null)
      {
       mCursor.moveToFirst();
      }
      return mCursor;
    }
    /* 更新一条数据 */
    public boolean updateData(long rowId, int num, String data)
    {
      ContentValues args = new ContentValues();
      args.put(KEY_NUM, num);
      args.put(KEY_DATA, data);
      return mSQLiteDatabase.update(DB_TABLE, args, KEY_ID + "=" + rowId, null) > 0;
    }

    相关参考链接:http://www.apkbus.com/forum.php?mod=viewthread&tid=140454

    http://www.apkbus.com/android-726-1-1.html

    http://www.apkbus.com/forum.php?mod=viewthread&tid=15731

    相关代码下载链接:http://www.apkbus.com/android-141976-1-1.html

  • 相关阅读:
    反射
    接口和抽象类
    套接字通信
    C#的urlencode
    go语言摘记
    c# Httphelper帮助类 简约版
    maven
    读取资源文件里的值---来源practical-aspnetcore项目
    JWT使用---来源practical-aspnetcore项目
    .net core国际化
  • 原文地址:https://www.cnblogs.com/klcf0220/p/3245412.html
Copyright © 2011-2022 走看看