`
xiehongdong
  • 浏览: 69160 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

SQLite

阅读更多

Android中通过SQLite数据库引擎来实现结构化数据存储。SQLite是一个嵌入式数据库引擎,针对内存等资源有限的设备(如手机、PDA、MP3)提供的一种高效的数据库引擎。

SQLite数据库不想其他的数据库(如Oracle),它没有服务器进程。所有的内容包含在同一个单文件中。该文件是跨平台的,可以自由复制。基于其自身的先天优势,SQLite在嵌入式领域得到广泛应用。Android也没有重复发明“轮子”,而是直接是用了SQLite数据库。

 

 

一、SQLiteDatabase

Android提供了创建和是用SQLite数据库的API。SQLiteDatabase代表一个数据库对象,提供了操作数据库的一些方法,另外还有一个SQLiteOpenHelper工具类提供了更简洁的功能。在Android的SDK目录下有sqlite3工具,我们可以利用它创建数据库、创建表和执行一些SQL语句。下面我们先看看SQLiteDatabase的常用方法。

 

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()

关闭数据库

 

1、打开或者创建数据库

可以使用SQLiteDatabase的静态方法openOrCreateDatabase(String path,SQLiteDatabae.CursorFactory factory)打开或者创建一个数据库,该方法的第一个参数是数据库的创建路径,注意这个路径一定是数据库的全路径。例如/data/data/package/databases/dbname.db。第二个参数是指定返回一个Cursor子类的工厂,如果没有指定(null)则使用默认工厂。

下面的代码创建了一个temp.db数据库

SQLiteDatabase.openOrCreateDatabase("/data/data/com.hualang.test/databases/temp.db",null);

 

2、创建表

创建一张表很简单。首先,编写创建表的SQL语句,然后,调用SQLiteDatabase的execSQL()方法便可以创建一张表了。

下面的代码创建了一张用户表,属性列为:id(主键并且自动增加)、username(用户名称)、password(密码)

private void createTable(SQLiteDatabase db)

{

      //创建表SQL语句

      String sql="create table usertable(id integer primary key autoincrement,username text,password text)";

      //执行SQL语句

      db.execSQL(sql);

}

  

3、插入数据

插入数据有两种方法:一种是调用SQLiteDatabase的insert(String table,String nullColumnHack,ContentValues values)方法,该方法的第一个参数是表名称,第二个参数是空列的默认值,第三个参数是ContentValues类型的一个封装了列名称和列值的Map;令一种方法是编写插入数据的SQL语句,直接调用SQLiteDatabase的execSQL()方法来执行

 

下面的代码演示了如何插入一条记录到数据库。

方法1:

//插入数据

private void insert(SQLiteDatabase db)

{

     //插入数据SQL语句

     String sql="insert into usertable(username,password) values('hualang','123456')";

    //执行SQL语句

     db.execSQL(sql);

}

  

方法2:

private void insert(SQLiteDatabase db)

{

    //实例化常量值

    ContentValues cv = new ContentValues();

    //添加用户名

    cv.put("username","hualang");

    //添加密码

    cv.put("password","123456");

    //插入

    db.insert("usertable",null,cv);

}

  

4、删除数据

和插入数据类似,删除数据也有两种方法:一种是调用SQLiteDatabase的delete(String table,String whereClause,String[] whereArgs)方法,该方法的第一个参数是表名称,第二个参数是删除条件,第三个参数是删除条件值数组;另一种方法是编写删除SQL语句,调用SQLiteDatabase的execSQL()方法来执行删除。

下面代码演示了如何删除记录

方法1:

//删除

private void delete(SQLiteDatabase db)

{

   //删除SQL语句

   String sql = "delete from usertable where id  = 6";

   //执行SQL语句

   db.execSQL(sql);

}

 方法2:

private void delete(SQLiteDatabase db)

{

   //删除条件

   String whereClause = "id=?";

   //删除条件参数

   String[] whereArgs = {String.valueOf(5)};

   //执行删除

   db.delete("usertable",whereClause,whereArgs);

}

  

5、查询数据

查询数据相对比较傲复杂,因为查询可能会带来很多条件。不过熟悉SQL查询的读者都知道这只不过是把查询SQL封装成方法而已。下面看一个查询方法。

public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit);

 各个参数的意义说明:

①table:表名称

②columns:列名称数组

③selection:条件字句,相当于where

④selectionArgs:条件字句,参数数组

⑤groupBy:分组列

⑥having:分组条件

⑦orderBy:排序列

⑧limit:分页查询限制

⑨Cursor:返回值,相当于结果集ResultSet

Cursor是一个游标接口,提供了遍历查询结果的方法,如移动指针方法move(),获得列值方法getString()等.

Cursor游标常用方法

 

方法名称

方法描述

getCount()

总记录条数

isFirst()

判断是否第一条记录

isLast()

判断是否最后一条记录

moveToFirst()

移动到第一条记录

moveToLast()

移动到最后一条记录

move(int offset)

移动到指定记录

moveToNext()

移动到下一条记录

moveToPrevious()

移动到上一条记录

getColumnIndexOrThrow(String columnName)

根据列名称获得列索引

getInt(int columnIndex)

获得指定列索引的int类型值

getString(int columnIndex)

获得指定列缩影的String类型值

 

下面的代码演示了如何查询数据类型

private void query(SQLiteDatabase db)

{

   //查询获得游标

   Cursor c = db.query("usertable",null,null,null,null,null,null);

   //判断游标是否为空

   if(c.moveToFirst())

   {

       //遍历游标

       for(int i=0;i<c.getCount();i++)

       {

            c.move(i);

            //获得ID

            int id = c.getInt(0);

            //获得用户名

            String username=c.getString(1);

            //获得密码

            String password=c.getString(2);

            //输出用户信息

            System.out.println(id+":"+username+":"+password);

       }

   }

}

  

 

6、修改数据

和添加删除相同,修改数据有两种方式,一是调用SQLiteDatabase的update(String table,ContentValues values,String whereClause, String[] whereArgs)方法。该方法的第一个参数是表名称,第二个参数是更行列ContentValues类型的键值对(Map),第三个参数是更新条件(where字句),第四个参数是更新条件数组。而是编写更新的SQL语句,调用SQLiteDatabase的execSQL执行更新。

下面的代码演示了如何更新数据

private void update(SQLiteDatabase db)

{

    //修改SQL语句

    String sql = "update usertable set password = 654321 where id = 1";

    //执行SQL

    db.execSQL(sql);

}

  

方法2:

private void update(SQLiteDatabase db)

{

    //实例化内容值

    ContentValues values = new ContentValues();

    //在values中添加内容

    values.put("password","123321");

    //修改条件

    String whereClause = "id=?";

    //修改添加参数

    String[] whereArgs={String.valuesOf(1)};

    //修改

    db.update("usertable",values,whereClause,whereArgs);

}

  

 二、SQLiteOpenHelper

SQLiteOpenHelper是SQLiteDatabase的一个帮助类,用来管理数据库的创建和版本更新,一般的用法是定义一个类继承之,并实现其抽象方法onCreate(SQLiteDatabase db)和opUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)来创建和更新数据库。

SQLiteOpenHelper常用方法

 

方法名称

方法描述

SQLiteOpenHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version)

构造方法,一般是传递一个要创建的数据库名称name参数

onCreate(SQLiteDatabase db)

创建数据库时调用

onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)

版本更新时调用

getReadableDatabase()

创建或打开一个只读数据库

getWritableDatabase()

创建或打开一个读写数据库

 

例如下面的代码演示

public class MainActivity extends Activity
{
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		//实例化数据库帮助类
		MyDbHelper helper = new MyDbHelper(this);
		//插入
		helper.insert();
		//查询
		helper.query();
	}
	//数据库帮助类
	class MyDbHelper extends SQLiteOpenHelper
	{
		//创建表SQL语句
		private static final String CREATE_TABLE_SQL = 
			"create table usertable(id intger,name text)";
		//SQLiteDatabase实例
		private SQLiteDatabase db;
		//构造方法
		MyDbHelper(Context c)
		{
			super(c,"test.db",null,2);
		}
		public void onCreate(SQLiteDatabase db)
		{
			db.execSQL(CREATE_TABLE_SQL);
		}
		public void onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)
		{

		}
		//插入方法
		private void insert()
		{
			//插入SQL语句
			String sql="insert into usertable(id,name) values(1,'hualang')";
			//执行插入
			getWriteableDatabase().execSQL(sql);
		}
		//查询方法
		private void query()
		{
			//查询获得游标
			Cursor c = getWritableDatabase().query("usertable",null,null,null,null,null,null);
			//判断游标是否为空
			if(c.moveToFirst())
			{
				//遍历游标
				for(int i=0;i<c.getCount();i++)
				{
					c.move(i);
					int id = c.getInt(0);
					String name = c.getString(1);
					System.out.println(id+":"+name);
				}
			}
		}
	}
}
  
分享到:
评论

相关推荐

    SQLite数据库 sqlitedll库文件 sqlite驱动JAR包 sqlite工具

    在Java下连接SQLite数据库 一、下载SQLite数据库的JDBC:http://www.zentus.com/sqlitejdbc/ 二、将下载到的包解压后得到jar包放到%JAVA_HOME%\lib下,并且将其添加到ClassPath系统环境变量中。一定要保证在类路径...

    Delphi使用ASqlite3 连接SQLite上例子

    在IT行业中,数据库管理是至关重要的,而SQLite作为一款轻量级、自包含的数据库引擎,因其高效性和易用性而被广泛应用。本教程将详细讲解如何在Delphi环境中使用ASqlite3控件连接并操作SQLite数据库。ASqlite3是一款...

    sqlite-autoconf.tar.gz_sqlite_sqlite 加密_sqlite3autoconf_wxsqlite

    在标题"sqlite-autoconf.tar.gz_sqlite_sqlite 加密_sqlite3autoconf_wxsqlite"中,我们可以看到与 SQLite 相关的几个关键点:加密、sqlite3autoconf 和 wxSQLite。 1. **SQLite 加密**: SQLite 提供了一个可选的...

    sqlite3.exe绿色版 下载

    SQLite是一款轻型的数据库,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作...

    Inside SQLite(SQLite技术内幕) 原版+个人翻译版

    SQLite是一款开源、轻量级的嵌入式数据库引擎,它被广泛应用于移动设备、桌面系统以及Web应用程序。作为一款自包含、无服务器、零配置、事务性的SQL数据库,SQLite具有高度的可移植性和可靠性,无需数据库管理员即可...

    SQLite 安装包 sqlite3 及sqlite数据库jdbc jar包

    SQLite是一种轻量级的、开源的关系型数据库管理系统,它不需要单独的服务器进程,可以直接嵌入到应用程序中使用,因此在移动设备和小型应用系统中非常流行。SQLite3是SQLite的第三个主要版本,提供了更高的性能、...

    sqlite3文件(sqlite3.dll,sqlite3.h,sqlite3.lib)

    标题提到的"sqlite3文件"主要包括三个关键组成部分:`sqlite3.dll`、`sqlite3.h`和`sqlite3.lib`,它们在开发和运行使用SQLite3的应用程序时起着至关重要的作用。 1. `sqlite3.dll`: 这是一个动态链接库文件,通常...

    sqlite最新编译好的x64库,包括sqlite.dll和sqlite.lib

    SQLite是一款轻量级的、开源的关系型数据库管理系统,它不依赖于任何服务器进程,可以直接嵌入到各种应用程序中。SQLite以其高效、可靠性和易用性而广受开发者喜爱,尤其适用于移动设备和嵌入式系统。这个压缩包包含...

    sqliteodbc驱动sqlite3

    ### SQLiteODBC 驱动 SQLite3:深入解析与应用指南 #### 一、SQLiteODBC简介 SQLiteODBC是一种连接SQLite数据库与支持ODBC(开放式数据库连接)的应用程序之间的桥梁。通过SQLiteODBC,开发人员可以利用ODBC标准...

    sqlite 比较稳定的版本

    SQLite是一款开源、轻型的数据库管理系统,被广泛应用于嵌入式设备、移动应用以及服务器端。标题中的"sqlite 比较稳定的版本"指的是SQLite的一个特定版本,该版本经过广泛的测试和验证,具有较高的稳定性和较低的...

    sqlite3数据库压缩包资源

    一 sqlite3.11.1的PC版本的编译 0. 把源码包拷贝虚拟机目录(不要放到共享目录) 1. tar zxvf sqlite-autoconf-3110100.tar.gz 2. cd sqlite-autoconf-3110100/ 3、sudo ./configure --prefix=/usr/local/sqlite...

    sqlite3.exe

    SQLite3.exe 是 SQLite 数据库引擎的一个命令行接口工具,它允许用户通过文本命令与 SQLite 数据库进行交互。SQLite 是一个开源、轻量级、自包含的 SQL 数据库引擎,广泛应用于嵌入式系统和移动应用中,因为它无需...

    最新版: Sqlite ODBC Driver 0.99991 (SQLite 3.43.2) 安装版和dll版

    网上很难下载到,分享给需要的:sqlite3odbc.dll 属性 文件版本 1.34455.0,0 产品名称 ODBC Driver for SQLite3 3.43.2 产品版本 0.99991 版权 Copyriglt @2004-2023 ,de&gt; 大小 942 KB 修改日期 2023-10-23 21:50 ...

    SQLite4Unity包下载

    SQLite4Unity 是 Unity 中的一个 SQLite 数据库操作工具库,用于在 Unity 项目中访问 SQLite 数据库。它提供了许多可用于创建,查询和更新 SQLite 数据库的功能,而无需编写复杂的 SQL 查询语句。 SQLite4Unity 是...

    SQLiteStudio-2.1.5 非常好用的SQLite编辑工具

    SQLiteStudio-2.1.5 是一款专为SQLite数据库设计的高效、易用的管理工具。SQLite是一款开源、轻量级、自包含的SQL数据库引擎,广泛应用于移动设备、嵌入式系统以及桌面应用程序中。SQLiteStudio作为其配套的图形界面...

    Sqlite的C#通用类和Sqlite工具

    Sqlite是一种轻量级的、开源的嵌入式数据库,广泛应用于各种跨平台的应用程序中,尤其是对于那些不需要服务器环境或者需要快速数据存储的应用。在C#编程中,与Sqlite交互通常需要借助特定的库,例如System.Data....

    sqlite3.h、sqlite3.lib、sqlite3.dll

    在本主题中,我们关注的是SQLite的核心组件——`sqlite3.h`、`sqlite3.lib`和`sqlite3.dll`,这些是开发过程中用于与SQLite交互的关键文件。 1. **sqlite3.h**: 这是一个头文件,包含了SQLite的所有公共API(应用...

    SQLite、SQLitedb数据库查看器

    一款绿色的SQLite文件查看编辑器,支持SQL语句,直接解压后运行文件夹里面的SQLiteDatabaseBrowserPortable.exe即可运行,打开文件时文件类型选择所有类型,内附简单的使用方法,配合i4等苹果手机助手可以方便得将...

    SQLiteStudio_sqlite3_源码

    SQLite 是一个轻量级、开源的嵌入式关系型数据库管理系统,它不需要独立的服务进程,而是作为应用程序的一部分直接运行在用户空间。SQLiteStudio 是一个功能强大的 SQLite 数据库管理工具,提供了一个直观的图形用户...

    Sqlite3 安装文件

    SQLite3 是一个开源的、轻量级的数据库引擎,它不需要独立的服务器进程,可以直接嵌入到各种应用程序中。SQLite3 提供了 SQL 标准兼容的数据库管理系统,广泛应用于移动设备、嵌入式系统以及桌面应用。在这个...

Global site tag (gtag.js) - Google Analytics