数据持久化:

1、文件存储

  适合用于存储一些简单的文本数据或二进制数据

  存储数据:openFileOutput(文件名,操作模式),返回值为一个FileOutputStream对象,借助FileOutputStream对象构建出OutputStreamWriter对象,再借助OutputStreamWriter构建出一个BufferedWriter对象,通过bufferedWriter对象将文本写入到文件中。

public void save(){
  String data = "data to save"
  FileOutputStream out = null;
  BufferedWriter writer = null;
  try{
    out = openFileOutput("data",Context.MODE_PRIVATE);
    writer = new BufferedWriter(new OutputStreamWriter(out));
    writer.write(data);
  }catch(IOException e){
    e.printStackTrace();
  }finally{
    try{
      if(writer != null){
        writer.close();
      }catch(IOException e){
        e.printStackTrace();
      }
    }
  }
  
}

  读取数据:openFileInput(文件名),返回FileInputStream对象。

Public String load(){
  FileInputStream in = null;
  BufferedReader reader = null;
  StringBuilder content = new StringBuilder();
  try{
    in = openFileInput("data");
    reader = new BufferedReader(new InputStreamReader(in));
    String line = "";
    while((line = reader.readLine())!=null){
      content.append(line);
    }
  }catch(IOException e){
    e.printStackTrace();
  }finally{
    if(reader != null){
      try{
        reader.close();
      }catch(IOException e){
        e.printStackTrace();
      }
    }
  }
  return content.toString();
}

2、SharedPreferences存储

  键值对。

  获得SharePreferences对象那个的方法

  (1)getSharedPreferences(文件名,操作模式)

  (2)getPreferences(文件名)

  (3)getDefaultSharePreferences(Context)

  存储数据:

  (1)调用edit()获取一个SharedPreferences.Editor对象

  (2)向SharedPreferences.Editor中添加数据

  (3)调用commit()提交数据

  读取数据:

  getXXX(键,默认值)方法

SQLite数据库

  创建:通过SQLiteOpenHelper帮助类实现创建和升级。

     getReadableDatabase()和getWritableDatabase()

  DOS窗口操作SQLite数据库?
  1)adb shell
  2)ls
  3)cd 数据表的路径
  4)sqlite3 数据库完整的名字
  4.1) .tables
  4.2) select * from notetab;
  4.3) .exit
  4.4) .help

  升级:更新版本号

增删改查

  增:insert(表名,null,ContentValues对象)

  改:updata(表名,ContentValues对象,某一行或几行的数据)

  删:delete(表名,某一行或某几行的数据)

  查:query(表名,哪列,某一行或几行的数据,group by的列,过滤,排序方式),返回一个Cursor对象

事务:保证一系列的操作要么完成,要么一个都不完成。

  (1)调用beginTransaction()开启事务

  (2)在异常捕获代码块中执行具体的数据库操作

  (3)调用setTransactionSuccessful()表示执行成功

  (4)endTransaction()结束事务

public class MainActivity extends Activity {

    private MyDatabaseHelper dbHelper;

    @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbHelper = new MyDatabaseHelper(this,"BookStore.db",null,2);
Button createDatabase = (Button) findViewById(R.id.create_database);
createDatabase.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
dbHelper.getWritableDatabase();
}
}); Button addData = (Button) findViewById(R.id.add_data);
addData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name","The Da Vinci Code");
values.put("author","Dan Brown");
values.put("pages","100");
values.put("price","30");
db.insert("Book",null,values);
values.clear(); values.put("name","世界末日");
values.put("author","死神");
values.put("pages","10000");
values.put("price","50000");
db.insert("Book",null,values);
}
});
Button updataData = (Button) findViewById(R.id.updata_data);
updataData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("price","200");
db.update("Book",values,"name = ?",new String[]{"Tea Da Vinci Code"});
}
});
Button deleteData = (Button) findViewById(R.id.delete_data);
deleteData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete("Book","pages<?",new String[]{"450"});
}
});
Button quertData = (Button) findViewById(R.id.query_data);
quertData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
Cursor cursor = db.query("Book",null,null,null,null,null,null);
if (cursor.moveToFirst()){
do{
String name = cursor.getString(cursor.getColumnIndex("name"));
String author = cursor.getString(cursor.getColumnIndex("author"));
int pages = cursor.getInt(cursor.getColumnIndex("pages"));
double price = cursor.getDouble(cursor.getColumnIndex("price")); Log.i("XYZ","book name is"+name);
Log.i("XYZ","book author name is"+author);
Log.i("XYZ","book pages is"+pages);
Log.i("XYZ","book price is"+price);
}while (cursor.moveToNext());
}
cursor.close();
}
});
Button replaceData = (Button) findViewById(R.id.replace_data);
replaceData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.beginTransaction(); //开启事务
db.delete("Book",null,null);
if (true){
throw new NullPointerException();
} ContentValues values = new ContentValues();
values.put("name","游戏大全");
values.put("author","老三");
values.put("pages","20");
values.put("price","35.5");
db.insert("Book",null,values);
db.setTransactionSuccessful(); //事务执行成功
db.endTransaction(); //结束事务
}
}); }
}

  

