sqlite 数据库简单demo

前端之家收集整理的这篇文章主要介绍了sqlite 数据库简单demo前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Android中数据存储--采用SQLite存储数据及在SDCard中创建数据库

分类Android 进阶 4478人阅读 评论(20) 收藏 举报

sqlite数据库简单的认识

sqlite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起MysqL、Postgresql这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。sqlite第一个Alpha诞生于2000年5月. 至今已经有10个年头,sqlite也迎来了一个版本 sqlite 3已经发布。

sqlite特性

下面是访问sqlite官方网站: http://www.sqlite. org/ 时第一眼看到关于sqlite的特性.

  1. ACID事务   

2. 零配置 – 无需安装和管理配置   

3. 储存在单一磁盘文件中的一个完整的数据库   

4. 数据库文件可以在不同字节顺序的机器间自由的共享   

5. 支持数据库大小至2TB   

6. 足够小,大致3万行C代码,250K   

7. 比一些流行的数据库在大部分普通数据库操作要快   

8. 简单,轻松的API   

9. 包含TCL绑定,同时通过Wrapper支持其他语言的绑定   

10. 良好注释的源代码,并且有着90%以上的测试覆盖率   

11. 独立: 没有额外依赖   

12. Source完全的Open,你可以用于任何用途,包括出售它   

13. 支持多种开发语言,C,PHP,Perl,Java,ASP .NET,Python

下面我以一个完整的Demo例子来展示对sqlite数据库操作,包括数据库表的增、删、改、查等基本操作。下面的一个截图是该演示Demo的项目框架图:

通过上面的截图可以看到该项目src目录下包含两个类:MainActivity.java 和 MysqLiteOpenHelper.java 。其中MysqLiteOpenHelper.java是对数据库操作辅助类。

布局文件main.xml的代码

[c-sharp] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent">
  6. <TextViewandroid:id="@+id/tv_title"
  7. android:layout_width="fill_parent"android:layout_height="wrap_content"
  8. android:text="Hello,WelcometoAndy'sblog!"android:textSize="16sp"/>
  9. <Buttonandroid:id="@+id/newTable"android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"android:text="1.新建数据表"/>
  11. <Buttonandroid:id="@+id/addOne"android:layout_width="fill_parent"
  12. android:layout_height="wrap_content"android:text="2.插入一条记录"/>
  13. <Buttonandroid:id="@+id/query"android:layout_width="fill_parent"
  14. android:layout_height="wrap_content"android:text="3.查询数据库"/>
  15. <Buttonandroid:id="@+id/editOne"android:layout_width="fill_parent"
  16. android:layout_height="wrap_content"android:text="4.修改一条记录"/>
  17. <Buttonandroid:id="@+id/deleteOne"android:layout_width="fill_parent"
  18. android:layout_height="wrap_content"android:text="5.删除一条记录"/>
  19. <Buttonandroid:id="@+id/deleteTable"android:layout_width="fill_parent"
  20. android:layout_height="wrap_content"android:text="6.删除数据表"/>
  21. <TextViewandroid:id="@+id/tv_result"
  22. android:layout_width="fill_parent"android:layout_height="wrap_content"
  23. android:text="测试显示的结果"android:textSize="16sp"/>
  24. </LinearLayout>

MainActivity.java代码

