文档章节

Android数据库SQLite基础

维特的烦恼
 维特的烦恼
发布于 2014/01/25 14:29
字数 614
阅读 156
收藏 1

1、SQLiteOpenHelper

package com.pas.sqllitehelper;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class PersonSQLiteOpenHelper extends SQLiteOpenHelper
{

	/**
	 * 数据库构造方法 用来定义数据库的名称 数据库查询的结果集 数据库的版本
	 * @param context
	 * @param name
	 * @param factory
	 * @param version
	 */
	public PersonSQLiteOpenHelper(Context context)
	{
		super(context, "person.db", null, 2);
	}

	/**
	 * 数据库首次创建的执行的方法
	 * @param db 被创建的数据库
	 */
	@Override
	public void onCreate(SQLiteDatabase db)
	{
		db.execSQL("create table persons (id integer primary key autoincrement," +
				"name varchar(20),number varchar(20))");
	}

	/**
	 * 当数据库版本号发生变化时候调用
	 */
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
	{
		Log.i("数据库更新", "数据库更新……");
		db.execSQL("alter table persons add account varchar(20)");

	}

}

2、Dao类

package com.pas.db.dao;

import java.util.ArrayList;
import java.util.List;

import com.pas.domain.Person;
import com.pas.sqllitehelper.PersonSQLiteOpenHelper;

import android.R.bool;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class PersonDao
{
	private PersonSQLiteOpenHelper helper;

	public PersonDao(Context context)
	{
		helper = new PersonSQLiteOpenHelper(context);
	}

	/**
	 *  传统方式-添加(不推荐)
	 * 
	 * @param name
	 * @param number
	 */
	public void add(String name, String number)
	{
		SQLiteDatabase db = helper.getWritableDatabase();

		String sql = "insert into persons (name,number) values (?,?)";
		Object[] para = new Object[]
		{ name, number };
		db.execSQL(sql, para);
		db.close();
	}

	/**
	 * 系统API添加
	 * 
	 * @param name
	 * @param number
	 */
	public boolean add_api(String name, String number, long account)
	{
		SQLiteDatabase db = helper.getWritableDatabase();

		ContentValues values = new ContentValues();
		values.put("name", name);
		values.put("number", number);
		values.put("account", account);
		/*
		 * 参数为 表名 null填充列名 插入值的map集合
		 *      关于第二个参数:
		 *  当values参数为空或者里面没有内容的时候,
		 *  我们insert是会失败的(底层数据库不允许插入一个空行),
		 *  为了防止这种情况,我们要在这里指定一个 列名,
		 *  到时候如果发现将要插入的行为空行时,
		 *  就会将你指定的这个列名的值设为null,然后再向数据库中插入
		 */
		long flag = db.insert("persons", null, values);
		db.close();
		if (flag == -1)
			return false;
		return true;
	}

	/**
	 * 查询
	 * 
	 * @param name
	 */
	public List<Person> find(String name)
	{
		SQLiteDatabase db = helper.getReadableDatabase();

		// String sql = "select * from persons where name=?";
		// String[] para = new String[]
		// { name };
		// Cursor res = db.rawQuery(sql, para);

		
		Cursor res = db.query("persons", null, "name=?", new String[]
		{ name }, null, null, null);
		List<Person> persons = new ArrayList<Person>();
		while (res.moveToNext())
		{
			Person person = new Person();
			person.setId(res.getString(0));
			person.setName(res.getString(1));
			person.setNumber(res.getString(2));
			person.setAccount(res.getString(3));
			persons.add(person);
		}
		res.close();
		db.close();

		return persons;
	}

	/**
	 * 更新
	 * 
	 * @param name
	 * @param number
	 * @return
	 */
	public int update(String name, String number, String account)
	{
		SQLiteDatabase db = helper.getReadableDatabase();
		ContentValues values = new ContentValues();
		values.put("number", number);
		values.put("account", account);
		int rows = db.update("persons", values, "name=?", new String[]
		{ name });
		db.close();
		return rows;
	}

	/**
	 * 删除
	 * 
	 * @param name
	 * @return
	 */
	public int del(String name)
	{
		SQLiteDatabase db = helper.getReadableDatabase();
		int rows = db.delete("persons", "name=?", new String[]
		{ name });
		db.close();
		return rows;
	}

	/*
	 * 转账 测试事务
	 */
	public void transfer(String sourceName, String targetName, double value)
	{
		SQLiteDatabase db = helper.getWritableDatabase();
		
		//开启事务
		db.beginTransaction();
		try
		{
			db.execSQL("update persons set account=account-? where name=?", new Object[]
			{ value, sourceName });
			db.execSQL("update persons set account=account+? where name=?", new Object[]
			{ value, targetName});
			
			//标记数据库事务执行成功
			db.setTransactionSuccessful();
		} finally
		{
			db.endTransaction();
		}
		db.close();
	}
}