SQLite数据库的更多相关文章

  1. Android之SQLite数据库篇

    一.SQLite简介 Google为Andriod的较大的数据处理提供了SQLite,他在数据存储.管理.维护等各方面都相当出色,功能也非常的强大. 二.SQLite的特点 1.轻量级使用 SQLit ...

  2. Qt5 开发 iOS 应用之访问 SQLite 数据库

    开发环境: macOS 10.12.1 Xcode 8.1 Qt 5.8 iPhone 6S+iOS 10.1.1   源代码: 我在 Qt 程序里指定了数据库的名称来创建数据库,在 Win10.An ...

  3. 【Win 10 应用开发】Sqlite 数据库的简单用法

    如果老周没记错的话,园子里曾经有朋友写过如何在 UWP 项目中使用 Sqlite数据库的文章.目前我们都是使用第三方封装的库,将来,SDK会加入对 Sqlite 的支持. 尽管目前 UWP-RT 库中 ...

  4. Android之SQLite数据库使用

    转载整理于:http://my.csdn.net/lmj623565791 我刚开始接触Android的时候甚至都不敢相信,Android系统竟然是内置了数据库的!好吧,是我太孤陋寡闻了.由于我之前是 ...

  5. 让PDF.NET支持最新的SQLite数据库

    最近项目中用到了SQLite,之前项目中用的是PDF.NET+MySQL的组合,已经写了不少代码,如果能把写好的代码直接用在SQLite上就好了,PDF.NET支持大部分主流的数据库,这个当然可以,只 ...

  6. iOS sqlite数据库图像化查看

    问题描述:在xocde上用sqlite数据库的时候,因为没有图形化界面,有些时候很难看出自己设计的数据库是否有问题,比如我刚上手sqlite数据库设计id为自增长时,很自然的用了identify(1, ...

  7. Android中SQLite数据库小计

    2016-03-16 Android数据库支持 本文节选并翻译<Enterprise Android - Programing Android Database Applications for ...

  8. Android开发-之SQLite数据库

    之前我们讲了如何将数据存储在文件中,那么除了这种方式呢,就是我们常见的大家都知道的将数据存储在数据库当中了. 将数据存储在数据库中的优势: 1)存储在数据库中的数据更加方便操作,比如增.删.改.查等 ...

  9. Java操作Sqlite数据库-jdbc连接

    Java操作Sqlite数据库步骤: 1. 导入Sqlite jdbc 本文使用sqlite-jdbc-3.7.2.jar,下载地址 http://pan.baidu.com/s/1kVHAGdD 2 ...

  10. Android开发学习——SQLite数据库与单元测试

    SQLite数据库 轻量级关系型数据库 创建数据库需要使用的api:SQLiteOpenHelper  public class Myopenhelper extends SQLiteOpenHelp ...

随机推荐

  1. QT 调试时出现 During startup program exited with code 0xc0000135 错误

    我用的QT creator 5.70 出现上述原因是动态库加载不成功,但是QTcreator 不会提示什么动态库,具体缺乏什么动态库要用VS新建一个工程调用才可以看到,这也是QT Creator很大的 ...

  2. myisam、innodb存储引擎比较

    MYSQL表类型(存储引擎) 1.概述 MySQL数据库其中一个特性是它的存储引擎是插件式的.用户可以根据应用需要选择存储引擎.Mysql默认支持多种存储引擎,以适用各种不同的应用需要.默认情况下,创 ...

  3. VSO-Branch和Merge

    分支策略 一般采用一个MAIN分支,一个或多个DEVELOPMENT分支的分支结构,如下图(来自:https://msdn.microsoft.com/en-us/library/ee782536.a ...

  4. Java以基础类库

    Java以基础类库JFC(Java Foundation Class)的形式为程序员提供编程接口API,类库中的类按照用途归属于不同的包中. (一)java.lang包 Java最常用的包都属于该包, ...

  5. Python快速建站系列-Part.Five.3-个人主页及资料页面

    |版权声明:本文为博主原创文章,未经博主允许不得转载. 第五部分最后一节,完成个人主页里资料页面的个人资料的展示和修改功能,不过毕竟功能比较少,个人资料其实只有昵称一项,手动滑稽. 一如既往先写出来u ...

  6. 关于oracle数据库中进行查询的时候出现效率特别差的一种情况

    下面这段代码执行效率是极慢的(根本没执行完成过): select /*+ parallel(16) */ z.small_code,trunc(hs.CREATED_AT),sum(hs.COST_S ...

  7. SQL Server 参数化 PARAMETERIZATION

    ALTER DATABASE  dbname  SET PARAMETERIZATION SIMPLE  --默认 ALTER DATABASE  dbname  SET PARAMETERIZATI ...

  8. Openbox中指定目录打开程序

    现在遇到这样的情况,在浏览器的下载中,点击在文件夹中显示, 结果这个使用系统调用的是Baobab,一款分析磁盘使用情况的软件,而不是使用目录浏览程序,例如nautilus 查询后知道,系统使用xdg- ...

  9. ExtJS6 自适应浏览器窗口大小

    ExtJS6官方文档推荐使用Ext.on.做一个小例子,创建一个Panel显示在页面上,使它的大小随浏览器变化,自适应浏览器窗口大小. html:增加一个css样式给Panel加上红色border. ...

  10. 数据流 in redux

    之前用学过的react和react-router写了个单页面应用,但写完后总感觉还欠缺点什么,怎么说呢,就是感觉在数据流的控制上被框架约束的厉害,很不自由,比如兄弟组件间的通信就很不方便.然后才了解到 ...