安卓实训第十三天---SQLITE中的事务操作以及方法的复习

UserDaoImpl中的方法:
  public void transaction() {  
        SQLiteDatabase db = dh.getReadableDatabase();  
        //开始事务   
        db.beginTransaction();  
        try {  
            db.execSQL("update users set usersalary=? where userid=?",  
                    new Object[] { 3000, 11 });  
            db.execSQL("update users set usersalary=? where userid=?",  
                    new Object[] { 2000, 12 });  
            db.setTransactionSuccessful();// 设置事务标志为成功,在事务结束时才会提供事务,否则回滚事务   
  
        } catch (Exception e) {  
            e.printStackTrace();  
        } finally {  
            //如果没有成功回滚事务   
            db.endTransaction();  
        }  
  
    }  
  
测试类中的:
  // 有关事务的处理方式     
    public void testTransaction() {    
        DatabaseHelper databaseHelper = new DatabaseHelper(getContext());  
        UserDaoImpl userDaoImpl = new UserDaoImpl(databaseHelper);  
    
       userDaoImpl.transaction();  
    
    }    

 

注意:以下内容转自赵雅智博客内容,版权归她所有:

Android提供了一个名为SQLiteDatabase的类,该类封装了一些操作数据库的API,使用该类可以完成对数据进行添加(Create)、查询(Retrieve)、更新(Update)和删除(Delete)操作(这些操作简称为CRUD)。

execSQL()和rawQuery()方法。

对SQLiteDatabase的学习,我们应该重点掌握execSQL()和rawQuery()方法。 

  • execSQL()方法可以执行insert、delete、updateCREATE TABLE之类有更改行为的SQL语句;
    • execSQL()方法的使用例子:

      SQLiteDatabase db = ....;

      db.execSQL("insert into person(name, age) values('CSDN', 4)");

      db.close();

      执行上面SQL语句会往person表中添加进一条记录,在实际应用中, 语句中的“csdn”这些参数值会由用户输入界面提供,如果把用户输入的内容原样组拼到上面的insert语句, 当用户输入的内容含有单引号时,组拼出来的SQL语句就会存在语法错误。要解决这个问题需要对单引号进行转义,也就是把单引号转换成两个单引号。有些时候用户往往还会输入像“ & ”这些特殊SQL符号,为保证组拼好的SQL语句语法正确,必须对SQL语句中的这些特殊SQL符号都进行转义,显然,对每条SQL语句都做这样的处理工作是比较烦琐的。 SQLiteDatabase类提供了一个重载后的execSQL(String sql, Object[] bindArgs)方法,使用这个方法可以解决前面提到的问题,因为这个方法支持使用占位符参数(?)。使用例子如下:

      SQLiteDatabase db = ....;

      db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"CSDN", 4}); 
      db.close();

      execSQL(String sql, Object[] bindArgs)方法的第一个参数为SQL语句,第二个参数为SQL语句中占位符参数的值,参数值在数组中的顺序要和占位符的位置对应。


  •  rawQuery()方法可以执行select语句。
    • 使用例子如下:  

      SQLiteDatabase db = ....;
      Cursor cursor = db.rawQuery(“select * from person”, null);
      while (cursor.moveToNext()) {
      int personid = cursor.getInt(0); //获取第一列的值,第一列的索引从0开始
      String name = cursor.getString(1);//获取第二列的值
      int age = cursor.getInt(2);//获取第三列的值
      }
      cursor.close();
      db.close(); 

      rawQuery()方法的第一个参数为select语句;

      第二个参数为select语句中占位符参数的值,如果select语句没有使用占位符,该参数可以设置为null。

      带占位符参数的select语句使用例子如下:
      Cursor cursor = db.rawQuery("select * from person where name like ? and age=?", new String[]{"%传智%", "4"});

Cursor

Cursor是结果集游标,用于对结果集进行随机访问,如果大家熟悉jdbc, 其实Cursor与JDBC中的ResultSet作用很相似。

  • moveToNext()方法可以将游标从当前行移动到下一行,如果已经移过了结果集的最后一行,返回结果为false,否则为true。
  • moveToPrevious()方法(用于将游标从当前行移动到上一行,如果已经移过了结果集的第一行,返回值为false,否则为true )
  • moveToFirst()方法(用于将游标移动到结果集的第一行,如果结果集为空,返回值为false,否则为true )
  • moveToLast()方法(用于将游标移动到结果集的最后一行,如果结果集为空,返回值为false,否则为true ) 。