copy
    packagecom.andyidea.sqlite;
  1. importjava.io.File;
  2. importjava.io.IOException;
  3. importandroid.app.Activity;
  4. importandroid.content.ContentValues;
  5. importandroid.database.Cursor;
  6. importandroid.database.sqlite.sqliteDatabase;
  7. importandroid.os.Bundle;
  8. importandroid.view.View;
  9. importandroid.view.View.OnClickListener;
  10. importandroid.widget.Button;
  11. importandroid.widget.TextView;
  12. importandroid.widget.Toast;
  13. publicclassMainActivityextendsActivity{
  14. privateButtonbtn_newTable,btn_addOne,btn_query,
  15. btn_editOne,btn_deleteOne,btn_deleteTable;
  16. privateTextViewtv;
  17. privateMysqLiteOpenHelpermyOpenHelper;
  18. privatesqliteDatabasesqlitedb;
  19. //----以下两个成员变量是针对在SD卡中存储数据库文件使用----
  20. //privateFilepath=newFile("/sdcard/dbfile");//数据库文件目录
  21. //privateFilef=newFile("/sdcard/dbfile/AndyDemo.db");//数据库文件
  22. /**Calledwhentheactivityisfirstcreated.*/
  23. @Override
  24. voidonCreate(BundlesavedInstanceState){
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.main);
  27. initializeViews();
  28. //实例化默认数据库辅助操作对象
  29. myOpenHelper=newMysqLiteOpenHelper(this);
  30. //----如要在SD卡中创建数据库文件,先做如下的判断和创建相对应的目录和文件----
  31. //if(!path.exists()){//判断目录是否存在
  32. //path.mkdirs();//创建目录
  33. //}
  34. //if(!f.exists()){//判断文件是否存在
  35. //try{
  36. //f.createNewFile();//创建文件
  37. //}catch(IOExceptione){
  38. //e.printStackTrace();
  39. //}
  40. }
  41. /**
  42. *初始化UI界面
  43. */
  44. privatevoidinitializeViews(){
  45. tv=(TextView)findViewById(R.id.tv_result);
  46. btn_newTable=(Button)findViewById(R.id.newTable);
  47. btn_addOne=(Button)findViewById(R.id.addOne);
  48. btn_query=(Button)findViewById(R.id.query);
  49. btn_editOne=(Button)findViewById(R.id.editOne);
  50. btn_deleteOne=(Button)findViewById(R.id.deleteOne);
  51. btn_deleteTable=(Button)findViewById(R.id.deleteTable);
  52. btn_newTable.setOnClickListener(newClickEvent());
  53. btn_addOne.setOnClickListener(newClickEvent());
  54. btn_query.setOnClickListener( btn_editOne.setOnClickListener( btn_deleteOne.setOnClickListener( btn_deleteTable.setOnClickListener(classClickEventimplementsOnClickListener{
  55. voidonClick(Viewv){
  56. try{
  57. //[1]--如果是在默认的路径下创建数据库,那么实例化sqlitedb的操作如下
  58. sqlitedb=myOpenHelper.getWritableDatabase();//实例化数据库
  59. //[2]--如果是在SD卡中创建数据库,那么实例化sqlitedb的操作如下
  60. //sqlitedb=sqliteDatabase.openOrCreateDatabase(f,null);
  61. if(v==btn_newTable){//1.新建数据表
  62. StringTABLE_NAME="andy";
  63. StringID="id";
  64. StringTEXT="text";
  65. Stringstr_sql2="CREATETABLE"+TABLE_NAME+"("+ID
  66. +"INTEGERPRIMARYKEYAUTOINCREMENT,"+TEXT
  67. +"text);";
  68. sqlitedb.execsql(str_sql2);
  69. tv.setText("新建数据表成功!");
  70. }elseif(v==btn_addOne){//2.插入一条记录
  71. //----第1种插入数据的方法----
  72. //ContentValues是一个哈希表HashMap,key值是对应数据表中字段名称,
  73. //value值是字段的值。可以通过ContentValues的put方法把数据存放到
  74. //ContentValues对象中,然后把数据插入到相对应的数据表中。
  75. ContentValuescv=newContentValues();
  76. cv.put(MysqLiteOpenHelper.TEXT,"新数据");
  77. sqlitedb.insert(MysqLiteOpenHelper.TABLE_NAME,null,cv);
  78. //db.insert(Stringtable,StringnullColumnHack,ContentValuesvalues);方法解说
  79. //publiclonginsert(Stringtable,ContentValuesvalues)
  80. //该方法是向数据表中插入一条记录
  81. //[1]参数table:需要插入操作的表名
  82. //[2]参数nullColumnHack:默认null即可,若在插入一行数据时,若没有指定某列的值,
  83. //则默认使用null值传入。
  84. //[3]参数values:插入的数据
  85. //----第2种插入数据的方法----
  86. //StringINSERT_DATA=
  87. //"INSERTINTOandy(id,text)values(1,'第2种插入数据的方法')";
  88. //sqlitedb.execsql(INSERT_DATA);
  89. tv.setText("添加新数据成功!");
  90. }if(v==btn_query){//3.查询数据库
  91. Cursorcur=sqlitedb.rawQuery("SELECT*FROM"+MysqLiteOpenHelper.TABLE_NAME,null);
  92. if(cur!=null){
  93. Stringtemp="";
  94. inti=0;
  95. while(cur.moveToNext()){
  96. temp+=cur.getString(0);//0代表数据列的第一列,即id
  97. temp+=cur.getString(1);//1代表数据列的第二列,即text
  98. i++;
  99. temp+="/n";//定义显示数据的格式,一行一个数据
  100. }
  101. tv.setText(temp);
  102. if(v==btn_editOne){//4.修改一条记录
  103. //----第1种方式修改数据----
  104. "更新后的数据");
  105. sqlitedb.update("andy",cv,"id"+"="+Integer.toString(1),153); background-color:inherit; font-weight:bold">null);
  106. //[1]参数table:需要操作的表名
  107. //[2]参数values:ContentValues
  108. //[3]参数whereClause:更新的条件
  109. //[4]参数whereArgs:更新条件对应的值
  110. //----第2种方式修改数据----
  111. //StringUPDATA_DATA=
  112. //"UPDATEandySETtext='通过sql语句来修改数据'WHEREid=1";
  113. //sqlitedb.execsql(UPDATA_DATA);
  114. tv.setText("修改数据成功!");
  115. if(v==btn_deleteOne){//5.删除一条记录
  116. //----第1种方式删除数据----
  117. sqlitedb.delete("andy",MysqLiteOpenHelper.ID+"=1",0); background-color:inherit">//publicintdelete(Stringtable,StringwhereClause,String[]whereArgs)解说
  118. //[1]参数table:需要操作的表名
  119. //[2]参数whereClause:删除的条件
  120. //[3]参数whereArgs:删除条件对应的值
  121. //----第2种方式删除数据----
  122. //StringDELETE_DATA="DELETEFROMandyWHEREid=1";
  123. //sqlitedb.execsql(DELETE_DATA);
  124. tv.setText("删除数据成功!");
  125. if(v==btn_deleteTable){//6.删除数据表
  126. sqlitedb.execsql("DROPTABLEandy");
  127. tv.setText("删除数据表成功!");
  128. catch(Exceptione){
  129. tv.setText("操作失败");
  130. finally{
  131. sqlitedb.close();
  132. }

MysqLiteOpenHelper辅助器类代码

copy
    importandroid.content.Context;
  1. importandroid.database.sqlite.sqliteOpenHelper;
  2. importandroid.util.Log;
  3. /**
  4. *此类继承了sqliteOpenHelper抽象类,是一个辅助器类,需要
  5. *一个构造函数和重写两个方法
  6. *@authorAndy
  7. */
  8. classMysqLiteOpenHelperextendssqliteOpenHelper{
  9. staticfinalStringDATABASE_NAME="AndyDemo.db";//数据库
  10. staticfinalintVERSION=1;//版本号
  11. staticfinalStringTABLE_NAME="andy";//表名
  12. staticfinalStringID="id";
  13. staticfinalStringTEXT="text";
  14. publicMysqLiteOpenHelper(Contextcontext){
  15. super(context,DATABASE_NAME,VERSION);
  16. *在数据库第一次生成的时候会调用这个方法,同时我们在这个方法里边生成数据库
  17. voidonCreate(sqliteDatabasedb){
  18. //创建数据表的操作
  19. Stringstrsql="CREATETABLE"+TABLE_NAME+"("+ID
  20. +TEXT+"text);";
  21. db.execsql(strsql);
  22. *更新或者升级数据库的时候会自动调用这个方法,一般我们会在这个方法
  23. *删除数据表,然后再创建新的数据表操作。
  24. voidonUpgrade(sqliteDatabasedb,153); background-color:inherit; font-weight:bold">intoldVersion,153); background-color:inherit; font-weight:bold">intnewVersion){
  25. Log.e("AndyDemo","onUpgrade");
  26. }

当我们需要把数据库创建在SDCard中时,需要在AndroidManifest.xml文件添加对SDCard操作的权限,如下:

copy
    <uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
  1. <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

通过以上步骤的操作,对sqlite数据库的操作有了大概的认识。下面我们来看看程序运行的效果

由于该Demo的代码比较多,需要该源码的请到资源中下载:http://download.csdn.net/detail/cjjky/4236087,谢谢。

欢迎大家关注 ^-^

原文链接:/sqlite/201363.html

猜你在找的Sqlite相关文章