嵌入式关系型SQLite数据库存储及对数据的操作

andorid入门 android sqlite it

    SQLite是Android平台上集成的一个轻量级嵌入式关系型数据库,语法基本跟Mysql类似,它支持
五种数据类型:NULL(空),INTEGER(整型),REAL(浮点数字),TEXT(字符串文本),BLOB(二进制对象)。但
实际上也接受varchar(n),char(n),decimal(p,s)等数据类型,只不过在运算或者保存时会转成对应的
五种数据类型。
    SQLite最大的特点是可以把各种类型的数据保存到任何的字段中,而不用关心字段声明的数据类型
是什么。例如:INTEGER类型的字段中可以存放字符串,浮点型,日期类型的数据。但是有一种情况例外:
定义为INTEGER PRIMARY KEY的字段只能存储64位的整数,如果存储了其他数据类型将报错。
    另外SQLite在解析CREATE TABLE语句时,会忽略CREATE TABLE语句中跟在字段名后面的数据类型信息。
例如:CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))
中将会忽略name字段的类型信息。

以下是简单的SQLite语句(大部分标准都是SQL语句)
查询语句:
 select * from 表名 where 条件 group by 分组 having ... order by 排序
插入语句:
 insert into 表名(字段列表) values(值列表)
更新语句:
 update 表名 set 字段名1=值1,字段名2=值2 ... where 条件
删除语句:
 delete from 表名 where 条件


类的介绍:
    一:SQLiteOpenHelper抽象类:通过它可以实现对数据库的创建和对数据库版本的管理,
 继承它必须实现构造方法和两个抽象方法: 
 构造方法:
 public MySQLiteHelper(Context context, String name, CursorFactory factory,int version) {
  //实现父类的构造方法:
  //context :上下文
  //name : 数据库的名称
  //factory :游标实例的工厂类,设置为null,代表使用系统默认的工厂类
  //version :数据库版本
  super(context, name, factory, version);
 }

 实现的抽象方法:
 //这个方法用于初次使用的软件时生成数据库。
 //当调用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法时,如果数据库不存在则调用次方法生成数据。
 @Override
 public void onCreate(SQLiteDatabase db) {
  db.execSQL("Create Table concast (concasID integer primary key autoincrement, name varchar(20),phone varchar(20),
         address varchar(100))");
  Log.i(TAG, "onCreate执行了");
 }
 //这个方法用于更新数据库,如:更新数据结构等,只有数据库的版本升级了才执行。
 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  Log.i(TAG, "onUpgrade执行了:旧的版本号:"+oldVersion+"  新的版本号:"+newVersion);
 }

 getWritableDatabase()和getReadablebase()方法的区别以及作用?
  作用:getReadableDatabase()和getWritableDatabase()都能获取SQLiteOpenHelper数据库的实例。
  区别:
       如果使用getWritableDatabase方法打开数据库,当磁盘满后,打开将会报错。
       如果使用getReadableDatabase方法打开数据库,磁盘未满会调用getWritableDatabase()方法打开数据,如果磁盘满后,将会以读的方式打开。
   
 
    二:SQLiteDatabase类:用于操作数据库。
 该类封装了一些操作数据库的API,使用该类可以对数据进行添加(Create),查询(Retrieve),更新(Update),删除(Delete)操作,简称CRUD。
    使用该类重点掌握execSQL()和rawQuery()方法。
 execSQL()方法主要是应用于更改行为,如:insert,delete,update和创建表create table等语句。
 rawQuery()方法主要是用于查询数据,如果select
  
 execSQL(String sql, Object[] bindArgs)方法的第一个参数为SQL语句,第二个参数为SQL语句中占位符参数的值,参数值在数组中的顺序    要和占位符的位置对应。

 rawQuery()方法会返回一个游标Cursor。
 Cursor的方法介绍:
  moveToNext()     可以将游标从当前行移动到下一行,如果已经移过了结果集的最后一行,返回结果为false,否则为true
  moveToPrevious() 用于将游标从当前行移动到上一行,如果已经移过了结果集的第一行,返回值为false,否则为true
  moveToFirst()    用于将游标移动到结果集的第一行,如果结果集为空,返回值为false,否则为true
  moveToLast()     用于将游标移动到结果集的最后一行,如果结果集为空,返回值为false,否则为true
  cursor.getInt(0);    获取第一列的值,第一列的索引从0开始
  cursor.getString(1); 获取第二列的值
  cursor.getInt(2);    获取第三列的值


    三:SQLite数据库的事务操作。SQLiteDatabase中的事务方法:
 beginTransaction()方法可以开启一个事务  
 setTransactionSuccessful() 方法设置事务的标志为成功则提交事务,如果没有调用setTransactionSuccessful() 方法则回滚事务 
 endTransaction() 方法时会检查事务的标志是否为成功

 如下:
 SQLiteDatabase db = ....;
 db.beginTransaction();//开始事务
 try {
    db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"传智播客", 4});
     db.execSQL("update person set name=? where personid=?", new Object[]{"传智", 1});
     db.setTransactionSuccessful();//调用此方法会在执行到endTransaction() 时提交当前事务,如果不调用此方法会回滚事务
 } finally {
     db.endTransaction();//由事务的标志决定是提交事务,还是回滚事务
 }
 db.close();
 上面两条SQL语句在同一个事务中执行。

 

