sharedPreferences只适合存储比较简单的数据和键值对,支持不同的数据类型

文件存储连键值对都没有,不会进行任何格式化处理,存储简单的二进制或者文本数据

sqlite则能处理一些数据量大,并且结构比较复杂的数据

管理sqlite   SQLiteHelper:抽象类,要使用的话就要创建自己的帮助类去继承它,并且重写oncreate和onupgrade,

还有两个实例方法可以调用:  getreadabledatabase()  getwritabledatabase()  都可以创建或者打开数据库,但是getreadabledatabase可以再数据库不可写入的的时候继续以只读方式打开,但是另一个方法  将会产生异常

重写构造函数:一般使用简单的参数这个**(context,数据库名字,cursor,版本号)

使用android adb来查看是否创建成功,需要配置adb环境变量 adb的环境变量path D:\andriod\adt-bundle-windows-x86-20140702\adt-bundle-windows-x86-20140702\sdk\platform-tools java的环境变量  %JAVA_HOME%\bin;

创建数据库:

创建数据库
//先定义一个类MyDatabaseHelper
public class MyDatabaseHelper extends SQLiteOpenHelper{
public static final String CREATE_BOOK="create table Book("+"id integer primary key autoincrement,"+"tuthor text,"+"price real,"+"pages integer,"+"name text)";
//创建一个新表升级数据库
public static final String CREATE_CATEGORY="create table Category("+"id integer primary key autoincrement,"+"catagory_name text,"+"categoty_code integer)"; private Context mContext;
public MyDatabaseHelper(Context context,String name,CursorFactory factory,int version){
super(context, name, factory, version);
mContext=context;
}
public void onCreate(SQLiteDatabase db){
db.execSQL(CREATE_BOOK);
db.execSQL(CREATE_CATEGORY);//新增表category的见表语句
Toast.makeText(mContext, "Create secceed", Toast.LENGTH_SHORT).show();
}
public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion){
switch(oldVersion) {////升级数据库当老版本是1的时候就只创建在版本2中新加的表,直接安装时就两个表一起创建
case :db.execSQL(CREATE_CATEGORY);//这里没有使用break是为了保证在跨程序升级的时候能够全部创建所有升级的数据库
case :sb.execSQL(CREATE_CATEGORY);
default:
}
} }
//在主函数中进行创建数据库
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,"BoolStore.db",null,);//此处的数字决定了是否执行更新操作
Button createDatabase=(Button) findViewById(R.id.create_database);
createDatabase.setOnClickListener(new OnClickListener(){
public void onClick(View v){
dbHelper.getWritableDatabase();//检查是否有库,没有就创建并且电泳oncreate见表,有就不创建
}
});
Button adddata=(Button)findViewById(R.id.adddata);
adddata.setOnClickListener(new OnClickListener(){
public void onClick(View v){
SQLiteDatabase db=dbHelper.getWritableDatabase();//getWritableDatabase会返回一个可以操作的对象
ContentValues values=new ContentValues();
values.put("name","The Da vinci code");
values.put("author","dan brown");
values.put("pages",);
values.put("price",);
db.insert("Book",null,values);
values.clear();
//开始插入第二条
values.put("name","the lost symbol");
..
..
db.inset("Book",null,values);
//开始给另一个表插入
values.put("categoty_code","");
..
.
db.insert("Category",null,values);
//id我们设为自增长了所以不用单独赋给id
}
});
//更新表中的数据
Button updatedata=(Button)findViewById(R.id.updatedata);
updatedata.setOnClickListener(new OnClickListener{
public void onClick(View v){
SQLiteDatabase db=dbHelper.getWritableDatabase();
ContentValues values=new ContentValues();
values.put("price",);
db.update("Book",values,"name=?",new String[]{"the davinci code"});//这里指定书名为the davinci code 的且在book表中的价格修改为10
}
});
//删除数据
Button deletedata=(Button)findViewById(R.id.deletedata);
deletedata.setOnClickListener(new OnClickListener{
public void onClick(View v){
SQLiteDatabase db=dbHelper.getWritableDatabase();
db.delete("Book","pages>?","new String[]{""}")//这里指定删除book中页数大于500的书籍
}
});
Button queryButton=(Button)findViewById(R.id.queruButton);
queryButton.setOnClickListener(new OnClickListener(){
public void onClick(View v){
SQLiteDatabase db=dbHelper.getWritableDatabase();
Cursor cursor=db.query("Book",null,null,null,null,null,null);//查询完后得到一个Cursor对象,接着调用moveToFirst()遍历
if(cursor.moveToFirst()){
do{
String name=cursor.getString(cursor.getColumnIndex("name"));
String author=cursor.getString(cursor.getColumnIndex("author"));
..
}while(cursor.moveToNext());//取出所有的book中的数据
}
cursor.close();
}
}); }
}

为了连贯的操作一系列的动作,要么全部完成要么全部不能完成
使用事务:

..
public void onClick(View v){
SQLiteDatabase db=dbHelper.getWritableDatabase();
db.beginTransaction();
try{
db.delete("Book",null,null);
if(true){
throw new NullPointException();//手动抛出异常
}
ContentValues values=new ContentValues();
values.put("name","bookname");
values.put("author","bookauthor");
...
db.insert("Book",null,values);
db.setTransactionSuccessful();//事务执行成功
}catch(Exception e){
e.printStackTrace();
}finally{
db.endTransaction();//结束事务
}
}

