• 方法数据库android轻量型数据库sqlite的使用方法汇总


    每日一贴,今天的内容关键字为方法数据库

        声明:主要是对sqlite的使用做一下简单的汇总。

        首先建立数据库和建立数据表

    /**
     * @FILE:DBOpenHelper.java
     * @AUTHOR:Administrator
     * @DATE:2013-5-14 下昼10:06:29
     **/
    package com.yehui.service;
    
    import android.content.Context;
    import android.database.sqlite.SQLiteDatabase;
    import android.database.sqlite.SQLiteDatabase.CursorFactory;
    import android.database.sqlite.SQLiteOpenHelper;
    
    /*******************************************
     * 
     * @CLASS:DBOpenHelper
     * @DESCRIPTION:sqlite数据库必须继承SQLiteOpenHelper(抽象类)
     * @AUTHOR:Administrator
     * @VERSION:v1.0
     * @DATE:2013-5-14 下昼10:06:29
     *******************************************/
    public class DBOpenHelper extends SQLiteOpenHelper {
    
    	/**
    	 * create a instance DBOpenHelper.
    	 * 
    	 * @param context
    	 *            上下文对象
    	 * @param name
    	 *            数据库名称
    	 * @param factory
    	 *            CursorFactory
    	 * @param version
    	 *            版本号(第一次生成数据库时,版本号是1,只执行一次)
    	 */
    	public DBOpenHelper(Context context) {
    		super(context, "yehui.db", null, 1);
    
    	}
    
    	/*
    	 * (non-Javadoc)当创立数据库的时候就会创立上面的表,可以在这里创立多张表:表中的字段的类型可以完整没有,
    	 * varchar(20)长度并不能限制。可以输入超越20字符的长度。
    	 * 
    	 * @see
    	 * android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite
    	 * .SQLiteDatabase)
    	 */
    	@Override
    	public void onCreate(SQLiteDatabase db) {
    		String sql = "create table person(personid integer primary key autoincrement, name varchar(20))";
    		// 执行这句sql
    		db.execSQL(sql);
    	}
    
    	/*
    	 * (non-Javadoc)对数据库更新,可以在这个方法里头对数据表做alter.:也就是说当 super(context, "yehui.db",
    	 * null, 1);这里头的版本号发生改变的时候就会调用这个方法,执行完成后将数据库的版本号设置为新的版本号
    	 * 
    	 * @see
    	 * android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite
    	 * .SQLiteDatabase, int, int)
    	 */
    	@Override
    	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    		String sql = "ALTER TABLE PERSON ADD PHONE VARCHAR(12) NULL";
    		db.execSQL(sql);
    	}
    
    }

        其次,为了方法建立一个bean来对应表中的内容:

    /**
     * @FILE:Person.java
     * @AUTHOR:Administrator
     * @DATE:2013-5-14 下昼10:31:18
     **/
    package com.yehui.entity;
    
    /*******************************************
     * 
     * @CLASS:Person
     * @DESCRIPTION:bean
     * @AUTHOR:Administrator
     * @VERSION:v1.0
     * @DATE:2013-5-14 下昼10:31:18
     *******************************************/
    public class Person {
    	private Integer id;
    	private String name;
    	private String phone;
    
    	public Person(String name, String phone) {
    		this.name = name;
    		this.phone = phone;
    	}
    
    	public Person(Integer id, String name, String phone) {
    		super();
    		this.id = id;
    		this.name = name;
    		this.phone = phone;
    	}
    
    	public Person() {
    		super();
    	}
    
    	@Override
    	public String toString() {
    		return "Person [id=" + id + ", name=" + name + ", phone=" + phone + "]";
    	}
    
    	public Integer getId() {
    		return id;
    	}
    
    	public void setId(Integer id) {
    		this.id = id;
    	}
    
    	public String getName() {
    		return name;
    	}
    
    	public void setName(String name) {
    		this.name = name;
    	}
    
    	public String getPhone() {
    		return phone;
    	}
    
    	public void setPhone(String phone) {
    		this.phone = phone;
    	}
    
    	public static void main(String[] args) {
    		Person person = new Person("yehui", "132");
    		System.out.println(person.toString());
    	}
    }

        再次:建立一个service类来处置业务逻辑(注意两种不同的操作方法使用sql的不同)

        每日一道理
    “一年之计在于春”,十几岁的年纪,正是人生的春天,别辜负了岁月老人的厚爱与恩赐。行动起来,播种梦想吧!
    /**
     * @FILE:PersonService.java
     * @AUTHOR:Administrator
     * @DATE:2013-5-14 下昼10:41:47
     **/
    package com.yehui.service;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.content.ContentValues;
    import android.content.Context;
    import android.database.Cursor;
    import android.database.sqlite.SQLiteDatabase;
    import android.util.Log;
    
    import com.yehui.entity.Person;
    
    /*******************************************
     * 
     * @CLASS:PersonService
     * @DESCRIPTION:对person进行增删改查操作
     * @AUTHOR:Administrator
     * @VERSION:v1.0
     * @DATE:2013-5-14 下昼10:41:47
     *******************************************/
    public class PersonService {
    	private DBOpenHelper dbOpenHelper;
    	public final static String TAG = "PersonService";
    
    	/**
    	 * create a instance PersonService. 会创立数据库
    	 * 
    	 * @param context
    	 */
    	public PersonService(Context context) {
    		super();
    		this.dbOpenHelper = new DBOpenHelper(context);
    	}
    
    	/**
    	 * @description:保存
    	 * @author:Administrator
    	 * @return:void
    	 * @param person
    	 */
    
    	public void save(Person person) {
    		// 如果数据表不存在先创立数据表,存在,则不创立
    		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
    		// SQLiteDatabase db1 = dbOpenHelper.getWritableDatabase();这个和
    		// SQLiteDatabase db是同一个对象
    		// 方法1
    		// 使用?。参数形式
    		// db.execSQL("insert into person(name,phone) values(?,?)", new Object[]
    		// {
    		// person.getName(), person.getPhone() });
    		// 或者使用sqlite自带的操作方法
    		// 方法2
    		ContentValues values = new ContentValues();
    		values.put("name", person.getName());
    		values.put("phone", person.getPhone());
    		db.insert("person", null, values);
    		// 注意这里的第二个参数(表的字段名)。db.insert("person", "personid",
    		// null);也就说新增一条记录,id是null:这个语句不会报错,只会按自增的id新增一条记录
    	}
    
    	/**
    	 * @description:按照id删除数据
    	 * @author:Administrator
    	 * @return:void
    	 * @param id
    	 */
    
    	public void delete(Integer id) {
    		// 如果数据表不存在先创立数据表,存在,则不创立
    		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
    		// 方法1
    		// 使用?。参数形式
    		// db.execSQL("delete from person where personid=?", new Object[] { id
    		// });
    		// 方法2
    		db.delete("person", "personid=?", new String[] { id.toString() });
    	}
    
    	public void update(Person person) {
    		// 如果数据表不存在先创立数据表,存在,则不创立
    		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
    		// 方法1
    		// 使用?。参数形式
    		// db.execSQL("update  person set name=?,phone=? where personid=? ", new
    		// Object[] { person.getName(),person.getPhone(),person.getPersonid()
    		// });
    		// 方法2
    		ContentValues values = new ContentValues();
    		values.put("name", person.getName());
    		values.put("phone", person.getPhone());
    		db.update("person", values, "personid=?", new String[] { person.getId()
    				.toString() });
    	}
    
    	/**
    	 * @description:依照id查找数据
    	 * @author:Administrator
    	 * @return:Person
    	 * @param id
    	 * @return
    	 */
    
    	public Person find(Integer id) {
    		Person person = null;
    		// 如果数据表不存在先调用getReadableDatabase方法,存在,则不创立
    		SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
    		// 方法1
    		// 使用?。参数形式
    		// Cursor cursor = db.rawQuery("select * from person where personid=?",
    		// new String[] { id.toString() });
    		// 方法2
    		Cursor cursor = db.query("person", null, "personid=?",
    				new String[] { id.toString() }, null, null, null);
    		// 如果找到一个result,则返回result
    		if (cursor.moveToFirst()) {
    			person = new Person();
    			person.setId(cursor.getColumnIndex("personid"));
    			person.setName(cursor.getString(cursor.getColumnIndex("name")));
    			person.setPhone(cursor.getString(cursor.getColumnIndex("phone")));
    		}
    		Log.v(TAG, person.toString());
    		cursor.close();
    		return person;
    	}
    
    	/**
    	 * @description:分页查询
    	 * @author:Administrator
    	 * @return:List<Person> 结果
    	 * @param offset
    	 *            跳过几条数据
    	 * @param maxResult
    	 *            总共查找几条数据
    	 * @return
    	 */
    
    	public List<Person> getScrollData(Integer offset, int maxResult) {
    		List<Person> persons = new ArrayList<Person>();
    		// 如果数据表不存在先调用getReadableDatabase方法,存在,则不创立
    		SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
    		// 方法1
    		// 使用?。参数形式
    		// Cursor cursor = db.rawQuery(
    		// "select * from person order by personid asc limit ?,?",
    		// new String[] { String.valueOf(offset),
    		// String.valueOf(maxResult) });
    		// 方法2
    		Cursor cursor = db.query("person", null, null, null, null, null,
    				"personid asc", offset + "," + maxResult);
    		// 循环将结果加入到list中
    		while (cursor.moveToNext()) {
    			Person person = new Person();
    			person.setId(cursor.getColumnIndex("personid"));
    			person.setName(cursor.getString(cursor.getColumnIndex("name")));
    			person.setPhone(cursor.getString(cursor.getColumnIndex("phone")));
    			persons.add(person);
    		}
    		cursor.close();
    		// Log.v(TAG, person.toString());
    		return persons;
    	}
    
    	/**
    	 * @description:获得记录的总数
    	 * @author:Administrator
    	 * @return:long
    	 * @return
    	 */
    
    	public long getCount() {
    		SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
    		// 方法1
    		// Cursor cursor = db.rawQuery("select count(*) from person", null);
    		// 方法2
    		Cursor cursor = db.query("person", new String[] { "count('*')" }, null,
    				null, null, null, null, null);
    		cursor.moveToFirst();
    		// 获得第一个字段的全部记录数
    		long count = cursor.getLong(0);
    		cursor.close();
    		Log.v(TAG, "记录总数" + count);
    		return count;
    	}
    }

        最后使用单元测试来测试功能:

    /**
     * @FILE:DBTest.java
     * @AUTHOR:Administrator
     * @DATE:2013-5-14 下昼11:52:06
     **/
    package com.yehui.db;
    
    import java.util.List;
    
    import android.app.Activity;
    import android.database.sqlite.SQLiteDatabase;
    import android.os.Bundle;
    import android.test.AndroidTestCase;
    import android.view.Menu;
    
    import com.yehui.entity.Person;
    import com.yehui.service.DBOpenHelper;
    import com.yehui.service.PersonService;
    
    /*******************************************
     * 
     * @CLASS:DBTest
     * @DESCRIPTION:sqlite单元测试必须继承AndroidTestCase
     * @AUTHOR:Administrator
     * @VERSION:v1.0
     * @DATE:2013-5-14 下昼11:52:06
     *******************************************/
    public class DBTest extends AndroidTestCase  {
    	private DBOpenHelper dbOpenHelper;
    	private SQLiteDatabase sqliteDatabase;
    	public void createDB() {
    		dbOpenHelper = new DBOpenHelper(this.getContext());
    		// 创立数据表
    		sqliteDatabase = dbOpenHelper.getWritableDatabase();
    	}
    
    	public void save() {
    		PersonService personService = new PersonService(
    				this.getContext());
    		Person person = new Person("zhangxueyou", "123456");
    		personService.save(person);
    	}
    
    	public void delete() {
    		PersonService personService = new PersonService(
    				this.getContext());
    		personService.delete(2);
    	}
    
    	public void update() {
    		PersonService personService = new PersonService(
    				this.getContext());
    		Person person = personService.find(1);
    		person.setName("guofucheng");
    		personService.update(person);
    	}
    
    	public Person find() {
    		PersonService personService = new PersonService(
    				this.getContext());
    		Person person = personService.find(1);
    		return person;
    	}
    
    	public List<Person> getScrollData() {
    		PersonService personService = new PersonService(
    				this.getContext());
    		List<Person> persons = personService.getScrollData(0, 2);
    		return persons;
    	}
    
    	public long getCount() {
    		PersonService personService = new PersonService(
    				this.getContext());
    		long count = personService.getCount();
    		return count;
    	}
    }

        好了,总结就这么多了。

        

        

        

    文章结束给大家分享下程序员的一些笑话语录: 面试官:熟悉哪种语言
    应聘者:JAVA
    面试官:知道什么叫类么
    应聘者:我这人实在,工作努力,不知道什么叫累
    面试官:知道什么是包?
    应聘者:我这人实在 平常不带包 也不用公司准备了
    面试官:知道什么是接口吗?
    应聘者:我这个人工作认真。从来不找借口偷懒
    面试官:知道什么是继承么
    应聘者:我是孤儿没什么可以继承的
    面试官:知道什么叫对象么?
    应聘者:知道,不过我工作努力,上进心强,暂时还没有打算找对象。
    面试官:知道多态么?
    应聘者:知道,我很保守的。我认为让心爱的女人为了自已一时的快乐去堕胎是不道德的行为!请问这和C#有什么关系??

  • 相关阅读:
    【EF学习笔记05】----------操作内存中的数据
    【EF学习笔记05】----------DBContext基础查询
    【EF学习笔记04】----------EF简单增删改查
    【EF学习笔记03】----------使用原生Sql语句
    EntityFramework追踪Sql语句
    博客园自定义样式(标题 h1 h2 h3)
    SQLserver2012 修改数据库架构
    IIS7 配置URL_REWRITE
    maven项目使用mybatis-generator自动生成代码
    myeclipse关闭properties文件自动转义
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3080472.html
Copyright © 2020-2023  润新知