Android下使用SQLite数据库

1.SQLite数据库的特点

安卓手机自带, 小巧, 适合在手机中使用

不区分数据类型(主键除外)

SQL语句和MySQL几乎相同

SQLite不使用JDBC连接, 使用的是Android自有的API

每个数据库对应一个文件

* 2.创建数据库

定义类继承SQLiteOpenHelper, 实现onCreate(), onUpgrade()

创建该类对象, 调用getWritableDatabse()或者getReadableDatabse()

情况1: 数据库文件不存在, 创建文件, 打开数据库连接(得到SQLiteDatabase对象), 执行onCreate()方法

情况2: 数据库文件存在, 版本号没变, 打开数据库连接

情况3: 数据库文件存在, 版本号提升, 升级数据库, 打开数据库连接,执行onUpgrade()方法

情况4: 数据库文件存在, 版本号降低, 执行onDowngrade()方法, 方法中默认会抛出一个异常

代码:MySQLiteOpenHelper.java

package com.oterman.mysqlite;

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

public class MySQLiteOpenHelper extends SQLiteOpenHelper {
	/**
	 * 由于父类没有默认的无参数的构造函数,故需要显示的写出构造函数,然后去调用父类有参数的构造函数;
	 * 参数1:context表示应用程序的环境,用来确定数据库文件的位置;
	 * 参数2:数据库文件的名字;
	 * 参数3:用来创建结果集Cursor的工厂,默认传入null;
	 * 参数4:数据的版本号,从1开始;
	 * @param context
	 * @param version
	 */

	public MySQLiteOpenHelper(Context context,int version) {
		super(context,"myfirstdb.db",null,version);
	}

	public MySQLiteOpenHelper(Context context) {
		super(context,"myfirstdb.db",null,1);
	}

	/**
	 * 如果数据库文件不存在,调用该方法;
	 */
	@Override
	public void onCreate(SQLiteDatabase db) {
		System.out.println("数据库创建啦");
		db.execSQL("create table account(_id Integer primary key autoincrement,name varchar(40))");

	}

	/**
	 * 数据库文件存在,版本号发生变化,会调用该方法;
	 */
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		System.out.println("数据库升级啦");

	}

}

* 3.创建表或修改表

SQLiteDatabase类的execSQL()方法可以执行一条SQL语句

如果希望创建数据库的时候就创建一些表, 那么这个操作就可以在onCreate()方法中执行

如果希望在数据库升级的时候做类似修改表添加表的操作, 可以在onUpgrade()方法中执行

*** 4.增删改查

execSQL()方法可以进行增删改操作

rawQuery()执行查询操作, 得到Cursor, 调用moveToNext()判断是否包含数据, 调用getString(), getInt()等方法获取数据

insert(), delete(), update(), query() 四个方法内部也是调用execSQL()和rawQuery()的, 它们在ContentProvider中使用更方便(明天讲)

* 5.事务管理

beginTransaction() 开启事务

setTransactionSuccessful() 设置事务成功标记

endTransaction() 结束事务.

事务结束的时候, 会把最后一个成功标记之前的操作提交, 成功标记之后的操作回滚

代码:Accout.java

package domain;

public class Account {

	private Integer id ;
	private String name;
	private Integer balance ;
	public Account(Integer id, String name, Integer balance) {
		super();
		this.id = id;
		this.name = name;
		this.balance = balance;
	}
	public Account() {
		super();
	}
	public Integer getId() {
		return id;
	}
	public Account(String name, Integer balance) {
		super();
		this.name = name;
		this.balance = balance;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public Integer getBalance() {
		return balance;
	}
	public void setBalance(Integer balance) {
		this.balance = balance;
	}
	@Override
	public String toString() {
		return "Account [id=" + id + ", name=" + name + ", balance=" + balance + "]";
	}

}

AccountDao.java

package com.oterman.dao;

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

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.oterman.mysqlite.MySQLiteOpenHelper;

import domain.Account;

public class AccountDao {
	private Context context;

	public AccountDao(Context context) {
		this.context = context;
	}

