sqlite 数据库简单demo

sqlite 数据库简单demo,第1张

概述Android中数据存储--采用SQLite存储数据及在SDCard中创建数据库 分类: Android 进阶 2011-06-30 23:30  4478人阅读  评论(20)  收藏  举报 存储 android sqlite 数据库 layout string SQLite数据库简单的认识        SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌 Android中数据存储--采用SQLite存储数据及在SDCard中创建数据库 分类:Android 进阶 2011-06-30 23:30 4478人阅读 评论(20) 收藏 举报 存储 android sqlite 数据库 layout string

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 <?xmlversion="1.0"enCoding="utf-8"?> <linearLayoutxmlns:androID="http://schemas.androID.com/apk/res/androID" androID:orIEntation="vertical" androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent"> <TextVIEwandroID:ID="@+ID/tv_Title" androID:layout_wIDth="fill_parent"androID:layout_height="wrap_content" androID:text="Hello,WelcometoAndy'sblog!"androID:textSize="16sp"/> <buttonandroID:ID="@+ID/newtable"androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content"androID:text="1.新建数据表"/> <buttonandroID:ID="@+ID/addOne"androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content"androID:text="2.插入一条记录"/> <buttonandroID:ID="@+ID/query"androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content"androID:text="3.查询数据库"/> <buttonandroID:ID="@+ID/editOne"androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content"androID:text="4.修改一条记录"/> <buttonandroID:ID="@+ID/deleteOne"androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content"androID:text="5.删除一条记录"/> <buttonandroID:ID="@+ID/deletetable"androID:layout_wIDth="fill_parent" androID:layout_height="wrap_content"androID:text="6.删除数据表"/> <TextVIEwandroID:ID="@+ID/tv_result" androID:layout_wIDth="fill_parent"androID:layout_height="wrap_content" androID:text="测试显示的结果"androID:textSize="16sp"/> </linearLayout>

MainActivity.java代码:

