android基本方式对数据库的操作
来源:互联网 发布:js实现小球掉落动画 编辑:程序博客网 时间:2024/05/22 15:17
person表:
create table person(
_id integer primary key autoincrement,
name varchar(20),
age integer
);
<span style="font-size:14px;">package com.sqf.sql.db;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{private static final String TAG = "PersonSQLiteOpenHelper";/** * 构造方法的四个参数 * 1.上下文 * 2.数据库的名称 * 3.游标工程 * 4.数据库的版本,从1开始 * */public PersonSQLiteOpenHelper(Context context, String name,CursorFactory factory, int version) {super(context, "sql.db", null, 2);}public PersonSQLiteOpenHelper(Context context) {super(context, "sql.db", null, 2);}/** * 数据库第一次创建的时,回调此方法 * 初始化一些表 * */@Overridepublic void onCreate(SQLiteDatabase db) {//操作数据库String sql = "create table person(_id integer primary key autoincrement,name varchar(20),age integer);";db.execSQL(sql); //创建person表}/** * 数据库版本号更新时回调此方法 * 更新数据库的内容(删除表,修改表,添加表) * */@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {if(oldVersion == 1 && newVersion == 2){ //在person表中添加余额列balanceLog.i(TAG, "数据库更新了");//在person表添加一列db.execSQL("alter table person add balance integer;");}}}</span>
<span style="font-size:14px;">package com.sqf.sql.dao;import java.util.ArrayList;import java.util.List;import android.content.Context;import android.database.Cursor;import android.database.sqlite.SQLiteDatabase;import com.sqf.sql.db.PersonSQLiteOpenHelper;import com.sqf.sql.entities.Person;public class PersonDao {PersonSQLiteOpenHelper mOpenHelper;//数据库的帮助类public PersonDao(Context context){ mOpenHelper = new PersonSQLiteOpenHelper(context); }/** * 添加到person表一条数据 * */public void insert(Person person){SQLiteDatabase db = mOpenHelper.getWritableDatabase();if(db.isOpen()){ //如果数据库打开//db.execSQL("insert into person(name,age) values('lisi','1');");//执行添加到数据库的操作db.execSQL("insert into person(name,age) values(?,?)", new Object[]{person.getName(),person.getAge()});db.close(); //数据库关闭}}public void delete(int id){SQLiteDatabase db = mOpenHelper.getWritableDatabase();//获得可写入数据库对象if(db.isOpen()){db.execSQL("delete from person where _id = ?", new Integer[]{id});db.close();}}public void update(int id,String name){SQLiteDatabase db = mOpenHelper.getWritableDatabase();if(db.isOpen()){db.execSQL("update person set name = ? where id = ?", new Object[]{name,id});db.close();}}public List<Person> queryAll(){SQLiteDatabase db = mOpenHelper.getReadableDatabase();if(db.isOpen()){Cursor cursor = db.rawQuery("select _id,name,age from person", null);// 没有? 第二个参数为nulif(cursor != null && cursor.getCount() > 0){List<Person> personList = new ArrayList<Person>();int id;String name;int age;while(cursor.moveToNext()){ id = cursor.getInt(0); //取第0列的数据id name = cursor.getString(1); age = cursor.getInt(2); personList.add(new Person(id,name,age));}db.close();return personList;}db.close();}return null;}public Person queryItem(int id){SQLiteDatabase db = mOpenHelper.getReadableDatabase();if(db.isOpen()){Cursor cursor = db.rawQuery("select _id,name,age from person where _id = ?", new String[]{id+""});if(cursor != null && cursor.moveToFirst()){int _id = cursor.getInt(0);String name = cursor.getString(1);int age = cursor.getInt(2);db.close();return new Person(_id,name,age); }db.close();}return null;}}</span>
<span style="font-size:14px;">package com.sqf.sql.entities;public class Person {private int id;private String name;private int age;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Person [id=" + id + ", name=" + name + ", age=" + age + "]";}public Person(int id, String name, int age) {super();this.id = id;this.name = name;this.age = age;}public Person() {super();}}</span>
Junit测试:
package com.sqf.sql.test;import java.util.List;import com.sqf.sql.dao.PersonDao;import com.sqf.sql.db.PersonSQLiteOpenHelper;import com.sqf.sql.entities.Person;import android.database.SQLException;import android.database.sqlite.SQLiteDatabase;import android.test.AndroidTestCase;import android.util.Log;public class TestCase extends AndroidTestCase {private static final String TAG = "TestCase";public void test(){//数据库什么时候创建PersonSQLiteOpenHelper openHelper = new PersonSQLiteOpenHelper(getContext());// 第一次连接数据库时创建数据库文件,并调用onCreateopenHelper.getReadableDatabase();}public void testInsert(){PersonDao dao = new PersonDao(getContext());for(int i=0;i<20;i++){dao.insert(new Person(i,"大话"+i,20));}}public void testDelete(){PersonDao dao = new PersonDao(getContext());dao.delete(1);}public void testUpdate(){PersonDao dao = new PersonDao(getContext());dao.update(2, "哈哈");}public void testQueryAll(){PersonDao dao = new PersonDao(getContext());List<Person> queryAll = dao.queryAll();for(Person person:queryAll){Log.i(TAG, person.toString());}}public void testQuery(){PersonDao dao = new PersonDao(getContext());Person person = dao.queryItem(2);Log.i(TAG, person.toString());}public void testTransaction(){PersonSQLiteOpenHelper openHelper = new PersonSQLiteOpenHelper(getContext());SQLiteDatabase db = openHelper.getWritableDatabase();if(db.isOpen()){try {//开启事务db.beginTransaction();//从张三账户扣除1000db.execSQL("update person set balance =balance-1000 where name = 'zhangsan'");//ATM机挂了// int a = 1/0; //向李四账户加1000db.execSQL("update person set balance =balance+1000 where name = 'lisi'");//标记事务成功db.setTransactionSuccessful();//标记,进行提交} catch (SQLException e) {e.printStackTrace();} finally{//停止事务db.endTransaction();}db.close();}}public void testTransactionInsert(){PersonSQLiteOpenHelper openHelper = new PersonSQLiteOpenHelper(getContext());SQLiteDatabase db = openHelper.getWritableDatabase();//插入没有开启事务 消耗的毫秒37890//插入10000条 开启事务 消耗的毫秒6112if(db.isOpen()){//1.记录当前时间long start = System.currentTimeMillis();//2.开始添加数据try {db.beginTransaction();for(int i=0;i<10000;i++){db.execSQL("insert into person(name,age,balance) values('wang"+i+"',"+(10+i)+","+(10000+i)+")");}db.setTransactionSuccessful();} catch (SQLException e) {db.endTransaction();e.printStackTrace();}//3.记录结束时间,计算消耗long end = System.currentTimeMillis();long diff = end - start;Log.i(TAG, "消耗的毫秒" + diff);db.close();}}}
0 0
- android基本方式对数据库的操作
- Android对数据库的基本操作
- 对数据库的基本操作
- 对数据库的基本操作
- Android 联系人数据库介绍以及对联系人的基本操作
- Android 联系人数据库介绍以及对联系人的基本操作
- Android 联系人数据库介绍以及对联系人的基本操作
- Android 联系人数据库介绍以及对联系人的基本操作
- Android 联系人数据库介绍以及对联系人的基本操作
- Android 联系人数据库介绍以及对联系人的基本操作
- Android 联系人数据库介绍以及对联系人的基本操作
- Android 联系人数据库介绍以及对联系人的基本操作
- Android 联系人数据库介绍以及对联系人的基本操作
- JDBC对数据库的基本操作
- JDBC对数据库的基本操作
- servlet对数据库的基本操作
- sql2005对数据库的一些基本操作
- c#对oracle数据库的基本操作
- android 面试经典(4)
- 深入浅出RxJava(一:基础篇)
- 【杭电】[5660]jrMz and angles
- C++Primer第5版读书笔记(第12章)
- ggplot2-设置图例(legend)
- android基本方式对数据库的操作
- ShaderToy 水彩画
- 【js】:js如何实现给网页某一地方显示指定内容
- 杭州电子科技大学(HDU)ACM刷题----------汉字统计
- jvm之类的加载、连接、初始化
- 操作系统内存管理——分区、页式、段式管理
- OS X EI Captan 中Rootless
- InterlliJ IDEA编写带有命令行参数的Java程序
- Unity3D 学习笔记7 —— 获取热更新资源文件的MD5码