你的位置:首页 > 操作系统

[操作系统]Android之操作SQLite


1.SQLite简介

SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入  式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持 Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl、PHP、Java、C++、.Net等,还有ODBC接口,同样比起 Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。

2.SQLite数据类型

一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。SQLite具有以下五种常用的数据类型:

NULL: 这个值为空值

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

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

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

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

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

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

DATA :包含了 年份、月份、日期。

TIME: 包含了 小时、分钟、秒。

3.SQLiteDatabase的常用方法 

方法名称
方法表示含义
openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory  factory)
打开或创建数据库
insert(String table,String nullColumnHack,ContentValues  values)
插入一条记录
delete(String table,String whereClause,String[]  whereArgs)
删除一条记录
query(String table,String[] columns,String selection,String[]  selectionArgs,String groupBy,String having,String  orderBy)
查询一条记录
update(String table,ContentValues values,String whereClause,String[]  whereArgs)
修改记录
execSQL(String sql)
执行一条SQL语句
close()
关闭数据库

下面就在代码中查看详细的解释:

SQLiteActivity

 1 package mars.sqlite3; 2  3 import mars.sqlite3.db.DatabaseHelper; 4 import android.app.Activity; 5 import android.content.ContentValues; 6 import android.database.Cursor; 7 import android.database.sqlite.SQLiteDatabase; 8 import android.os.Bundle; 9 import android.util.Log; 10 import android.view.View; 11 import android.view.View.OnClickListener; 12 import android.widget.Button; 13  14 public class SQLiteActivity extends Activity { 15   /** Called when the activity is first created. */ 16   private Button createButton; 17   private Button insertButton; 18   private Button updateButton; 19   private Button updateRecordButton; 20   private Button queryButton; 21   @Override 22   public void onCreate(Bundle savedInstanceState) { 23     super.onCreate(savedInstanceState); 24     setContentView(R.layout.main); 25     createButton = (Button)findViewById(R.id.createDatabase); 26     updateButton = (Button)findViewById(R.id.updateDatabase); 27     insertButton = (Button)findViewById(R.id.insert); 28     updateRecordButton = (Button)findViewById(R.id.update); 29     queryButton = (Button)findViewById(R.id.query); 30     createButton.setOnClickListener(new CreateListener()); 31     updateButton.setOnClickListener(new UpdateListener()); 32     insertButton.setOnClickListener(new InsertListener()); 33     updateRecordButton.setOnClickListener(new UpdateRecordListener()); 34     queryButton.setOnClickListener(new QueryListener()); 35   } 36   class CreateListener implements OnClickListener{ 37     @Override 38     public void onClick(View v) { 39       //创建一个DatabaseHelper对象 40       DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db"); 41       //只有调用了DatabaseHelper对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库 42       SQLiteDatabase db = dbHelper.getReadableDatabase(); 43     } 44   } 45   class UpdateListener implements OnClickListener{ 46  47     @Override 48     public void onClick(View v) { 49       DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2); 50       SQLiteDatabase db = dbHelper.getReadableDatabase(); 51     } 52      53   } 54   class InsertListener implements OnClickListener{ 55  56     @Override 57     public void onClick(View v) { 58       //生成ContentValues对象 59       ContentValues values = new ContentValues(); 60       //想该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致 61       values.put("id", 1); 62       values.put("name","zhangsan"); 63       DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2); 64       SQLiteDatabase db = dbHelper.getWritableDatabase(); 65       //调用insert方法,就可以将数据插入到数据库当中 66       db.insert("user", null, values); 67     } 68   } 69   //更新操作就相当于执行SQL语句当中的update语句 70   //UPDATE table_name SET XXCOL=XXX WHERE XXCOL=XX... 71   class UpdateRecordListener implements OnClickListener{ 72  73     @Override 74     public void onClick(View arg0) { 75       // TODO Auto-generated method stub 76       //得到一个可写的SQLiteDatabase对象,这里的version必须为2时才可以,因为刚开始的时候更新为了2,如果为1的话会出现空异常错误 77       DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2); 78       SQLiteDatabase db = dbHelper.getWritableDatabase(); 79       ContentValues values = new ContentValues(); 80       values.put("name", "zhangsanfeng"); 81       //第一个参数是要更新的表名 82       //第二个参数是一个ContentValeus对象 83       //第三个参数是where子句 84       db.update("user", values, "id=?", new String[]{"1"}); 85     } 86   } 87   class QueryListener implements OnClickListener{ 88  89     @Override 90     public void onClick(View v) { 91       System.out.println("aaa------------------"); 92       Log.d("myDebug", "myFirstDebugMsg"); 93        94       //以下是出错的代码 95       DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2); 96       SQLiteDatabase db = dbHelper.getReadableDatabase(); 97        98       //参数1:表名   99       //参数2:要想显示的列  100       //参数3:where子句  101       //参数4:where子句对应的条件值  102       //参数5:分组方式  103       //参数6:having条件  104       //参数7:排序方式105       Cursor cursor = db.query("user", new String[]{"id","name"}, "id=?", new String[]{"1"}, null, null, null);106       while(cursor.moveToNext()){107         String name = cursor.getString(cursor.getColumnIndex("name"));108         System.out.println("query--->" + name);109       }110       db.close();111     }112   }113   114 }

DatabaseHelper

 1 package mars.sqlite3.db; 2  3 import android.content.Context; 4 import android.database.sqlite.SQLiteDatabase; 5 import android.database.sqlite.SQLiteOpenHelper; 6 import android.database.sqlite.SQLiteDatabase.CursorFactory; 7  8 //DatabaseHelper作为一个访问SQLite的助手类,提供两个方面的功能, 9 //第一,getReadableDatabase(),getWritableDatabase()可以获得SQLiteDatabse对象,通过该对象可以对数据库进行操作10 //第二,提供了onCreate()和onUpgrade()两个回调函数,允许我们在创建和升级数据库时,进行自己的操作11 12 public class DatabaseHelper extends SQLiteOpenHelper {13   14   private static final int VERSION = 1;15   //在SQLiteOepnHelper的子类当中,必须有该构造函数16   public DatabaseHelper(Context context, String name, CursorFactory factory,17       int version) {18     //必须通过super调用父类当中的构造函数19     super(context, name, factory, version);20     // TODO Auto-generated constructor stub21   }22   public DatabaseHelper(Context context,String name){23     this(context,name,VERSION);24   }25   public DatabaseHelper(Context context,String name,int version){26     this(context, name,null,version);27   }28 29   //该函数是在第一次创建数据库的时候执行,实际上是在第一次得到SQLiteDatabse对象的时候,才会调用这个方法30   @Override31   public void onCreate(SQLiteDatabase db) {32     // TODO Auto-generated method stub33     System.out.println("create a Database");34     //execSQL函数用于执行SQL语句35     db.execSQL("create table user(id int,name varchar(20))");36   }37 38   @Override39   public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {40     // TODO Auto-generated method stub41     System.out.println("update a Database");42   }43 44 }

效果截图如下:

查询数据截图:

更新数据然后查询数据截图:

使用命令来查询sqlite数据库

首先打开adb调试,如果打开不成功,说明adb添加到环境变量里面,把adb添加到环境变量里面即可,具体的百度一下,比较简单。

如果出现下面的说明成功:

因为Android是基于Linux内核开发的所以可以使用shell命令进行操作,但是在打开此命令的时候有可能会报错,这时最大的可能就是你的模拟机没有开,开开模拟机就不会有这样的错误:

然后开始使用Linux命令操作sqlite,首先进入data包,然后一直到显示所有的工程名就可以了:

然后进入包来寻找数据库:

进入databases数据库:

注意:这里的ls -l是显示包里面的所有的包的:

然后使用sqlite3进行操作数据库语句:

到这里就结束了,具体的可以自己实践实践。在这里给大家推荐一个个人认为不错的博客:http://blog.csdn.net/codeeer/article/details/30237597