事务

使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果程序执行到endTransaction()之前调用了setTransactionSuccessful()方法设置事务的标志为成功则提交事务,如果没有调用setTransactionSuccessful() 方法则回滚事务。

使用例子如下:  

SQLiteDatabase db = ....;
db.beginTransaction();//开始事务
try {
    db.execSQL("insert into person(name, age) values(?,?)", new Object[]{"传智播客", 4});
    db.execSQL("update person set name=? where personid=?", new Object[]{"传智", 1});
    db.setTransactionSuccessful();//调用此方法会在执行到endTransaction() 时提交当前事务,如果不调用此方法会回滚事务
} finally {
    db.endTransaction();//由事务的标志决定是提交事务,还是回滚事务

db.close(); 

上面两条SQL语句在同一个事务中执行。

实例

Person.java
  1. package com.example.lession04_db.domain;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. /** 
  6.  * 封装的数据库实体bean 
  7.  * @author zhaoyazhi 
  8.  * 
  9.  */  
  10. public class Person implements Serializable {  
  11.   
  12.     /** 
  13.      *  
  14.      */  
  15.     private static final long serialVersionUID = 1L;  
  16.     private Integer id;  
  17.     private String name;  
  18.     private Integer age;  
  19.     private Integer account;  
  20.   
  21.     public Person() {  
  22.         super();  
  23.         // TODO Auto-generated constructor stub   
  24.     }  
  25.   
  26.     public Person(Integer id, String name, Integer age, Integer account) {  
  27.         super();  
  28.         this.id = id;  
  29.         this.name = name;  
  30.         this.age = age;  
  31.         this.account = account;  
  32.     }  
  33.   
  34.     public Integer getId() {  
  35.         return id;  
  36.     }  
  37.   
  38.     public void setId(Integer id) {  
  39.         this.id = id;  
  40.     }  
  41.   
  42.     public String getName() {  
  43.         return name;  
  44.     }  
  45.   
  46.     public void setName(String name) {  
  47.         this.name = name;  
  48.     }  
  49.   
  50.     public Integer getAge() {  
  51.         return age;  
  52.     }  
  53.   
  54.     public void setAge(Integer age) {  
  55.         this.age = age;  
  56.     }  
  57.   
  58.     public Integer getAccount() {  
  59.         return account;  
  60.     }  
  61.   
  62.     public void setAccount(Integer account) {  
  63.         this.account = account;  
  64.     }  
  65.   
  66.     @Override  
  67.     public String toString() {  
  68.         return "Person [id=" + id + ", name=" + name + ", age=" + age  
  69.                 + ", account=" + account + "]";  
  70.     }  
  71.   
  72. }  
package com.example.lession04_db.domain;

import java.io.Serializable;

/**
 * 封装的数据库实体bean
 * @author zhaoyazhi
 *
 */
public class Person implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Integer id;
	private String name;
	private Integer age;
	private Integer account;

	public Person() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Person(Integer id, String name, Integer age, Integer account) {
		super();
		this.id = id;
		this.name = name;
		this.age = age;
		this.account = account;
	}

	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 Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public Integer getAccount() {
		return account;
	}

	public void setAccount(Integer account) {
		this.account = account;
	}

	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", age=" + age
				+ ", account=" + account + "]";
	}

}


