Android之操作SQLite
2016-05-09 10:03
471 查看
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的常用方法
下面就在代码中查看详细的解释:
SQLiteActivity
DatabaseHelper
效果截图如下:
![](http://images2015.cnblogs.com/blog/658506/201605/658506-20160509093424515-1178216583.png)
查询数据截图:
![](http://images2015.cnblogs.com/blog/658506/201605/658506-20160509093754452-1165557091.png)
更新数据然后查询数据截图:
![](http://images2015.cnblogs.com/blog/658506/201605/658506-20160509093830015-2028369765.png)
使用命令来查询sqlite数据库
首先打开adb调试,如果打开不成功,说明adb添加到环境变量里面,把adb添加到环境变量里面即可,具体的百度一下,比较简单。
如果出现下面的说明成功:
![](http://images2015.cnblogs.com/blog/658506/201605/658506-20160509095339234-1340282397.png)
因为Android是基于Linux内核开发的所以可以使用shell命令进行操作,但是在打开此命令的时候有可能会报错,这时最大的可能就是你的模拟机没有开,开开模拟机就不会有这样的错误:
![](http://images2015.cnblogs.com/blog/658506/201605/658506-20160509095534827-383182424.png)
然后开始使用Linux命令操作sqlite,首先进入data包,然后一直到显示所有的工程名就可以了:
![](http://images2015.cnblogs.com/blog/658506/201605/658506-20160509095707718-1620619559.png)
然后进入包来寻找数据库:
![](http://images2015.cnblogs.com/blog/658506/201605/658506-20160509095800780-299832556.png)
进入databases数据库:
![](http://images2015.cnblogs.com/blog/658506/201605/658506-20160509095906827-1420139428.png)
注意:这里的ls -l是显示包里面的所有的包的:
然后使用sqlite3进行操作数据库语句:
![](http://images2015.cnblogs.com/blog/658506/201605/658506-20160509100104046-1869251026.png)
![](http://images2015.cnblogs.com/blog/658506/201605/658506-20160509100133702-1533660321.png)
到这里就结束了,具体的可以自己实践实践。在这里给大家推荐一个个人认为不错的博客:http://blog.csdn.net/codeeer/article/details/30237597
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的常用方法
[align=left]方法名称[/align] | [align=left]方法表示含义[/align] |
[align=left]openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory)[/align] | [align=left]打开或创建数据库[/align] |
[align=left]insert(String table,String nullColumnHack,ContentValues values)[/align] | [align=left]插入一条记录[/align] |
[align=left]delete(String table,String whereClause,String[] whereArgs)[/align] | [align=left]删除一条记录[/align] |
[align=left]query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy)[/align] | [align=left]查询一条记录[/align] |
[align=left]update(String table,ContentValues values,String whereClause,String[] whereArgs)[/align] | [align=left]修改记录[/align] |
[align=left]execSQL(String sql)[/align] | [align=left]执行一条SQL语句[/align] |
[align=left]close()[/align] | [align=left]关闭数据库[/align] |
SQLiteActivity
package mars.sqlite3; import mars.sqlite3.db.DatabaseHelper; import android.app.Activity; import android.content.ContentValues; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Bundle; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class SQLiteActivity extends Activity { /** Called when the activity is first created. */ private Button createButton; private Button insertButton; private Button updateButton; private Button updateRecordButton; private Button queryButton; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); createButton = (Button)findViewById(R.id.createDatabase); updateButton = (Button)findViewById(R.id.updateDatabase); insertButton = (Button)findViewById(R.id.insert); updateRecordButton = (Button)findViewById(R.id.update); queryButton = (Button)findViewById(R.id.query); createButton.setOnClickListener(new CreateListener()); updateButton.setOnClickListener(new UpdateListener()); insertButton.setOnClickListener(new InsertListener()); updateRecordButton.setOnClickListener(new UpdateRecordListener()); queryButton.setOnClickListener(new QueryListener()); } class CreateListener implements OnClickListener{ @Override public void onClick(View v) { //创建一个DatabaseHelper对象 DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db"); //只有调用了DatabaseHelper对象的getReadableDatabase()方法,或者是getWritableDatabase()方法之后,才会创建,或打开一个数据库 SQLiteDatabase db = dbHelper.getReadableDatabase(); } } class UpdateListener implements OnClickListener{ @Override public void onClick(View v) { DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2); SQLiteDatabase db = dbHelper.getReadableDatabase(); } } class InsertListener implements OnClickListener{ @Override public void onClick(View v) { //生成ContentValues对象 ContentValues values = new ContentValues(); //想该对象当中插入键值对,其中键是列名,值是希望插入到这一列的值,值必须和数据库当中的数据类型一致 values.put("id", 1); values.put("name","zhangsan"); DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2); SQLiteDatabase db = dbHelper.getWritableDatabase(); //调用insert方法,就可以将数据插入到数据库当中 db.insert("user", null, values); } } //更新操作就相当于执行SQL语句当中的update语句 //UPDATE table_name SET XXCOL=XXX WHERE XXCOL=XX... class UpdateRecordListener implements OnClickListener{ @Override public void onClick(View arg0) { // TODO Auto-generated method stub //得到一个可写的SQLiteDatabase对象,这里的version必须为2时才可以,因为刚开始的时候更新为了2,如果为1的话会出现空异常错误 DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2); SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", "zhangsanfeng"); //第一个参数是要更新的表名 //第二个参数是一个ContentValeus对象 //第三个参数是where子句 db.update("user", values, "id=?", new String[]{"1"}); } } class QueryListener implements OnClickListener{ @Override public void onClick(View v) { System.out.println("aaa------------------"); Log.d("myDebug", "myFirstDebugMsg"); //以下是出错的代码 DatabaseHelper dbHelper = new DatabaseHelper(SQLiteActivity.this,"test_mars_db",2); SQLiteDatabase db = dbHelper.getReadableDatabase(); //参数1:表名 //参数2:要想显示的列 //参数3:where子句 //参数4:where子句对应的条件值 //参数5:分组方式 //参数6:having条件 //参数7:排序方式 Cursor cursor = db.query("user", new String[]{"id","name"}, "id=?", new String[]{"1"}, null, null, null); while(cursor.moveToNext()){ String name = cursor.getString(cursor.getColumnIndex("name")); System.out.println("query--->" + name); } db.close(); } } }
DatabaseHelper
package mars.sqlite3.db; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteDatabase.CursorFactory; //DatabaseHelper作为一个访问SQLite的助手类,提供两个方面的功能, //第一,getReadableDatabase(),getWritableDatabase()可以获得SQLiteDatabse对象,通过该对象可以对数据库进行操作 //第二,提供了onCreate()和onUpgrade()两个回调函数,允许我们在创建和升级数据库时,进行自己的操作 public class DatabaseHelper extends SQLiteOpenHelper { private static final int VERSION = 1; //在SQLiteOepnHelper的子类当中,必须有该构造函数 public DatabaseHelper(Context context, String name, CursorFactory factory, int version) { //必须通过super调用父类当中的构造函数 super(context, name, factory, version); // TODO Auto-generated constructor stub } public DatabaseHelper(Context context,String name){ this(context,name,VERSION); } public DatabaseHelper(Context context,String name,int version){ this(context, name,null,version); } //该函数是在第一次创建数据库的时候执行,实际上是在第一次得到SQLiteDatabse对象的时候,才会调用这个方法 @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub System.out.println("create a Database"); //execSQL函数用于执行SQL语句 db.execSQL("create table user(id int,name varchar(20))"); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub System.out.println("update a Database"); } }
效果截图如下:
![](http://images2015.cnblogs.com/blog/658506/201605/658506-20160509093424515-1178216583.png)
查询数据截图:
![](http://images2015.cnblogs.com/blog/658506/201605/658506-20160509093754452-1165557091.png)
更新数据然后查询数据截图:
![](http://images2015.cnblogs.com/blog/658506/201605/658506-20160509093830015-2028369765.png)
使用命令来查询sqlite数据库
首先打开adb调试,如果打开不成功,说明adb添加到环境变量里面,把adb添加到环境变量里面即可,具体的百度一下,比较简单。
如果出现下面的说明成功:
![](http://images2015.cnblogs.com/blog/658506/201605/658506-20160509095339234-1340282397.png)
因为Android是基于Linux内核开发的所以可以使用shell命令进行操作,但是在打开此命令的时候有可能会报错,这时最大的可能就是你的模拟机没有开,开开模拟机就不会有这样的错误:
![](http://images2015.cnblogs.com/blog/658506/201605/658506-20160509095534827-383182424.png)
然后开始使用Linux命令操作sqlite,首先进入data包,然后一直到显示所有的工程名就可以了:
![](http://images2015.cnblogs.com/blog/658506/201605/658506-20160509095707718-1620619559.png)
然后进入包来寻找数据库:
![](http://images2015.cnblogs.com/blog/658506/201605/658506-20160509095800780-299832556.png)
进入databases数据库:
![](http://images2015.cnblogs.com/blog/658506/201605/658506-20160509095906827-1420139428.png)
注意:这里的ls -l是显示包里面的所有的包的:
然后使用sqlite3进行操作数据库语句:
![](http://images2015.cnblogs.com/blog/658506/201605/658506-20160509100104046-1869251026.png)
![](http://images2015.cnblogs.com/blog/658506/201605/658506-20160509100133702-1533660321.png)
到这里就结束了,具体的可以自己实践实践。在这里给大家推荐一个个人认为不错的博客:http://blog.csdn.net/codeeer/article/details/30237597
相关文章推荐
- Android基础搜集
- 解决android4.4以上获取不到图片路径问题
- Android 6.0 指纹识别功能详细分析(郭元歆)
- android Git使用gitignore建立项目过滤规则
- Android Studio 入门
- Android 内功心法(番外)——写在设计模式前,面对对象编程基础
- Android开发:应用启动后自动创建桌面快捷方式(三星机常见)
- JNI无法传递Android类对象
- android为什么需要签名与数据共享
- Android反选,全选,删除
- Android 编写工具类之Log
- 详解android:scaleType属性
- Android开发中遇到的问题集合(二)--正则表达式及其用法
- Android 文件工具FileUtil
- 【项目源码】- 【模仿知乎日报】模仿知乎日报
- AsyncTask,IntentService工作原理分析&Android线程池
- android中对图片进行切圆,画白边
- android studio 首字母提示 设置 大小写敏感
- Android中免Root实现Hook的Dexposed框架实现原理解析以及如何实现应用的热修复
- Android系列之广播