`
xiehongdong
  • 浏览: 67511 次
  • 性别: 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系统环境变量中。一定要保证在类路径...

    最新版: 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 ...

    SQLite.Interop.dll 支持sqlite expert professional 4.2密码录入

    SQLite.Interop.dll for sqlite expert professional 4.2 用与SQLite Expert打开本地已加密的数据库的插件。适用32位和64位。 1.直接将下载的文件复制到SQLite Expert安装路径(如:c:\Program Files (x86)\SQLite ...

    SQLite、SQLitedb数据库查看器

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

    sqlite3加密版本数据库

    基于sqlite3的加密版本的数据库动态链接库,附lib和.h头文件,新测试可用。可设置密码和修改密码,加密后的数据库文件是无法被打开的。官方提供的免费版本sqlite3都是没有加密的,官方收费的很贵哦,有需要的朋友...

    Android中SQLite数据库查看工具

    SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。 就像其他数据库,SQLite 引擎不是一个...

    SQLite.Interop.dll for sqlite expert professional 4.2

    SQLite.Interop.dll for sqlite expert professional 4.2 用与SQLite Expert打开本地已加密的数据库的插件。1.将SQLite.Interop.dll x86拷贝到SQLite Expert安装路径(如:x:\Program Files (x86)\SQLite Expert\...

    sqlite远程管理工具

    qlite数据库远程管理器,只要在SQLITE数据文件所在目录下运行SQLITE3SERVER服务器程序就可以在于之联网的机器管理SQLITE数据库。可同时管理多台SQLITE数据库服务器。 实现的功能如下: 1、可列出远程SQLITE数据库...

    delphi+sqlite3带加密Demo

    1、获取sqlite3.dll,去网上下载wxsqlite3的最新版本代码,解压后其中有一个sqlite3目录,其中有编译好的版本,lib目录下的是原版本,secure目录下有aes128和aes256两个带加密的版本,直接拿其中任一个sqlite3.dll...

    DB.Browser.for.SQLite-3.11.0-win64 SQLite数据库查看工具

    DB Browser for SQLite(DB4S) 是一个高质量、可视化、开源的工具,用于创建、设计和编辑与SQLite兼容的数据库文件。 为想要创建、搜索和编辑数据库的用户和开发人员而设计的。DB Browser for SQLite(DB4S) 使用一个...

    VC工程演示对sqlite数据库的操作,包含SQLite3文件!

    SQLite官方下载只提供给我们一个sqlite3.dll跟一个sqlite3.def文件,并没有提供用于VC++6.0的lib文件,可以利用sqlite3.def文件生成(此文档已生成了,可以直接使用),步骤如下: 1.将sqlite3.h(D:\sqlite-...

    SQlite3库及头文件分享

    文件列表:1)sqlite3.h;2)sqlite3.lib;3)sqlite3.dll; 学习VS2010/MFC下数据库编程已经有一段时间了,大多是在网站上浏览一些资源,这些资源大多以VC6.0位开发环境,而在VS2010下往往出现问题,所幸看到了...

    sqlite-jdbc-3.15.1-API文档-中文版.zip

    赠送jar包:sqlite-jdbc-3.15.1.jar; 赠送原API文档:sqlite-jdbc-3.15.1-javadoc.jar; 赠送源代码:sqlite-jdbc-3.15.1-sources.jar; 赠送Maven依赖信息文件:sqlite-jdbc-3.15.1.pom; 包含翻译后的API文档:...

    Sqlite数据库里插入数据的条数上限是500

    今天在向Sqlite数据库里... 您可能感兴趣的文章:SQLite教程(八):命令行工具介绍SQLite教程(十二):锁和并发控制详解SQLite教程(十四):C语言编程实例代码(2)python查询sqlite数据表的方法SQLite之Autoincre

    SQLITE3 数据文件加密与解密程序 DELPHI版

    网上大多关于SQLITE3数据文件的加密与解密都是欲言由止,近期因要开发关于SQLITE3数据库类型的软件,做了一下研究。用D7写了这样一个工具。支持SQLITE3数据文件的批量加密与解密。工具自身不依赖SQLITE3.DLL动态库,...

    C#操作SQLite数据库之读写数据库的方法

    本文实例讲述了C#操作SQLite数据库之读写数据库的方法。分享给大家供大家参考,具体如下: 这里演示读写数据库并在窗体(Form)中显示其数据,其方式为: 读: Database(SQLite) -&gt; DataAdapter -&gt; DataSet -&gt; ...

    sqlite-jdbc-3.34.0-API文档-中文版.zip

    赠送jar包:sqlite-jdbc-3.34.0.jar; 赠送原API文档:sqlite-jdbc-3.34.0-javadoc.jar; 赠送源代码:sqlite-jdbc-3.34.0-sources.jar; 赠送Maven依赖信息文件:sqlite-jdbc-3.34.0.pom; 包含翻译后的API文档:...

    Delphi调用sqlite.7z

    Delphi7调用sqlite数据库实例,包含2个pas文件,一个dll文件,调用代码介绍,最全最实用最简单的Delphi7调用sqlite数据库资源. Delphi7调用SQLite数据库使用方法: 1. 在项目中添加SQLite3.pas、SQLiteTable3.pas这2...

    【实测有效,真正解决】VB.NET C# VS sqlite 无法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块

    简单整合32位SQLite跟64位SQLite,项目属性设置为anycpu的时候不会再有烦人的编译平台不同的提示,sqlite会自动根据系统的位数,而选择相应的版本。 同时还阔以解决System.DllNotFoundException: 无法加载 DLL...

    基于Django3.0.5+Python3.7+SQLite的博客系统源码.zip

    基于Django3.0.5+Python3.7+SQLite的博客系统源码 基于Django3.0.5+Python3.7+SQLite的博客系统源码 基于Django3.0.5+Python3.7+SQLite的博客系统源码 基于Django3.0.5+Python3.7+SQLite的博客系统源码 基于...

Global site tag (gtag.js) - Google Analytics