DBOpenHelper.java
  1. package com.example.lession04_db.db;  
  2.   
  3. import android.content.Context;  
  4. import android.database.sqlite.SQLiteDatabase;  
  5. import android.database.sqlite.SQLiteOpenHelper;  
  6. import android.util.Log;  
  7.   
  8. public class DBOpenHelper extends SQLiteOpenHelper {  
  9.     // 数据库的名称   
  10.     private static final String name = "CSDN.db";  
  11.     // 数据库的版本   
  12.     private static final int version = 2;  
  13.   
  14.     public DBOpenHelper(Context context) {  
  15.         // 第三个参数CursorFactory指定在执行查询时获得一个游标实例的工厂类,设置为null,代表使用系统默认的工厂类   
  16.         super(context, name, null, version);  
  17.         Log.v("DBSQLiteOpenHelper""构造器......");  
  18.     }  
  19.   
  20.     // 当数据库第一次创建的时候 执行的方法   
  21.     @Override  
  22.     public void onCreate(SQLiteDatabase db) {  
  23.         // execSQL来执行sql语句   
  24.         db.execSQL("create table person(personid integer primary key autoincrement,name varchar(20),age integer )");  
  25.   
  26.         Log.v("DBSQLiteOpenHelper""onCreate......创建执行一次");  
  27.     }  
  28.   
  29.     // 当数据库的版本发生变化的时候执行的方法   
  30.     @Override  
  31.     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  
  32.         db.execSQL("alter table person add account integer");  
  33.         Log.v("DBSQLiteOpenHelper""当数据库版本更新的时候执行........每次更新都执行 ");  
  34.     }  
  35.   
  36. }  
package com.example.lession04_db.db;

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

public class DBOpenHelper extends SQLiteOpenHelper {
	// 数据库的名称
	private static final String name = "CSDN.db";
	// 数据库的版本
	private static final int version = 2;

	public DBOpenHelper(Context context) {
		// 第三个参数CursorFactory指定在执行查询时获得一个游标实例的工厂类,设置为null,代表使用系统默认的工厂类
		super(context, name, null, version);
		Log.v("DBSQLiteOpenHelper", "构造器......");
	}

	// 当数据库第一次创建的时候 执行的方法
	@Override
	public void onCreate(SQLiteDatabase db) {
		// execSQL来执行sql语句
		db.execSQL("create table person(personid integer primary key autoincrement,name varchar(20),age integer )");

		Log.v("DBSQLiteOpenHelper", "onCreate......创建执行一次");
	}

	// 当数据库的版本发生变化的时候执行的方法
	@Override
	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		db.execSQL("alter table person add account integer");
		Log.v("DBSQLiteOpenHelper", "当数据库版本更新的时候执行........每次更新都执行 ");
	}

}


PersonDao.java
  1. package com.example.lession04_db.dao;  
  2.   
  3. import java.util.List;  
  4.   
  5. import com.example.lession04_db.domain.Person;  
  6.   
  7. import android.database.sqlite.SQLiteDatabase;  
  8.   
  9.   
  10. public interface PersonDao {  
  11.   
  12.       
  13.     /** 
  14.      * 插入数据 
  15.      * @param db 
  16.      * @param entity 
  17.      */  
  18.     public void insert(Person entity);  
  19.     /** 
  20.      * 更新数据 
  21.      * @param db 
  22.      * @param entity 
  23.      */  
  24.     public void update(Person entity);  
  25.     /** 
  26.      * 删除数据 
  27.      * @param db 
  28.      * @param id 
  29.      */  
  30.     public void delete(Integer id);  
  31.     /** 
  32.      * 查询所有数据 
  33.      * @param db 
  34.      * @return 
  35.      */  
  36.     public List<Person> findAll();  
  37.       
  38.     /** 
  39.      * 获取当前页信息 
  40.      * @param db 
  41.      * @param nowpage 
  42.      * @param pagesize 
  43.      * @return 
  44.      */  
  45.     public List<Person> getNowPageInfo(int nowpage,int pagesize);  
  46.       
  47.     /** 
  48.      * 根据用户的id查询用户信息(条件查询) 
  49.      * @param db 
  50.      * @param id 
  51.      * @return 
  52.      */  
  53.     public Person findById(Integer id);  
  54.       
  55.     /** 
  56.      * 获取总记录 
  57.      * @param db 
  58.      * @return 
  59.      */  
  60.     public long getCount();<PRE class=java name="code">       /** 
  61.      * 事务处理 
  62.      * @param db 
  63.      * @return 
  64.      */</PRE>void payment();}  
  65. <PRE></PRE>  
  66. <PRE></PRE>  
package com.example.lession04_db.dao;

import java.util.List;

import com.example.lession04_db.domain.Person;

import android.database.sqlite.SQLiteDatabase;


public interface PersonDao {

	
	/**
	 * 插入数据
	 * @param db
	 * @param entity
	 */
	public void insert(Person entity);
	/**
	 * 更新数据
	 * @param db
	 * @param entity
	 */
	public void update(Person entity);
	/**
	 * 删除数据
	 * @param db
	 * @param id
	 */
	public void delete(Integer id);
	/**
	 * 查询所有数据
	 * @param db
	 * @return
	 */
	public List<Person> findAll();
	