--------------------以下是例子:数据库的CURD-----------------------------


public class MySQLiteOpenHelper extends SQLiteOpenHelper {

 private final static String NAME = "mydb.db";
 private final static int VERSION = 1;
 private static final String TAG = "MySQLiteOpenHelper";
 
 public MySQLiteOpenHelper(Context context) {
  super(context, NAME, null, VERSION);
  Log.i(TAG, "创建数据库成功:"+NAME);
 }
 @Override
 public void onCreate(SQLiteDatabase db) {
  
  Log.i(TAG,"数据库创建之前");
  db.execSQL("Create Table contacts (concasID integer primary key autoincrement,"
    + " name varchar(20),phone varchar(20),address varchar(100))");
  Log.i(TAG,"数据库创建成功");
 }

 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  Log.i(TAG, "新的数据版本:"+newVersion+"   老的数据库版本:"+oldVersion);
 }

 
 @SuppressLint("NewApi")
 @Override
 public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  super.onDowngrade(db, oldVersion, newVersion);
  Log.i(TAG, "新的数据版本:"+newVersion+"   老的数据库版本:"+oldVersion);
 }
}

 



public class ContactsDao {
 
 private static final String TAG = "ContactsDao";
 private MySQLiteOpenHelper mySQLiteOpenHelper;
 public ContactsDao(Context context){
  mySQLiteOpenHelper = new MySQLiteOpenHelper(context);
 }
 
 
 public void add(Contacts contacts){
  if(contacts==null){
   Log.i(TAG, "contacts为null");
   return ;
  }
  SQLiteDatabase db = null;
  Object[] args;
  String sql = null;
  try{
  db = mySQLiteOpenHelper.getReadableDatabase();
  sql = "insert into contacts(name,phone,address) values (?,?,?)";
  args = new Object[]{contacts.getName(),contacts.getPhone(),contacts.getAddress()};
  db.execSQL(sql, args);
  Log.i(TAG, "插入联系人成功:"+contacts.toString());
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   if(db!=null){
    db.close();
   }
  }
 }
 
 
 public List get(String name){
  SQLiteDatabase db = null;
  String[] args;
  String sql = null;
  List list = null;
  try{
  db = mySQLiteOpenHelper.getReadableDatabase();
  sql = "select * from contacts where name=?";
  args = new String[]{name};
  Cursor cursor = db.rawQuery(sql, args);
  list = new ArrayList();
  Contacts contacts = null;
  while(cursor.moveToNext()){
   contacts = new Contacts();
   contacts.setName(cursor.getString(1));
   contacts.setPhone(cursor.getString(2));
   contacts.setAddress(cursor.getString(3));
   list.add(contacts);
   contacts = null;
  }
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   if(db!=null){
    db.close();
   }
  }
  return list;
 }
 
 
 public void update(int contactID,Contacts contacts){
  SQLiteDatabase db = null;
  Object[] args;
  String sql = null;
  try{
   db = mySQLiteOpenHelper.getReadableDatabase();
   sql = "update contacts set name=?,phone=?,address=? where concasID=?";
   args = new Object[]{contacts.getName(),contacts.getPhone(),contacts.getAddress(),contactID};
   db.execSQL(sql, args);
   Log.i(TAG, "更新成功:"+contacts.toString());
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   if(db!=null){
    db.close();
   }
  }
 }
 
 
 public void delete(int contactID){
  SQLiteDatabase db = null;
  Object[] args;
  String sql = null;
  try{
   db = mySQLiteOpenHelper.getReadableDatabase();
   sql = "delete from contacts where concasID=?";
   args = new Object[]{contactID};
   db.execSQL(sql, args);
   Log.i(TAG, "删除成功:");
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   if(db!=null){
    db.close();
   }
  }
 }
}

 


 