copy packagecom.andyIDea.sqlite; importjava.io.file; importjava.io.IOException; importandroID.app.Activity; importandroID.content.ContentValues; importandroID.database.Cursor; importandroID.database.sqlite.sqliteDatabase; importandroID.os.Bundle; importandroID.vIEw.VIEw; importandroID.vIEw.VIEw.OnClickListener; importandroID.Widget.button; importandroID.Widget.TextVIEw; importandroID.Widget.Toast; publicclassMainActivityextendsActivity{ privatebuttonbtn_newtable,btn_addOne,btn_query, btn_editOne,btn_deleteOne,btn_deletetable; privateTextVIEwtv; privateMysqLiteOpenHelpermyOpenHelper; privatesqliteDatabasesqlitedb; //----以下两个成员变量是针对在SD卡中存储数据库文件使用---- //privatefilepath=newfile("/sdcard/dbfile");//数据库文件目录 //privatefilef=newfile("/sdcard/dbfile/AndyDemo.db");//数据库文件 /**CalleDWhentheactivityisfirstcreated.*/ @OverrIDe voIDonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentVIEw(R.layout.main); initializeVIEws(); //实例化默认数据库辅助 *** 作对象 myOpenHelper=newMysqLiteOpenHelper(this); //----如要在SD卡中创建数据库文件,先做如下的判断和创建相对应的目录和文件---- //if(!path.exists()){//判断目录是否存在 //path.mkdirs();//创建目录 //} //if(!f.exists()){//判断文件是否存在 //try{ //f.createNewfile();//创建文件 //}catch(IOExceptione){ //e.printstacktrace(); //} } /** *初始化UI界面 */ privatevoIDinitializeVIEws(){ tv=(TextVIEw)findVIEwByID(R.ID.tv_result); btn_newtable=(button)findVIEwByID(R.ID.newtable); btn_addOne=(button)findVIEwByID(R.ID.addOne); btn_query=(button)findVIEwByID(R.ID.query); btn_editOne=(button)findVIEwByID(R.ID.editOne); btn_deleteOne=(button)findVIEwByID(R.ID.deleteOne); btn_deletetable=(button)findVIEwByID(R.ID.deletetable); btn_newtable.setonClickListener(newClickEvent()); btn_addOne.setonClickListener(newClickEvent()); btn_query.setonClickListener( btn_editOne.setonClickListener( btn_deleteOne.setonClickListener( btn_deletetable.setonClickListener(classClickEventimplementsOnClickListener{ voIDonClick(VIEwv){ try{ //[1]--如果是在默认的路径下创建数据库,那么实例化sqlitedb的 *** 作如下 sqlitedb=myOpenHelper.getWritableDatabase();//实例化数据库 //[2]--如果是在SD卡中创建数据库,那么实例化sqlitedb的 *** 作如下 //sqlitedb=sqliteDatabase.openorCreateDatabase(f,null); if(v==btn_newtable){//1.新建数据表 Stringtable_name="andy"; StringID="ID"; StringTEXT="text"; Stringstr_sql2="CREATEtable"+table_name+"("+ID +"INTEGERPRIMARYKEYautoINCREMENT,"+TEXT +"text);"; sqlitedb.execsql(str_sql2); tv.setText("新建数据表成功!"); }elseif(v==btn_addOne){//2.插入一条记录 //----第1种插入数据的方法---- //ContentValues是一个哈希表HashMap,key值是对应数据表中字段名称, //value值是字段的值。可以通过ContentValues的put方法把数据存放到 //ContentValues对象中,然后把数据插入到相对应的数据表中。 ContentValuescv=newContentValues(); cv.put(MysqLiteOpenHelper.TEXT,"新数据"); sqlitedb.insert(MysqLiteOpenHelper.table_name,null,cv); //db.insert(Stringtable,StringnullColumnHack,ContentValuesvalues);方法解说 //publiclonginsert(Stringtable,ContentValuesvalues) //该方法是向数据表中插入一条记录 //[1]参数table:需要插入 *** 作的表名 //[2]参数nullColumnHack:默认null即可,若在插入一行数据时,若没有指定某列的值, //则默认使用null值传入。 //[3]参数values:插入的数据 //----第2种插入数据的方法---- //StringINSERT_DATA= //"INSERTINTOandy(ID,text)values(1,'第2种插入数据的方法')"; //sqlitedb.execsql(INSERT_DATA); tv.setText("添加新数据成功!"); }if(v==btn_query){//3.查询数据库 Cursorcur=sqlitedb.rawquery("SELECT*FROM"+MysqLiteOpenHelper.table_name,null); if(cur!=null){ Stringtemp=""; inti=0; while(cur.movetoNext()){ temp+=cur.getString(0);//0代表数据列的第一列,即ID temp+=cur.getString(1);//1代表数据列的第二列,即text i++; temp+="/n";//定义显示数据的格式,一行一个数据 } tv.setText(temp); if(v==btn_editOne){//4.修改一条记录 //----第1种方式修改数据---- "更新后的数据"); sqlitedb.update("andy",cv,"ID"+"="+Integer.toString(1),153); background-color:inherit; Font-weight:bold">null); //[1]参数table:需要 *** 作的表名 //[2]参数values:ContentValues //[3]参数whereClause:更新的条件 //[4]参数whereArgs:更新条件对应的值 //----第2种方式修改数据---- //StringUPDATA_DATA= //"UPDATEandySETtext='通过SQL语句来修改数据'WHEREID=1"; //sqlitedb.execsql(UPDATA_DATA); tv.setText("修改数据成功!"); if(v==btn_deleteOne){//5.删除一条记录 //----第1种方式删除数据---- sqlitedb.delete("andy",MysqLiteOpenHelper.ID+"=1",0); background-color:inherit">//publicintdelete(Stringtable,StringwhereClause,String[]whereArgs)解说 //[1]参数table:需要 *** 作的表名 //[2]参数whereClause:删除的条件 //[3]参数whereArgs:删除条件对应的值 //----第2种方式删除数据---- //StringDELETE_DATA="DELETEFROMandyWHEREID=1"; //sqlitedb.execsql(DELETE_DATA); tv.setText("删除数据成功!"); if(v==btn_deletetable){//6.删除数据表 sqlitedb.execsql("DROPtableandy"); tv.setText("删除数据表成功!"); catch(Exceptione){ tv.setText(" *** 作失败"); finally{ sqlitedb.close(); }

MysqLiteOpenHelper辅助器类代码:

copy importandroID.content.Context; importandroID.database.sqlite.sqliteOpenHelper; importandroID.util.Log; /** *此类继承了sqliteOpenHelper抽象类,是一个辅助器类,需要 *一个构造函数和重写两个方法。 *@authorAndy */ classMysqLiteOpenHelperextendssqliteOpenHelper{ staticfinalStringDATABASE_name="AndyDemo.db";//数据库名 staticfinalintVERSION=1;//版本号 staticfinalStringtable_name="andy";//表名 staticfinalStringID="ID"; staticfinalStringTEXT="text"; publicMysqLiteOpenHelper(Contextcontext){ super(context,DATABASE_name,VERSION); *在数据库第一次生成的时候会调用这个方法,同时我们在这个方法里边生成数据库表 voIDonCreate(sqliteDatabasedb){ //创建数据表的 *** 作 Stringstrsql="CREATEtable"+table_name+"("+ID +TEXT+"text);"; db.execsql(strsql); *更新或者升级数据库的时候会自动调用这个方法,一般我们会在这个方法中 *删除数据表,然后再创建新的数据表 *** 作。 voIDonUpgrade(sqliteDatabasedb,153); background-color:inherit; Font-weight:bold">intoldVersion,153); background-color:inherit; Font-weight:bold">intnewVersion){ Log.e("AndyDemo","onUpgrade"); }

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

copy <uses-permissionandroID:name="androID.permission.MOUNT_UNMOUNT_fileSYstemS"/> <uses-permissionandroID:name="androID.permission.WRITE_EXTERNAL_STORAGE"/>

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

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

欢迎大家关注 ^-^

总结

以上是内存溢出为你收集整理的sqlite 数据库简单demo全部内容,希望文章能够帮你解决sqlite 数据库简单demo所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1174323.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存