	public void insert(Account a){
		//获取数据库;
		MySQLiteOpenHelper helper=new MySQLiteOpenHelper(context);
		SQLiteDatabase db=helper.getWritableDatabase();
		//操作数据库;
		db.execSQL("insert into account values(null,?,?)",new Object[]{a.getName(),a.getBalance()});
		//关闭数据库;
		db.close();
	}
	//删除记录;
	public void delete(int i) {
		MySQLiteOpenHelper helper=new MySQLiteOpenHelper(context);
		SQLiteDatabase db=helper.getWritableDatabase();//获取数据库;
		db.execSQL("delete from account where _id=?",new Object[]{i});
		db.close();
	}

	//修改数据库;
	public void update(){
		MySQLiteOpenHelper helper=new MySQLiteOpenHelper(context);
		SQLiteDatabase db=helper.getWritableDatabase();
		db.execSQL("update account set balance=? where _id<?",new Object[]{1000,9});
		db.close();
	}
	//查询数据库;
	public Account query(int i) {
		//获取数据库;
		MySQLiteOpenHelper helper=new MySQLiteOpenHelper(context);
		SQLiteDatabase db=helper.getWritableDatabase();
		//执行查询语句;获取结果集;
		Cursor c=db.rawQuery("select name,balance from account where _id=?", new String[]{i+""});
		Account a=null;
		while(c.moveToNext()){
			String name=c.getString(0);
			int balance=c.getInt(1);
			a=new Account(i,name,balance);
		}
		return a;
	}

	//查询所有;
	public List<Account> queryAll(){
		MySQLiteOpenHelper helper=new MySQLiteOpenHelper(context);
		SQLiteDatabase db=helper.getWritableDatabase();
		List<Account> list=new ArrayList<Account>();

		String sql="select * from account";
		Cursor c=db.rawQuery(sql, null);

		while(c.moveToNext()){
			int id=c.getInt(0);
			String name=c.getString(c.getColumnIndex("name"));
			int balance=c.getInt(c.getColumnIndex("balance"));
			list.add(new Account(id,name,balance));
		}
		c.close();
		db.close();
		return list;

	}
	//演示事务
	public void trans(int fromId,int toId, int amount) {

		MySQLiteOpenHelper helper=new MySQLiteOpenHelper(context);
		SQLiteDatabase db=helper.getWritableDatabase();

		String sql1="update account set balance=balance-? where _id=?";
		String sql2="update account set balance=balance+? where _id=?";
		try{
			db.beginTransaction();//开启事务;

			db.execSQL(sql1, new Object[]{amount,fromId});
			db.execSQL(sql2, new Object[]{amount,toId});
			db.setTransactionSuccessful();//可以设置多个标记点;分组提交;如果在标记点之前未出现异常,则之前的所有的sql操作提交;

			db.execSQL(sql1, new Object[]{amount,fromId});
			db.execSQL(sql2, new Object[]{amount,toId});
			db.setTransactionSuccessful();

			db.execSQL(sql1, new Object[]{amount,fromId});
			int i=1/0;
			db.execSQL(sql2, new Object[]{amount,toId});
			db.setTransactionSuccessful();//标记点;出现异常时,该标记点至上一个标记点的所有内容被回滚;

		}finally{
			db.endTransaction();
			db.close();
		}
	}

}
时间: 2024-10-11 11:14:28

Android下使用SQLite数据库的相关文章

Android下利用SQLite数据库实现增删改查

1: 首先介绍如何利用adb查看数据库 1: adb shell 2: cd /data/data/包名/databases 3:  sqlite3 数据库 4   接下来就可以进行数据库的sql语法的使用了 bean对象: public class Person { private int id; private String name; private String number; } 数据库的创建以及表的创建: package com.example.db; import android.

无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)

1.android下junit测试框架配置 单元测试需要在手机中进行安装测试 (1).在清单文件中manifest节点下配置如下节点 <instrumentation android:name="android.test.InstrumentationTestRunner" android:targetPackage="com.example.demo1" /> 上面targetPackage指定的包要和应用的package相同. (2)在清单文件中ap

