`

有关SQLite数据库的一些操作

 
阅读更多

1.在程序中如何使用自定义的数据库

 

在程序外部获取到数据库以后,将这个数据库放到res/raw目录下。如果数据库过大,可以考虑将数据库的后缀名改为.jpg这样做的目的是系统会帮你压缩这个数据库。

当第一次打开应用程序的时候,数据库会被加载到data/data目录下。这个需要在模拟器环境下才可以看到。在测试的时候,可以检查该目录下是否成功生成数据库。也可以在DDMS里面把数据库取出来,使用SqliteDev来查看表结构等等。

需要在程序中执行一些数据库操作的时候,可以先在SqliteDev里面用sql语句进行测试。如果成功执行了,再写到代码里面。这样效率会比较高。

 

public class DataBaseHelper extends SQLiteOpenHelper
{

	public final static String DB_NAME = "telloc.db";
	
	public DataBaseHelper(Context context, String dbName)//使用自定义的构造器
	{
		super(context, dbName, null, 3);
		// 先执行 判断 数据库文件是否存在, 不存在则从本地文件拷贝至数据库位置
		CopyDB(context, false);
	}
	
	/**
	 * 第一次执行程序的时候,判断是否存在数据库,不存在就加入
	 * 
	 * */
	@Override
	public void onCreate(SQLiteDatabase db) 
	{
		
	}

	/**
	 * 数据库版本号发生变化的时候被调用,更新数据库和数据库版本号
	 * 
	 * */
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
	{
		
	}

	/**
	 * 复制数据库, 不存在或者强制要求覆盖时覆盖
	 * 
	 * @param isCover
	 */
	public static void CopyDB(Context context, boolean willCover) {
		System.out.println("CopyDB" + context);
		File path = context.getDatabasePath(DB_NAME);
		if (!path.exists()) {
			// 首先要创建这个文件夹, 如果不存在的话。。。 否则FileOutputStream(path) 报错
			new File(path.toString().substring(0, path.toString().lastIndexOf("/"))).mkdirs();
		} else if (!willCover) {
			return;
		}

		InputStream is = context.getResources().openRawResource(R.raw.telloc);
		FileOutputStream fos;
		try {
			fos = new FileOutputStream(path);

			byte[] buffer = new byte[1024];

			int count = 0;

			while ((count = is.read(buffer)) > 0) {
				fos.write(buffer, 0, count);
			}
			fos.close();
			is.close();
//			Log.e(TAG, "create new database");
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
	
}
 

使用

helper = new DataBaseHelper(myContext, DataBaseHelper.DB_NAME);

 

		String areaCity = "";
		
		Cursor	cursor = helper.getReadableDatabase().query(
				"area_code", 	//表名
				new String[]{"area_code", "city"}, //字段名
				"area_code = ? or area_code = ?",  //查询前面3位或者4位
				new String[]{myNumber.substring(0, 3), myNumber.substring(0, 4)}, 
				null, null, null);
		
		if(cursor.getCount() == 0)
		{
			areaCity = "";
		}
		else//有查询出记录,取第一条
		{
			if(cursor.moveToFirst())
			{
				areaCity = cursor.getString(cursor.getColumnIndex("city"));
				 
			}
		}
		
		cursor.close();//使用后记得关闭
		
		return areaCity;

 

 

3.创建自己的数据库

 

String sqlForCreateTable = "CREATE TABLE [my_calls]("+" [_id]INTEGER, "+" [number]INTEGER, "+" [date]INTEGER, "+" [duration]INTEGER, "+" [type]INTEGER, "+" [name]VARCHAR(50), "+" [tel_location]VARCHAR(100))";
		Log.e("sqlForCreateTable", sqlForCreateTable);
		db.execSQL(sqlForCreateTable);

 

 

4.查找系统数据库中的字段,添加到自己的数据库

 

Cursor cursor  = myContext.getContentResolver().query(CallLog.Calls.CONTENT_URI, new String[]{CallLog.Calls._ID, CallLog.Calls.NUMBER, CallLog.Calls.DATE, CallLog.Calls.DURATION, CallLog.Calls.TYPE, CallLog.Calls.CACHED_NAME}, null, null, null);
		
		if(cursor != null)//获取查询出来的记录,添加到自己的表中
		{
			
			Log.e("cursorCount", "cursor:"+cursor.getCount());
			while(cursor.moveToNext())
			{
				ContentValues cv = new ContentValues();//类似于键值对的方式保存数据
				cv.put("_id", cursor.getString(cursor.getColumnIndex(CallLog.Calls._ID)));
				String number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER));
				cv.put("number", number);
				cv.put("date", cursor.getString(cursor.getColumnIndex(CallLog.Calls.DATE)));
				cv.put("duration", cursor.getString(cursor.getColumnIndex(CallLog.Calls.DURATION)));
				cv.put("type", cursor.getString(cursor.getColumnIndex(CallLog.Calls.TYPE)));
				cv.put("name", cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME)));
				cv.put("number", cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER)));
				cv.put("tel_location", getTelLocation(db,number));
				
				db.insert(TABLE_NAME, null, cv);
			}
		}
		cursor.close();
 

总结:

操作系统的数据库的时候,系统已经将这个操作封装为providor,可以直接使用例如:

 

myContext.getContentResolver().query(.......);

 

而操作自己的数据库的时候,需要new一个数据库对象,例如:

 

helper.getReadableDatabase().query(........);

 

操作后返回的是一个Cursor对象。这个对象对象包含了查询出来的结果

 

一般需要对这个cursor中的对象进行读取。注意读取后要关闭这个对象。

 

分享到:
评论

相关推荐

    Android实验报告Sqlite数据库操作.pdf

    Android SQLite 数据库操作报告 一、实验目的 Android 实验报告的主要目的是熟悉 Android 平台的文件操作、掌握 Android SQLite 数据库的设计和应用、熟悉 XML 和 JSON 文件的读取。通过本实验,用户可以掌握 ...

    使用C#开发的Sqlite数据库创建、操作的源码项目工程

    这是一个使用C#开发的Sqlite数据库创建、操作的源码工程,关于Sqlite的所有操作已经单独创建了专门的跨平台【.NETCore3.1】类库包含相应的帮助类,可以直接生成后拿到任何项目中直接使用,高效简单,省去了从头开发...

    IOS sqlite数据库操作

    在`sqlitDemo`项目中,你可能可以找到一个简单的SQLite数据库操作示例,包括创建数据库、表格,以及插入、查询、更新和删除数据等操作。通过研究这个示例,你可以更好地理解如何在实际的iOS应用中使用SQLite数据库。

    Qt sqlite 数据库操作封装

    总结起来,Qt的SQLite数据库操作封装涉及到以下几个关键点: 1. 生成和打开数据库文件。 2. 执行SQL语句,包括查询、插入、更新和删除。 3. 设计接口,提供增删改查的重载功能。 4. 实现事务管理,确保数据一致性。 ...

    SQLite数据库 加密解密工具

    SQLite数据库是一种轻量级、自包含的SQL数据库引擎,常被用在嵌入式系统和移动应用中。在处理敏感数据时,为了保护信息安全,对SQLite数据库进行加密是必要的步骤。本文将详细介绍如何使用.NET环境下的SQLite加密...

    VB6.0 操作SQLite 数据库的完整示例代码

    在VB6.0中操作SQLite数据库,是一种将轻量级、高性能的SQLite数据库与传统的Visual Basic编程环境相结合的方法。SQLite是一种自包含、无服务器、零配置、事务性的SQL数据库引擎,广泛应用于移动设备、嵌入式系统以及...

    C++操作sqlite数据库

    使用C++操作sqlite数据库需要具备相关的环境和依赖项,然后按照一定的步骤来新建数据库和表、插入数据、修改和删除数据。在使用C++操作sqlite数据库时,需要注意一些重要的细节,以确保数据的安全和正确性。

    android对sqlite数据库的操作

    在Android开发中,SQLite数据库是默认的轻量级数据库,用于存储应用的数据。SQLite支持标准的关系型数据库特性,如SQL语法、事务处理等,且它体积小、无服务器、文件化,非常适合移动设备使用。本篇文章将深入探讨...

    Delphi版SQLite数据库工具

    这款Delphi工具则提供了更加便捷的方式来操作SQLite数据库,尤其对于那些使用Delphi进行开发的项目。 首先,该工具的一大亮点是支持查询加密的SQLite数据库。这意味着用户可以对存储的数据进行安全保护,防止未经...

    JavaScript操作SQLite数据库Demo

    在JavaScript中操作SQLite数据库,我们可以利用Web SQL API,这是一个已弃用但仍在一些旧版浏览器中可用的API。虽然它不被推荐用于新项目,但这个Demo仍然可以作为理解客户端数据库操作的基础。 首先,你需要创建一...

    VB 6.0操作Sqlite数据库(查询、添加、更新、删除)

    在VB 6.0中操作SQLite数据库涉及到一系列的步骤和技术,包括连接数据库、执行SQL语句(查询、添加、更新和删除数据)以及处理结果。SQLite是一个轻量级的、自包含的数据库引擎,适用于各种应用程序,特别是那些需要...

    SQLite数据库逆向分析1

    在SQLite数据库逆向分析中,Main函数将负责加载数据库、初始化数据库环境和准备数据库操作。 3. 从软件外部调用函数 在SQLite数据库逆向分析中,我们需要从软件外部调用函数,以获取数据库的操作权限和控制权。...

    js 访问 sqlite数据库

    本文将深入探讨如何使用JavaScript访问SQLite数据库,以及相关的关键知识点。 首先,JavaScript直接在浏览器环境中并不能直接操作SQLite数据库,因为浏览器的安全沙箱机制不允许。然而,通过一些特定的技术,如Web ...

    SQLite数据库打开工具

    SQLite是一款轻量级的、开源的、自包含的SQL数据库...了解如何创建数据库、操作表、执行查询以及管理事务,这些都是使用SQLite数据库的基础。通过学习和实践,你将能够更好地利用SQLite这一强大而灵活的数据库系统。

    SqLite数据库操作工具

    SQLite数据库操作工具使得用户能够方便地管理和操作SQLite数据库,进行数据的增删改查等操作,而无需深入了解复杂的SQL语法或数据库管理系统。 SQLite Studio是一款非常实用的SQLite数据库管理工具,它提供了一个...

    C#分享辅助类:SQLite数据库操作(SQLiteDao)

    总之,`SQLiteDao`类是C#中对SQLite数据库操作的抽象封装,它使得数据库操作更加简洁、安全且易于维护。通过结合其他辅助类,如扩展方法和加密工具,我们可以构建一个强大而全面的数据库操作框架,满足各种项目需求...

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

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

    BCB6.0操作SQLite数据库

    BCB6.0 使用 sqlite 数据库简单方法, 工程--添加到工程---选择 .c类型 添加 sqlite3.c再引入头文件 #include "sqlite3.h"。例程可以帮助新学SQLite入门。

    SQLite数据库gui操作界面

    SQLite数据库GUI操作界面是一种用户友好的图形用户界面(GUI),它允许用户以直观的方式与SQLite数据库进行交互,而无需编写SQL命令行语句。这种工具极大地简化了数据库管理任务,尤其适合初学者和非程序员。在本文...

Global site tag (gtag.js) - Google Analytics