	/**
	 * 获取当前页信息
	 * @param db
	 * @param nowpage
	 * @param pagesize
	 * @return
	 */
	public List<Person> getNowPageInfo(int nowpage,int pagesize);
	
	/**
	 * 根据用户的id查询用户信息(条件查询)
	 * @param db
	 * @param id
	 * @return
	 */
	public Person findById(Integer id);
	
	/**
	 * 获取总记录
	 * @param db
	 * @return
	 */
	public long getCount();<div class="dp-highlighter bg_java" sizcache="27" sizset="89"><div class="bar" sizcache="27" sizset="89"><div class="tools" sizcache="27" sizset="89"><strong>[java]</strong> <a target=_blank title="view plain" class="ViewSource" href="http://blog.csdn.net/zhaoyazhi2129/article/details/9025995#">view plain</a><a target=_blank title="copy" class="CopyToClipboard" href="http://blog.csdn.net/zhaoyazhi2129/article/details/9025995#">copy</a><a target=_blank title="print" class="PrintSource" href="http://blog.csdn.net/zhaoyazhi2129/article/details/9025995#">print</a><a target=_blank title="?" class="About" href="http://blog.csdn.net/zhaoyazhi2129/article/details/9025995#">?</a></div></div><ol class="dp-j"><li class="alt"><span><span>     </span><span class="comment">/**</span> </span></li><li><span><span class="comment">* 事务处理</span> </span></li><li class="alt"><span><span class="comment">* @param db</span> </span></li><li><span><span class="comment">* @return</span> </span></li><li class="alt"><span><span class="comment">*/</span><span>  </span></span></li></ol></div><pre class="java" style="DISPLAY: none" name="code">       /**
	 * 事务处理
	 * @param db
	 * @return
	 */
void payment();}
 
 
 
 
 