© 著作权归作者所有

共有 人打赏支持
维特的烦恼
粉丝 21
博文 97
码字总数 42329
作品 0
天津
私信 提问
手机开发-如何查看android数据文件和数据库

在Android中可以使用Eclipse插件DDMS来查看,也可以使用Android工具包中的adb工具来查看。android项目中的sqlite数据库位于/data/data/项目包/databases中。 工具/原料 doc命令adb工具,ecl...

娶到笨笨
2014/03/14
0
0
Android 开发中使用 SQLite 数据库

SQLite 介绍 SQLite 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能。此外它还是开源的,任何人都可以使用它。许多开源项目((Mozilla, PHP, Python)都...

红薯
2010/08/22
67.2K
32
Android SMS(二)—— 读取短信保存到 SQLite

Android 之 SMS 短信在Android系统中是保存在SQLite数据库中的,但不让其它程序访问(Android系统的安全机制) 现在我们在读取手机内的SMS短信,先保存在我们自己定义的SQLite数据库中,然后...

长平狐
2013/01/06
418
0
SQLite命令行访问Android数据库

登录Android Shell D:android-sdk-windowsplatform-toolsadb shell 应该出现#提示,如果是$提示,请按照上面链接获取ROOT权限。 sqlite命令 sqlite3 /data/data/com.easymorse.demo/files/my......

xiahuawuyu
2013/01/06
0
0
Android读写SQLite数据库并导出SQLite数据写入到Excel表中

版权声明:本文为Zhang Phil原创文章,请不要转载! https://blog.csdn.net/zhangphil/article/details/86083376 Android读写SQLite数据库并导出SQLite数据写入到Excel表中 需要先引入Apach...

zhangphil
01/21
0
0

没有更多内容

加载失败,请刷新页面

加载更多

泛型就这么简单

前言 从今天开始进入Java基础的复习,可能一个星期会有一篇的<十道简单算法>,我写博文的未必都是正确的~如果有写错的地方请大家多多包涵并指正~ 今天要复习的是泛型,泛型在Java中也是个很...

群星纪元
26分钟前
3
0
大数据提醒你:中国这些古建筑,可能是下一个巴黎圣母院!

大家晚上好,我是今天的提笔人嗅嗅。 巴黎圣母院失火事件让我的心情很沉重,一句无关痛痒的安慰“巴黎不哭”,已经不能表达我对这场文化之殇的惋惜之痛,人类伟大的建筑在一瞬间被毁灭。 世界...

forespider
37分钟前
0
0
mysql函数substring_index的用法

substring_index 按索引字符位进行截取字符串 substring_index(“待截取的字符串”,“截取数据依据的字符”,截取字符的位置N) 第三个参数可正,可负。正数表示索引字符前面的字符串,负数...

echojson
37分钟前
1
0
好程序员web前端分享用CSS和JS打造一个简单的图片编辑器

好程序员web前端分享用CSS和JS打造一个简单的图片编辑器,本文主要是利用CSS的 filter和简单的Jquery代码来实现一个简单的图片编辑器,包括对图片的透明度,黑白,图片亮度等调节。 CSS filt...

好程序员IT
47分钟前
2
0
浅析spring mvc的细节

spring mvc 整体结构 系统监听到请求 -> 通知tomcat -> 根据web.xml 通知相应的拦截器(spring mvc 通常指DispatcherServlet) --> 检查url是否有相匹配的请求实现 --> 拿到请求实现bean的适配...

最爱肉肉
48分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部