android SQLITE的基本使用总结(八)的更多相关文章

  1. Android SQLite 通配符查询找不到参数问题

    使用Android SQLite中SQLiteDatabase类的query方法查询时,如果where中包含通配符,则参数会无法设置,如类似下面的方法查询时 SQLiteDatabase db = d ...

  2. Android+Sqlite 实现古诗阅读应用(三)

    往期传送门: Android+Sqlite 实现古诗阅读应用(一) Android+Sqlite 实现古诗阅读应用(二) 加入截图分享的功能. 很多应用都有分享的功能,我也想在我的古诗App里加入这个 ...

  3. Android+Sqlite 实现古诗阅读应用(二)

    传送门:Android+Sqlite 实现古诗阅读应用(一) Hi,又回来了,最近接到很多热情洋溢的小伙伴们的来信,吼开心哈,我会继续努力的=-=! 上回的东西我们做到了有个textview能随机选择 ...

  4. Android Sqlite 数据库版本更新

      Android Sqlite 数据库版本更新 http://87426628.blog.163.com/blog/static/6069361820131069485844/ 1.自己写一个类继承 ...

  5. Android SQLite总结(一) (转)

    Android SQLite总结(一)  郑海波 2012-08-21 转载请声明:http://blog.csdn.net/nuptboyzhb/article/details/7891887 前言 ...

  6. android SQLite使用SQLiteOpenHelper类对数据库进行操作

    android SQLite使用SQLiteOpenHelper类对数据库进行操作 原文: http://byandby.iteye.com/blog/835580

  7. Android sqlite管理数据库基本用法

    Android操作系统中内置了sqlite数据库(有关sqlite数据库详细介绍见:http://zh.wikipedia.org/wiki/SQLite),而sqllite本身是一个很小型的数据库, ...

  8. Android SQLite 数据库详细介绍

    Android SQLite 数据库详细介绍 我们在编写数据库应用软件时,需要考虑这样的问题:因为我们开发的软件可能会安装在很多用户的手机上,如果应用使用到了SQLite数据库,我们必须在用户初次使用 ...

  9. Android Sqlite 导入CSV文件 .

    http://blog.csdn.net/johnnycode/article/details/7413111 今天遇到 Oracle 导出的12万条CSV格式数据导入 Android Sqlite ...

  10. Android sqlite数据库存取图片信息

    Android sqlite数据库存取图片信息 存储图片:bitmap private byte[] getIconData(Bitmap bitmap){ int size = bitmap.get ...

随机推荐

  1. SpringBoot | 第三十二章:事件的发布和监听

    前言 今天去官网查看spring boot资料时,在特性中看见了系统的事件及监听章节.想想,spring的事件应该是在3.x版本就发布的功能了,并越来越完善,其为bean和bean之间的消息通信提供了 ...

  2. (四)selenium打开和关闭浏览器

    一.Selenium简介 Selenium3.0主要变更特性: ①移除seleniumRC ②FireFox和Safari推出了自己的driver(geckodriver 和 Safaridriver ...

  3. solidity语言

    IDE:Atom 插件:autocomplete-solidity 代码自动补齐   linter-solium,linter-solidity代码检查错误   language-ethereum支持 ...

  4. Xcode10 闪退问题

    最新更新了iOS12,mac10.13.6,xcode10之后,打开之前的项目,只要进行import,xcode就会闪退.那么就来看一下解决方案: Xcode10 新增了一个构建系统起名“New Bu ...

  5. python爬虫学习(一)

    #简单例子:抓取网页全部内容后,根据正则表达式,获取符合条件的字符串列表from urllib import request#正则表达式import re url = "http://www ...

  6. OLEDB 参数化查询

    一般情况下,SQL查询是相对固定的,一条语句变化的可能只是条件值,比如之前要求查询二年级学生信息,而后面需要查询三年级的信息,这样的查询一般查询的列不变,后面的条件只有值在变化,针对这种查询可以使用参 ...

  7. [原创]vs2012创建的ado.net模型无法实例化的问题

    最近从vs2010升级到vs2012,建立数据模型,发现生成的东西跟以前不一样了,而且也无法实例化使用.百度尝试了n种关键词,终于被我找到解决的方法.在这里记录一下. 1.打开设计器,也就是双击这个 ...

  8. Hadoop的安装与配置(虚拟机中的伪分布模式)

    1引言 hadoop如今已经成为大数据处理中不可缺少的关键技术,在如今大数据爆炸的时代,hadoop给我们处理海量数据提供了强有力的技术支撑.因此,了解hadoop的原理与应用方法是必要的技术知识. ...

  9. web.xml中不同版本的servlet头以及版本控制

    参考文章: http://www.cnblogs.com/beijingstruggle/p/5461146.html http://blog.csdn.net/z69183787/article/d ...

  10. 关于String s = new String("xyz");创建了几个字符串对象?的问题

    引用自这位朋友:http://blog.sina.com.cn/s/blog_6a6b14100100zn6r.html 首先让我们了解几个概念: 栈:由JVM分配区域,用于保存线程执行的动作和数据引 ...