加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

SQLite数据库简单的认识

发布时间:2020-12-12 20:35:58 所属栏目:百科 来源:网络整理
导读:SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,
01<?xmlversion="1.0"encoding="utf-8"?> 02<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"03android:orientation="vertical"04android:layout_width="fill_parent"05android:layout_height="fill_parent"> 06<TextViewandroid:id="@+id/tv_title"07android:layout_width="fill_parent"android:layout_height="wrap_content"08android:text="Hello,Welcome to Andy's blog!"android:textSize="16sp"/> 0910<Buttonandroid:id="@+id/newTable"android:layout_width="fill_parent"11android:layout_height="wrap_content"android:text="1.新建数据表"/> 12<Buttonandroid:id="@+id/addOne"android:layout_width="fill_parent"13android:layout_height="wrap_content"android:text="2.插入一条记录"/> 14<Buttonandroid:id="@+id/query"android:layout_width="fill_parent"15android:layout_height="wrap_content"android:text="3.查询数据库"/> 16<Buttonandroid:id="@+id/editOne"android:layout_width="fill_parent"17android:layout_height="wrap_content"android:text="4.修改一条记录"/> 18<Buttonandroid:id="@+id/deleteOne"android:layout_width="fill_parent"19android:layout_height="wrap_content"android:text="5.删除一条记录"/> 20<Buttonandroid:id="@+id/deleteTable"android:layout_width="fill_parent"21android:layout_height="wrap_content"android:text="6.删除数据表"/> 2223<TextViewandroid:id="@+id/tv_result"24android:layout_width="fill_parent"android:layout_height="wrap_content"25android:text="测试显示的结果"android:textSize="16sp"/> 2627</LinearLayout> MainActivity.java代码: view source print ? 001package com.andyidea.sqlite; 002import java.io.File; 003import java.io.IOException; 004import android.app.Activity; 005import android.content.ContentValues; 006import android.database.Cursor; 007import android.database.sqlite.SQLiteDatabase; 008import android.os.Bundle; 009import android.view.View; 010import android.view.View.OnClickListener; 011import android.widget.Button; 012import android.widget.TextView; 013import android.widget.Toast; 014public classMainActivity extends Activity { 015privateButton btn_newTable,btn_addOne,btn_query,016btn_editOne,btn_deleteOne,btn_deleteTable; 017privateTextView tv; 018privateMySQLiteOpenHelper myOpenHelper; 019privateSQLiteDatabase sqlitedb; 020021//----以下两个成员变量是针对在SD卡中存储数据库文件使用---- 022//private File path = new File("/sdcard/dbfile"); //数据库文件目录 023//private File f = new File("/sdcard/dbfile/AndyDemo.db"); //数据库文件 024025/** Called when the activity is first created. */026@Override 027publicvoidonCreate(Bundle savedInstanceState) { 028super.onCreate(savedInstanceState); 029setContentView(R.layout.main); 030031initializeViews(); 032033//实例化默认数据库辅助操作对象 034myOpenHelper = newMySQLiteOpenHelper(this); 035036//----如要在SD卡中创建数据库文件,先做如下的判断和创建相对应的目录和文件---- 037//if(!path.exists()){ //判断目录是否存在 038// path.mkdirs(); //创建目录 039//} 040//if(!f.exists()){ //判断文件是否存在 041// try{ 042// f.createNewFile(); //创建文件 043// }catch(IOException e){ 044// e.printStackTrace(); 045// } 046//} 047} 048049/** 050* 初始化UI界面 051*/052privatevoidinitializeViews(){ 053tv = (TextView)findViewById(R.id.tv_result); 054btn_newTable = (Button)findViewById(R.id.newTable); 055btn_addOne = (Button)findViewById(R.id.addOne); 056btn_query = (Button)findViewById(R.id.query); 057btn_editOne = (Button)findViewById(R.id.editOne); 058btn_deleteOne = (Button)findViewById(R.id.deleteOne); 059btn_deleteTable = (Button)findViewById(R.id.deleteTable); 060061btn_newTable.setOnClickListener(newClickEvent()); 062btn_addOne.setOnClickListener(newClickEvent()); 063btn_query.setOnClickListener(newClickEvent()); 064btn_editOne.setOnClickListener(newClickEvent()); 065btn_deleteOne.setOnClickListener(newClickEvent()); 066btn_deleteTable.setOnClickListener(newClickEvent()); 067} 068069classClickEvent implements OnClickListener{ 070@Override 071publicvoidonClick(View v) { 072try{ 073//[1]--如果是在默认的路径下创建数据库,那么实例化sqlitedb的操作如下 074sqlitedb = myOpenHelper.getWritableDatabase(); //实例化数据库 075076//[2]--如果是在SD卡中创建数据库,那么实例化sqlitedb的操作如下 077//sqlitedb = SQLiteDatabase.openOrCreateDatabase(f,null); 078079if(v == btn_newTable){ //1.新建数据表 080String TABLE_NAME = "andy"; 081String ID = "id"; 082String TEXT = "text"; 083String str_sql2 = "CREATE TABLE "+ TABLE_NAME + "("+ ID 084+ " INTEGER PRIMARY KEY AUTOINCREMENT," + TEXT 085+ " text );"; 086sqlitedb.execSQL(str_sql2); 087tv.setText("新建数据表成功!"); 088089}elseif(v == btn_addOne){ //2.插入一条记录 090//----第1种插入数据的方法---- 091//ContentValues是一个哈希表HashMap,key值是对应数据表中字段名称,092//value值是字段的值。可以通过ContentValues的put方法把数据存放到 093//ContentValues对象中,然后把数据插入到相对应的数据表中。 094ContentValues cv = newContentValues(); 095cv.put(MySQLiteOpenHelper.TEXT,"新数据"); 096sqlitedb.insert(MySQLiteOpenHelper.TABLE_NAME,null,cv); 097//db.insert(String table,String nullColumnHack,ContentValues values);方法解说 098//public long insert (String table,ContentValues values) 099//该方法是向数据表中插入一条记录 100//[1]参数table:需要插入操作的表名 101//[2]参数nullColumnHack:默认null即可,若在插入一行数据时,若没有指定某列的值, 102// 则默认使用null值传入。 103//[3]参数values:插入的数据 104105//----第2种插入数据的方法---- 106// String INSERT_DATA = 107// "INSERT INTO andy (id,text) values (1,'第2种插入数据的方法')"; 108// sqlitedb.execSQL(INSERT_DATA); 109110tv.setText("添加新数据成功!"); 111112}elseif(v == btn_query){ //3.查询数据库 113Cursor cur = sqlitedb.rawQuery("SELECT * FROM "+MySQLiteOpenHelper.TABLE_NAME,null); 114if(cur != null){ 115String temp = ""; 116inti = 0; 117while(cur.moveToNext()){ 118temp += cur.getString(0); //0代表数据列的第一列,即id 119temp += cur.getString(1); //1代表数据列的第二列,即text 120i++; 121temp += "/n"; //定义显示数据的格式,一行一个数据 122} 123tv.setText(temp); 124125} 126}elseif(v == btn_editOne){ //4.修改一条记录 127//----第1种方式修改数据---- 128ContentValues cv = newContentValues(); 129cv.put(MySQLiteOpenHelper.TEXT,"更新后的数据"); 130sqlitedb.update("andy",cv,"id "+ "="+ Integer.toString(1),null); 131//[1]参数table:需要操作的表名 132//[2]参数values:ContentValues 133//[3]参数whereClause:更新的条件 134//[4]参数whereArgs:更新条件对应的值 135136//----第2种方式修改数据---- 137// String UPDATA_DATA = 138// "UPDATE andy SET text='通过SQL语句来修改数据' WHERE id=1"; 139// sqlitedb.execSQL(UPDATA_DATA); 140tv.setText("修改数据成功!"); 141142}elseif(v == btn_deleteOne){ //5.删除一条记录 143//----第1种方式删除数据---- 144sqlitedb.delete("andy",MySQLiteOpenHelper.ID + "= 1",null); 145//public int delete(String table,String whereClause,String[] whereArgs)解说 146//[1]参数table:需要操作的表名 147//[2]参数whereClause:删除的条件 148//[3]参数whereArgs:删除条件对应的值 149150//----第2种方式删除数据---- 151//String DELETE_DATA = "DELETE FROM andy WHERE id=1"; 152//sqlitedb.execSQL(DELETE_DATA); 153tv.setText("删除数据成功!"); 154155}elseif(v == btn_deleteTable){ //6.删除数据表 156sqlitedb.execSQL("DROP TABLE andy"); 157tv.setText("删除数据表成功!"); 158159} 160}catch(Exception e){ 161tv.setText("操作失败"); 162}finally{ 163sqlitedb.close(); 164} 165} 166167} 168} MySQLiteOpenHelper辅助器类代码: view source print ? 01package com.andyidea.sqlite; 02import android.content.Context; 03import android.database.sqlite.SQLiteDatabase; 04import android.database.sqlite.SQLiteOpenHelper; 05import android.util.Log; 06/** 07* 此类继承了SQLiteOpenHelper抽象类,是一个辅助器类,需要 08* 一个构造函数和重写两个方法。 09* @author Andy 10*/11public classMySQLiteOpenHelper extendsSQLiteOpenHelper { 12publicstaticfinal String DATABASE_NAME = "AndyDemo.db"; //数据库名 13publicstaticfinal intVERSION = 1; //版本号 14publicstaticfinal String TABLE_NAME = "andy"; //表名 15publicstaticfinal String ID = "id"; 16publicstaticfinal String TEXT = "text"; 1718publicMySQLiteOpenHelper(Context context) { 19super(context,DATABASE_NAME,null,VERSION); 20} 21/** 22* 在数据库第一次生成的时候会调用这个方法,同时我们在这个方法里边生成数据库表 23*/24@Override25publicvoidonCreate(SQLiteDatabase db) { 26//创建数据表的操作 27String strSQL = "CREATE TABLE " + TABLE_NAME + "(" + ID 28+ " INTEGER PRIMARY KEY AUTOINCREMENT," + TEXT + " text );"; 2930db.execSQL(strSQL); 31} 32/** 33* 更新或者升级数据库的时候会自动调用这个方法,一般我们会在这个方法中 34* 删除数据表,然后再创建新的数据表操作。 35*/36@Override37publicvoidonUpgrade(SQLiteDatabase db,intoldVersion,intnewVersion) { 38Log.e("AndyDemo","onUpgrade"); 39} 40} 当我们需要把数据库创建在SDCard中时,需要在AndroidManifest.xml文件中添加对SDCard操作的权限,如下: view source print ? 1<uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> 2<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

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

由于该Demo的代码比较多,需要该源码的可以发邮件给我索取。邮箱:Chenjunjun.ZJ@gmail.com

欢迎大家关注 ^-^

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

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的代码:

view source print ?
    推荐文章
      热点阅读