PersonDaoImpl.java
  1. package com.example.lession04_db.dao;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import com.example.lession04_db.db.DBOpenHelper;  
  7. import com.example.lession04_db.db.DBSQLiteOpenHelper;  
  8. import com.example.lession04_db.domain.Person;  
  9.   
  10. import android.content.Context;  
  11. import android.database.Cursor;  
  12. import android.database.sqlite.SQLiteDatabase;  
  13.   
  14.   
  15. public class PersonDaoImpl implements PersonDao {  
  16.     private DBOpenHelper dbOpenHelper;  
  17.   
  18.     public PersonDaoImpl(Context context) {  
  19.         super();  
  20.         dbOpenHelper = new DBOpenHelper(context);  
  21.     }  
  22.     @Override  
  23.     public void insert(Person entity) {  
  24.         SQLiteDatabase db = dbOpenHelper.getWritableDatabase();  
  25.         if (db.isOpen()) {  
  26.             db.execSQL(  
  27.                     "insert into person(name,age,account) values(?,?,?)",  
  28.                     new Object[] { entity.getName(), entity.getAge(),  
  29.                             entity.getAccount() });  
  30.             db.close();  
  31.         }  
  32.     }  
  33.   
  34.     @Override  
  35.     public void update( Person entity) {  
  36.         SQLiteDatabase db = dbOpenHelper.getWritableDatabase();  
  37.         if (db.isOpen()) {  
  38.             db.execSQL(  
  39.                     "update person set name=?,age=?,account=? where personid=?",  
  40.                     new Object[] { entity.getName(), entity.getAge(),  
  41.                             entity.getAccount(), entity.getId() });  
  42.             db.close();  
  43.         }  
  44.   
  45.     }  
  46.   
  47.     @Override  
  48.     public void delete( Integer id) {  
  49.         SQLiteDatabase db = dbOpenHelper.getWritableDatabase();  
  50.         if (db.isOpen()) {  
  51.             db.execSQL("delete from person where personid=?",  
  52.                     new Object[] { id });  
  53.             db.close();  
  54.         }  
  55.   
  56.     }  
  57.   
  58.     @Override  
  59.     public List<Person> findAll() {  
  60.         List<Person> persons = new ArrayList<Person>();  
  61.         SQLiteDatabase db = dbOpenHelper.getWritableDatabase();  
  62.         if (db.isOpen()) {  
  63.             // 查询   
  64.             Cursor cursor = db.rawQuery(  
  65.                     "select personid,name,age,account from person"null);  
  66.             // 判断是否含有下一个   
  67.             while (cursor.moveToNext()) {  
  68.                 // 创建person对象   
  69.                 Person person = new Person();  
  70.                 // 为对象的属性赋值   
  71.                 person.setId(cursor.getInt(0));  
  72.                 person.setName(cursor.getString(1));  
  73.                 person.setAge(cursor.getInt(2));  
  74.                 person.setAccount(cursor.getInt(3));  
  75.                 // 添加到集合中   
  76.                 persons.add(person);  
  77.             }  
  78.         }  
  79.   
  80.         return persons;  
  81.     }  
  82.   
  83.     @Override  
  84.     public List<Person> getNowPageInfo( int nowpage,  
  85.             int pagesize) {  
  86.         SQLiteDatabase db = dbOpenHelper.getWritableDatabase();  
  87.         // 开始记录   
  88.         int start = (nowpage - 1) * pagesize;  
  89.   
  90.         List<Person> persons = new ArrayList<Person>();  
  91.         if (db.isOpen()) {  
  92.             // 查询   
  93.             Cursor cursor = db.rawQuery("select personid,name,age,account from person limit ?,?",  
  94.                     new String[] { start + "", pagesize + "" });  
  95.             // 判断是否含有下一个   
  96.             while (cursor.moveToNext()) {  
  97.                 // 创建person对象   
  98.                 Person person = new Person();  
  99.                 // 为对象的属性赋值   
  100.                 person.setId(cursor.getInt(0));  
  101.                 person.setName(cursor.getString(1));  
  102.                 person.setAge(cursor.getInt(2));  
  103.                 person.setAccount(cursor.getInt(3));  
  104.                 // 添加到集合中   
  105.                 persons.add(person);  
  106.             }  
  107.         }  
  108.   
  109.         return persons;  
  110.   
  111.     }  
  112.   
  113.     @Override  
  114.     public Person findById( Integer id) {  
  115.         SQLiteDatabase db = dbOpenHelper.getWritableDatabase();  
  116.         Person person =null;  
  117.         if (db.isOpen()) {  
  118.             // 查询   
  119.             Cursor cursor = db.rawQuery("select personid,name,age,account from person where personid = ?"new String[]{""+id});  
  120.             // 判断是否含有下一个   
  121.             if (cursor.moveToNext()) {  
  122.                 person = new Person();  
  123.                 // 创建person对象   
  124.                 // 为对象的属性赋值   
  125.                 person.setId(cursor.getInt(0));  
  126.                 person.setName(cursor.getString(1));  
  127.                 person.setAge(cursor.getInt(2));  
  128.                 person.setAccount(cursor.getInt(3));  
  129.   
  130.             }  
  131.         }  
  132.   
  133.         return person;  
  134.     }  
  135.     @Override  
  136.     public long getCount() {  
  137.         SQLiteDatabase db = dbOpenHelper.getWritableDatabase();  
  138.         Cursor cursor = db.rawQuery("select count(*) from person"null);  
  139.         cursor.moveToFirst();  
  140.   
  141.         return cursor.getLong(0);  
  142.   
  143.     }  
  144.     @Override  
  145.     public void payment() {  
  146.         SQLiteDatabase db = dbOpenHelper.getReadableDatabase();  
  147.         db.beginTransaction();  
  148.         try {  
  149.             db.execSQL("update person set account=account-10 where personid=?",  
  150.                     new Object[] { 1 });  
  151.             db.execSQL("update person set account=account+10 where personid=?",  
  152.                     new Object[] { 2 });  
  153.             db.setTransactionSuccessful();// 设置事务标志为成功,在事务结束时才会提供事务,否则回滚事务   
  154.   
  155.         } finally {  
  156.             db.endTransaction();  
  157.         }  
  158.   
  159.     }  
  160.   
  161. }  
package com.example.lession04_db.dao;

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

import com.example.lession04_db.db.DBOpenHelper;
import com.example.lession04_db.db.DBSQLiteOpenHelper;
import com.example.lession04_db.domain.Person;

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