Android下用Sqlite数据库存储数据

第一步:  写个类 ,继承 SQLiteOpenHelper 1 public class MyDatabaseOpenHelper extends SQLiteOpenHelper { 2 3 } 第二步:  添加一个构造函数,并且  指定必要的参数 // context : 应用程序上下文 // name : 数据库的名称 // factory : 游标工厂 // version : 数据库的 版本 public MyDatabaseOpenHelper(Context context) {

Android 使用存放在存assets文件夹下的SQLite数据库

因为这次的项目需要自带数据,所以就就把数据都放到一个SQLite的数据库文件中了,之后把该文件放到了assets文件夹下面.一开始打算每次都从assets文件夹下面把该文件夹拷贝到手机的SD卡或者手机自身的存储上之后再使用,后来考虑到每次都拷贝的话效率不高,并且如果涉及到对数据库的修改操作的话拷贝之后数据就被恢复了. 因此就写了该封装,该封装只是在第一次使用数据库文件的时候把该文件夹拷贝到手机的/data/data/应用程序报名/database文件夹下,之后就直接从这个地方使用了.并且它允许你

Android开发之SQLite数据库详解

Android开发之SQLite数据库详解 请尊重他人的劳动成果,转载请注明出处:Android开发之SQLite数据库详解 http://blog.csdn.net/fengyuzhengfan/article/details/40194393 Android系统集成了一个轻量级的数据库:SQLite, SQLite并不想成为像Oracle.MySQL那样的专业数据库.SQLite只是一个嵌入式的数据库引擎,专门适用于资源有限的设备上(如手机.PDA等)适量数据存取. 虽然SQLite支持绝大

跟我学Android之十三 SQLite数据库操作

本章内容 第1节  SQLite数据库概述 第2节  SQLite建库建表 第3节 管理数据库连接 第4节  操作数据库数据 第5节  数据绑定 本章目标 掌握SQLite数据的基本特点与工具使用. 熟练掌握SQLite建库建表的方法. 熟练掌握连接SQLite数据库的方法. 熟悉SQLite数据库的升级与建立方法. 掌握通过数据绑定完成数据显示的方法. SQLite数据库简介 SQLite是一种非常流行的嵌入式数据库,是由C语言编写而成,是一款轻型关系型数据库,支持SQL,支持多种操作系统,完

Android总结三SQLite数据库

一.SQLite数据库 1.SQLite数据库的特点 安卓手机自带, 小巧, 适合在手机中使用 不区分数据类型(主键除外) SQL语句和MySQL几乎相同 SQLite不使用JDBC连接, 使用的是Android自有的API 每个数据库对应一个文件 2.创建数据库 定义类继承SQLiteOpenHelper, 实现onCreate(), onUpgrade() 创建该类对象, 调用getWritableDatabse()或者getReadableDatabse() 情况1: 数据库文件不存在,

在android中使用SQLite数据库

SQLite数据库以其轻量.体积小等特点,使其在开发中运用的非常广泛,在前面的博客中我也介绍过在Cocos2d-x中使用SQLite数据库,这篇博客是介绍在Android中使用SQLite数据库,Android中直接集成了SQLite数据库,使用起来非常方便,不需要向Cocos2d-x中那样添加外部文件 我将使用SQLite数据库实现一个下图所示的效果,打开app后会弹出下图所示的界面 单击createDatabase按钮后,在logcat中可以看到打印了一条提示信息,表示数据库创建成功,当再次

详解Android中的SQLite数据库存储

前言 在Android中存储数据的方式有很多种,其中使用SQLite数据库是存储结构化数据的最佳选择.幸运的是,Android中默认提供了对SQLite的支持,这就使得在Android中使用SQLite数据库变得格外方便. 支持的数据类型 SQLite是一款轻量级的数据库,其支持的数据类型也很简单,主要有以下几种: text:字符类型 real:浮点类型 integer:整数类型 blob:二进制数据类型 创建数据库 SQLite数据库的使用始于SQLiteOpenHelper这个抽象类.我们需