相关推荐

  • 数据库的存储引擎和SQL语言   数据库的存储引擎就是管理数据存储的东西,它完成下面的工作:  1)存储机制  2)索引方式  3)锁  4)等等  SQL语言:-----关系型数据库所使用的数据管理语言  1)数据定义语言(DDL):DROP、CREATE、ALTER
  • 北京数据恢复:网络存储导论第五章:数据分级存储综述 北京数据恢复:网络存储导论第五章:数据分级存储综述[导读]数据分级存储的工作原理是基于数据访问的局部性。通过将不经常访问的数据自动移到存储层次中较低的层次,释放出较高成本的存储空间给更频繁访问的数据,可以获得更好的总体性价比。  第五章数据
  • Oracle数据库的存储结构 ORACLE数据库的存储结构分为逻辑存储结构和物理存储结构。逻辑存储结构与操作系统平台无关;物理存储结构与操作系统平台有关。从物理上看,数据库是由控制文件、数据文件、重做日志文件、初始化参数文件等组成的;从逻辑上看,数据库是由表空间组成的。
  • Access数据库的存储上限 Access数据库的存储上限:Access数据库的存储上限Access规格MicrosoftAccess数据库规格Access数据库属性最大值MicrosoftAccess数据库(.mdb)文件大小2G字节减去系统对象所需的空间。数据库中的
  • 用ASP.NET2.0在数据库中存储二进制文件 查看文章用ASP.NET2.0在数据库中存储二进制文件2007-08-0611:11 一、引言  在构建数据驱动的应用程序时,经常需要捕获文本和二进制数据。这样的程序可能需要存储图像,PDF,Word文件或其它二进制数据。能够使用两种方式来
  • 利用云存储的数据中心存储管理方案 现在对于大型的数据中心来讲还有一种应用方式就是针对个人用户,以及在企业内部用户级数据的管理。  我们知道电信的数据机房里面,我们的存储设备我们的服务器是为专用的设备进行使用的,很少有针对个人用户来进行服务的一些系统。  随着我们个人级用户数
  • 提高数据中心存储性能的方法 目前企业通过三种存储效率技术,可以从中获得巨大的利益,节省成本和空间。并有效地利用存储空间和对于新技术的投资,包括云存储资源的释放。它还让企业以其自己的数据中心和云服务的成本进行实际比较。因此,运用这些技术是走向云计算的重要的第一步。重复数
  • hibernate操作存储过程出现无法找到存储过程错误解答 java.sql.SQLException:[Microsoft][SQLServer2000DriverforJDBC][SQLServer]未能找到存储过程'存储过程名'。报这个错,首先看你创建存储过程的时候是不是在你用的数据库下,如果
  • 【原创】关于作业上交(Asp数据操作五步法) 在背景描述、需求分析、数据库设计和文件结构规划之后,本应开始页面布局设计,使用PS等绘图工具来设计页面,但因本人不是很精通,所以自我一个了。此文开始叙述如何组织代码来实现各个功能。在Asp操作Access数据中,每次操作数据均包含五个步骤:
  • 格式化硬盘数据恢复-存储卡信息删除数据恢复-天津数据恢复 天伟(国际)数据恢复中心内将以最完善的设备、技术、服务为更广大的客户提供更优质的服务!首选天伟,您绝对正确的选择!天伟数据恢复中心投入了大量资金研发硬盘数据恢复技术,购买大量硬盘以及机械和电子设备,成功解决了高难度硬盘数据恢复及疑难杂症数据
  • mongodb php 把mongodb数据操作语言转化为php数据操作语言 <?phpclassAta_Db_Mongo{protectedstatic$conn;protected$_db;protected$_data=array();protected$c_options=array('fsync'=&
  • SQL数据操作基础中级10 操作日期和时间日期和时间函数对建立一个站点是非常有用的。站点的主人往往对一个表中的数据何时被更新感兴趣。通过日期和时间函数,你可以在毫秒级跟踪一个表的改变。返回当前日期和时间通过函数GETDATE(),你可以获得当前的日期和时间。例如,语句

你的评论

就没有什么想说的吗?

最新博客

关于我们 免责声明 移动版

©2017传客网    琼ICP备15003173号-2    

本站部分文章来源于互联网,版权归属于原作者。
本站所有转载文章言论不代表本站观点,如是侵犯了原作者的权利请发邮件联系站长(weishubao@126.com),我们收到后立即删除。
站内所有资源仅供学习与参考,请勿用于商业用途,否则产生的一切后果将由您自己承担!

X