public class PersonDaoImpl implements PersonDao {
	private DBOpenHelper dbOpenHelper;

	public PersonDaoImpl(Context context) {
		super();
		dbOpenHelper = new DBOpenHelper(context);
	}
	@Override
	public void insert(Person entity) {
		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
		if (db.isOpen()) {
			db.execSQL(
					"insert into person(name,age,account) values(?,?,?)",
					new Object[] { entity.getName(), entity.getAge(),
							entity.getAccount() });
			db.close();
		}
	}

	@Override
	public void update( Person entity) {
		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
		if (db.isOpen()) {
			db.execSQL(
					"update person set name=?,age=?,account=? where personid=?",
					new Object[] { entity.getName(), entity.getAge(),
							entity.getAccount(), entity.getId() });
			db.close();
		}

	}

	@Override
	public void delete( Integer id) {
		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
		if (db.isOpen()) {
			db.execSQL("delete from person where personid=?",
					new Object[] { id });
			db.close();
		}

	}

	@Override
	public List<Person> findAll() {
		List<Person> persons = new ArrayList<Person>();
		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
		if (db.isOpen()) {
			// 查询
			Cursor cursor = db.rawQuery(
					"select personid,name,age,account from person", null);
			// 判断是否含有下一个
			while (cursor.moveToNext()) {
				// 创建person对象
				Person person = new Person();
				// 为对象的属性赋值
				person.setId(cursor.getInt(0));
				person.setName(cursor.getString(1));
				person.setAge(cursor.getInt(2));
				person.setAccount(cursor.getInt(3));
				// 添加到集合中
				persons.add(person);
			}
		}

		return persons;
	}

	@Override
	public List<Person> getNowPageInfo( int nowpage,
			int pagesize) {
		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
		// 开始记录
		int start = (nowpage - 1) * pagesize;

		List<Person> persons = new ArrayList<Person>();
		if (db.isOpen()) {
			// 查询
			Cursor cursor = db.rawQuery("select personid,name,age,account from person limit ?,?",
					new String[] { start + "", pagesize + "" });
			// 判断是否含有下一个
			while (cursor.moveToNext()) {
				// 创建person对象
				Person person = new Person();
				// 为对象的属性赋值
				person.setId(cursor.getInt(0));
				person.setName(cursor.getString(1));
				person.setAge(cursor.getInt(2));
				person.setAccount(cursor.getInt(3));
				// 添加到集合中
				persons.add(person);
			}
		}

		return persons;

	}

	@Override
	public Person findById( Integer id) {
		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
		Person person =null;
		if (db.isOpen()) {
			// 查询
			Cursor cursor = db.rawQuery("select personid,name,age,account from person where personid = ?", new String[]{""+id});
			// 判断是否含有下一个
			if (cursor.moveToNext()) {
				person = new Person();
				// 创建person对象
				// 为对象的属性赋值
				person.setId(cursor.getInt(0));
				person.setName(cursor.getString(1));
				person.setAge(cursor.getInt(2));
				person.setAccount(cursor.getInt(3));

			}
		}

		return person;
	}
	@Override
	public long getCount() {
		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
		Cursor cursor = db.rawQuery("select count(*) from person", null);
		cursor.moveToFirst();

		return cursor.getLong(0);

	}
	@Override
	public void payment() {
		SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
		db.beginTransaction();
		try {
			db.execSQL("update person set account=account-10 where personid=?",
					new Object[] { 1 });
			db.execSQL("update person set account=account+10 where personid=?",
					new Object[] { 2 });
			db.setTransactionSuccessful();// 设置事务标志为成功,在事务结束时才会提供事务,否则回滚事务

		} finally {
			db.endTransaction();
		}

	}

}


