Android之数据库操作
安卓数据库帮助类
/**
* 数据库帮助类,用于管理数据库
* @author Administrator
*
*/
public class PersonSQLiteOpenHelper extends SQLiteOpenHelper {
private String tag="PersonSQLiteOpenHelper";
public PersonSQLiteOpenHelper(Context context) {
//数据库名,数据库版本号
super(context, "zj.db", null, 2);
// TODO Auto-generated constructor stub
}
/**
* 数据库第一次创建时调用此方法
*/
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
//操作数据库
String sql="create table person(_id integer primary key,name varchar(20),age integer);";
db.execSQL(sql);
}
/**
* 更新数据库的内容
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
if(oldVersion==1&&newVersion==2)
{
Log.i(tag, "数据库更新了");
//在表中添加一个余额列
db.execSQL("alter table person add balance interger;");
}else if(oldVersion==2&&newVersion==3)
{
//其他操作
}
}
}
其中onCreate只在第一次创建是调用,OnUpergrade在数据库版本号升级,如要修改数据库,为数据库增加一列,或删除一列的情况下使用
数据库操作
打开数据库
private PersonSQLiteOpenHelper mOpenHelper;//数据库帮助类
public PersonDao(Context context)
{
mOpenHelper = new PersonSQLiteOpenHelper(context);
}
由mOpenHelper得到数据库
SQLiteDatabase db= mOpenHelper.getWritableDatabase();
此时可设置版本号,便会根据版本号调用OnUpgrate
db.getVersion();
db.setVersion(2);
对数据库增删改查有两种方式
插入数据 ,直接用SQL语句
public void insert(Person person)
{
SQLiteDatabase db= mOpenHelper.getWritableDatabase();
if(db.isOpen())
{
//执行添加的操作
db.execSQL("insert into person(name, age) values(?, ?);",new Object[]{person.getName(),person.getAge()});
db.close();
}
}
插入数据方法二
public void insert(Person person)
{
SQLiteDatabase db= mOpenHelper.getWritableDatabase();
if(db.isOpen())
{
ContentValues values=new ContentValues();
values.put("name", person.getName());
values.put("age", person.getAge());
//执行添加的操作
long id=db.insert("person", null, values);
Log.i(tag, "id:"+id);
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 void delete(int id)
{
SQLiteDatabase db= mOpenHelper.getWritableDatabase();
if(db.isOpen())
{
//执行添加的操作
String whereClause=" _id = ?";
String []whereArgs={id+""};
int count=db.delete("person", whereClause,whereArgs );
Log.i(tag, "count="+count+"行");
db.close();
}
}
public void update(int id,String name)
{
SQLiteDatabase db= mOpenHelper.getWritableDatabase();
if(db.isOpen())
{
//执行添加的操作
ContentValues values=new ContentValues();
values.put("name", name);
int count=db.update("person", values, "_id=?", new String[]{id+""});
Log.i(tag, "修改了count="+count+"行");
db.close();
}
}
第一种方法查询一项与查询所有
public List<Person> queryAll()
{
SQLiteDatabase db= mOpenHelper.getReadableDatabase();
if(db.isOpen())
{
Cursor cursor= db.rawQuery("select * from person;", null);
if(cursor!=null&&cursor.getCount()>0)
{
List<Person> personList=new ArrayList<Person>();
int id;
String name;
int age;
while(cursor.moveToNext())
{
id=cursor.getInt(0);
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 * from person where id= ?;", new String []{id+""});
if(cursor!=null&&cursor.moveToFirst())
{
int id1=cursor.getInt(0);
String name=cursor.getString(1);
int age=cursor.getInt(2);
db.close();
return new Person(id1,name,age);
}
db.close();
}
return null;
}
第二种方法查询数据库
public List<Person> queryAll()
{
SQLiteDatabase db= mOpenHelper.getReadableDatabase();
if(db.isOpen())
{
String [] columns={"_id","name","age"};
String selection=null;
String[] selectionArgs=null;
String groupBy=null;
String having=null;
String orderBy=null;
Cursor cursor=db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);
int id;
String name;
int age;
if(cursor!=null&&cursor.getCount()>0)
{
List<Person> personList=new ArrayList<Person>();
while(cursor.moveToNext())
{
//向下移一位
id=cursor.getInt(0);
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())
{
String [] columns={"_id","name","age"};
String selection="_id=?";
String[] selectionArgs={id+""};
String groupBy=null;
String having=null;
String orderBy=null;
Cursor cursor=db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);
int _id;
String name;
int age;
if(cursor!=null&&cursor.moveToFirst())
{
_id=cursor.getInt(0);
name=cursor.getString(1);
age=cursor.getInt(2);
db.close();
return new Person(_id,name,age);
}
db.close();
}
return null;
}
数据库的事务,防止多线程并发操作
public void testTransaction()
{
PersonSQLiteOpenHelper openHelper=new PersonSQLiteOpenHelper(getContext());
SQLiteDatabase db= openHelper.getWritableDatabase();
if(db.isOpen())
{
try
{
//开户事务
db.beginTransaction();
//执行业务逻辑
db.execSQL("update person set balance =balance -1000 where name='zhangsan';");
//ATM机损坏
//int result=10/0;
db.execSQL("update person set balance =balance +1000 where name='lisi';");
//标记事务成功
db.setTransactionSuccessful();
}finally
{
//停止事务
db.endTransaction();
}
db.close();
}
}
public void testTransationInsert()
{
PersonSQLiteOpenHelper openHelper=new PersonSQLiteOpenHelper(getContext());
SQLiteDatabase db= openHelper.getWritableDatabase();
if(db.isOpen())
{
//记录当前时间
long start=System.currentTimeMillis();
//开始添加数据
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();
}finally
{
db.endTransaction();
}
//记住结束时间,计算耗时
long end=System.currentTimeMillis();
long diff=end-start;
Log.i(tag, "耗时:"+diff+"ms");
db.close();
}
}
Android数据库基本操作完成
Android之数据库操作的更多相关文章
- [Android] Sqlite 数据库操作 工具封装类
sqlite 数据库封装类 DatabaseUtil.java(封装的类) package com.jack.androidbase.tools; import android.content.Con ...
- Android下数据库操作——增删改查
Android下数据库第一种方式增删改查 1.创建一个帮助类的对象,调用getReadableDatabase方法,返回一个SqliteDatebase对象 2.使用SqliteDat ...
- android sqlite3:数据库操作
1. 修改表名: alter table notification rename to notification_test 2. 修改数据库名称: 3. 复制一个表的数据到另外一个表中(表的字段一致) ...
- android中的数据库操作
如何在android中调用数据库资源 在android中主要有两种方法来实现对数据库的访问,一种是adb shell方式,另一种是通过相关的android 的java类来间接的对数据库来进行操作.其中 ...
- android中的数据库操作(转)
android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库 an ...
- android中的数据库操作(SQLite)
android中的数据库操作 android中的应用开发很难避免不去使用数据库,这次就和大家聊聊android中的数据库操作. 一.android内的数据库的基础知识介绍 1.用了什么数据库 an ...
- Android学习记录(2)—Android中数据库的常见操作
android中数据库操作是非常常见了,我们会经常用到,操作的方法也有很多种形式,这里我就把最常见的两种形式记录下来了,以备以后用到方便查看.我就不写注释和解释了,因为android数据库的操作和其它 ...
- [Android Pro] 完美Android Cursor使用例子(Android数据库操作)
reference to : http://www.ablanxue.com/prone_10575_1.html 完美 Android Cursor使用例子(Android数据库操作),Androi ...
- Android打造属于自己的数据库操作类。
1.概述 开发Android的同学都知道sdk已经为我们提供了一个SQLiteOpenHelper类来创建和管理SQLite数据库,通过写一个子类去继承它,就可以方便的创建.管理数据库.但是当我们需要 ...
随机推荐
- hdu acmsteps 2.2.1 Fibonacci
Fibonacci Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- Maven学习笔记-01-Maven入门
一 Maven的基本概念 Maven(翻译为"专家","内行")是跨平台的项目管理工具.主要服务于基于Java平台的项目构建,依赖管理和项目信息管理. 1 项 ...
- 网友微笑分享原创Jquery实现瀑布流特效
首先非常感谢网友微笑的无私分享,此Jquery特效是一款非常流行和实用的瀑布流布局,核心代码只有几十行,是我见过代码量最少的瀑布流布局,非常适合网友们学习哦,希望大家好好看一下这个Jquery特效的原 ...
- squid 学习笔记
Squid学习笔记 1.安装前的配置 编译安装之前需要校正的参数主要包括File Descriptor和Mbuf Clusters. 1.File Descriptor 查看文件描述符的限制数目: u ...
- shell的内建命令和外部命令
shell的内建命令和外部命令 Shell执行的命令可以分为内建命令(built-in)和外部命令(external),前者是构建在shell内部:后者是一个独立的文件(可以是二进制文件,也可以是一个 ...
- java如何去调用C++的方法详解
这是一个调用c++ jni 的列子 首先写一个GoodLuck 类,里面包含native本地方法,这是用作C/C++实现的.也就是用C/c++实现java的native 方法.public class ...
- XSS攻击:获取浏览器记住的明文密码
作者:余弦(@evilcos) 0x01. XSS获取明文密码的多种方式 我已经感受到Web潮流带来的巨大革新,尤其是最近HTML5越来越火.浏览器们在客户端瓜分着这个Web OS,只要是对用户体验好 ...
- 如何实现在已有代码之后添加逻辑之java动态代理
在上篇博客中讨论到java的静态代理, 就是通过组合的方法,前提是委托类需要实现一个接口,代理类也实现这个这个 接口,从何组合两个类,让代理类给委托类添加功能! 知道java的静态代理,我们又遇到一个 ...
- Android之开启手机系统自带铃声
/** * 开启手机系统自带铃声 */ private void startAlarm() { mMediaPlayer = MediaPlayer.create(this, getSystemDef ...
- Leetcode 之Convert Sorted List to Binary Search Tree(55)
和上题思路基本一致,不同的地方在于,链表不能随机访问中间元素. int listLength(ListNode* node) { ; while (node) { n++; node = node-& ...