SQLite

 
package com.example.sqltest;

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

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast;
public class MyDataBaseHelper extends SQLiteOpenHelper{
	private Context myContext;	//构造函数里的Context
	private SQLiteDatabase mydb;
	/*
	 * SQLite关系数据库里的SQL语句:
	 * 整形:integer
	 * 浮点型:real
	 * 文本型:text
	 * 二进制型:blob
	 * SQLiteOpenHelper的getReadableDatabase()方法调用后才会执行onCreate()或onUpgrade(),而
	 * 不是构建时候调用
	 */
	//创建语句一般预设为public且static,外部通过类名可直接修改调用(便于数据库修改)
	public static String createBook="create table Book(id integer primary key autoincrement,"
			+ "author text,price real,pages integer,name text)";
	public static String createBookBuyer="create table BookBuyer(name text,age integer)";
	public MyDataBaseHelper(Context context, String name, CursorFactory factory, int version) {
		//name为数据库名字,version为创建或打开的数据库版本号(极其重要),当传入版本号高于已存在
		//版本号时,会自动调用onUpgrade()方法而不是onCreate()方法
		super(context, name, factory, version);
		myContext=context;
	}
	//第一次安装程序创建数据库时调用onCreate()方法
	@Override
	public void onCreate(SQLiteDatabase db) {
		/**
		          * 这个方法
		          * 1、在第一次打开数据库的时候才会走
		          * 2、在清除数据之后再次运行-->打开数据库,这个方法会走
		          * 3、没有清除数据,不会走这个方法
		          * 4、数据库升级的时候这个方法不会走
		*/
		db.execSQL(createBook);
		//db.execSQL(createBookBuyer);
		mydb=this.getReadableDatabase();
		Toast.makeText(myContext, "Successful Create!!",Toast.LENGTH_LONG).show();
	}
	//升级数据库时调用onUpgrade()方法,一般在数据库增添表,修改表结构等升级操作使用
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		/**
	          * 1、第一次创建数据库的时候,这个方法不会走
	          * 2、清除数据后再次运行(相当于第一次创建)这个方法不会走
	          * 3、数据库已经存在,而且版本升高的时候,这个方法才会调用
		*/
		//若此时数据库旧版本号(即已传入版本)为1,2版本增加了createBookBuyer此时会调用onUpgrade()
		//switch对旧版本号进行判断,依次升级数据库版本,不加break可升到最高级
		switch(oldVersion) {
		case 1:db.execSQL(createBookBuyer);
		//如第二次版本若要修改已有Book表结构,应修改createBook的sql语句保证首次创建数据库准确
		//然后再修改onUpgrade()里的switch语句添加新的列
		//case 2:db.execSQL("alert table Book add column cost integer");
		mydb=this.getReadableDatabase();
			
		}
	}
	public void insert_delete_update(String sql,String[] str) {
		mydb=this.getReadableDatabase();
		startAffair();
		mydb.execSQL(sql,str);
		affairSuccessful();
		endAffair();
	}
	//查询函数的sql语句允许使用?表示未知参数,未知参数在obj数组里依次给出
	//也可以使用完整sql语句,第二个参数设为空即可
	public List<Book> select(String sql,String[] obj) {
		mydb=this.getReadableDatabase();
		startAffair();
		ArrayList<Book> result=new ArrayList<Book>();
		Cursor cursor=mydb.rawQuery(sql,obj);
		if(cursor.moveToFirst()) {//如果移动到数据表第一行不为空
			do {
				    Book tableClass=new Book();
					tableClass.setId(cursor.getInt(cursor.getColumnIndex("id")));
					tableClass.setPages(cursor.getInt(cursor.getColumnIndex("pages")));
					tableClass.setAuthor(cursor.getString(cursor.getColumnIndex("author")));
					tableClass.setName(cursor.getString(cursor.getColumnIndex("name")));
					tableClass.setPrice(cursor.getDouble(cursor.getColumnIndex("price")));
					result.add(tableClass);
			}while(cursor.moveToNext());
		}
		cursor.close();
		affairSuccessful();
		endAffair();
		return result;
	}
	//开始事务
	public void startAffair() {
		mydb.beginTransaction();
	}
	//事务成功(设置成功会在结束事务时提交事务,否则就会回滚事务)
	public void affairSuccessful() {
		mydb.setTransactionSuccessful();
	}
	//结束事务
	public void endAffair() {
		mydb.endTransaction();
	}
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值