DBTest.java
  1. package com.example.lession04_db.test;  
  2.   
  3. import java.util.List;  
  4.   
  5. import com.example.lession04_db.dao.PersonDao;  
  6. import com.example.lession04_db.dao.PersonDaoImpl;  
  7. import com.example.lession04_db.db.DBOpenHelper;  
  8. import com.example.lession04_db.domain.Person;  
  9.   
  10. import android.database.sqlite.SQLiteDatabase;  
  11. import android.test.AndroidTestCase;  
  12. import android.util.Log;  
  13.   
  14. public class DBTest extends AndroidTestCase {  
  15.     private static final String TAG = "DBTest";  
  16.     private PersonDao personDao;  
  17.   
  18.     public void testDBCreate() throws Exception {  
  19.         DBOpenHelper dbOpenHelper = new DBOpenHelper(this.getContext());  
  20.         dbOpenHelper.getWritableDatabase();  
  21.     }  
  22.   
  23.     public void insert() {  
  24.         // 创建数据库管理的对象   
  25.         personDao = new PersonDaoImpl(this.getContext());  
  26.         // 获取SQLiteDatabase实例对象才能创建数据库   
  27.         for (int i = 1; i < 10; i++) {  
  28.             Person entity = new Person(null"zyz" + i, 20 + i, 1000 + i);  
  29.             personDao.insert(entity);  
  30.         }  
  31.   
  32.     }  
  33.   
  34.     public void update() {  
  35.         personDao = new PersonDaoImpl(this.getContext());  
  36.   
  37.         Person entity = new Person(1"xinxt"2910000 * 2);  
  38.   
  39.         personDao.update( entity);  
  40.   
  41.     }  
  42.   
  43.     public void delete() {  
  44.   
  45.         personDao = new PersonDaoImpl(this.getContext());  
  46.   
  47.         personDao.delete(  1);  
  48.   
  49.     }  
  50.   
  51.     public void findAll() {  
  52.         personDao = new PersonDaoImpl(this.getContext());  
  53.         List<Person> persons = personDao.findAll();  
  54.   
  55.         for (Person p : persons) {  
  56.             System.out.println(p.toString());  
  57.         }  
  58.     }  
  59.   
  60.     public void getNowPageInfo() {  
  61.   
  62.         personDao = new PersonDaoImpl(this.getContext());  
  63.   
  64.         List<Person> persons = personDao.getNowPageInfo( 15);  
  65.   
  66.         for (Person p : persons) {  
  67.             System.out.println(p.toString());  
  68.         }  
  69.     }  
  70.   
  71.     public void findById() {  
  72.   
  73.         personDao = new PersonDaoImpl(this.getContext());  
  74.         Person p = personDao.findById(  2);  
  75.   
  76.         if (p != null) {  
  77.             System.out.println(p.toString());  
  78.         }  
  79.   
  80.     }  
  81.   
  82.     public void testCount() throws Throwable {  
  83.         personDao = new PersonDaoImpl(this.getContext());  
  84.         Log.i(TAG, personDao.getCount( ) + "");  
  85.     }  
  86.   
  87.     // 有关事务的处理方式   
  88.     public void testTransaction() {  
  89.         // 创建数据库管理的对象   
  90.         DBOpenHelper db = new DBOpenHelper(this.getContext());  
  91.         // 获取SQLiteDatabase实例对象才能创建数据库   
  92.         SQLiteDatabase sdb = db.getWritableDatabase();  
  93.   
  94.         Person entity = new Person(null"xxxz"301000);  
  95.   
  96.         sdb.beginTransaction();// 开启事务   
  97.         try {  
  98.   
  99.             // 执行的第一个sql语句   
  100.             sdb.execSQL(  
  101.                     "insert into person(name,age,account) values(?,?,?)",  
  102.                     new Object[] { entity.getName(), entity.getAge(),  
  103.                             entity.getAccount() });  
  104.   
  105.             entity = new Person(10"zzzxx"301000);  
  106.   
  107.             // int i=1/0;   
  108.             // 执行的第二个sql语句   
  109.             sdb.execSQL(  
  110.                     "update person set name=?,age=?,account=? where personid=?",  
  111.                     new Object[] { entity.getName(), entity.getAge(),  
  112.                             entity.getAccount(), entity.getId() });  
  113.             sdb.setTransactionSuccessful(); // 提交事务   
  114.         } catch (Exception e) {  
  115.             Log.v("csdn", e.getMessage());  
  116.         } finally {  
  117.             sdb.endTransaction();// 结束事务   
  118.         }  
  119.         sdb.close();  
  120.   
  121.     }  
  122.     public void testPayment() throws Throwable {  
  123.         personDao = new PersonDaoImpl(this.getContext());  
  124.         personDao.payment();  
  125.     }  
  126. }  

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值