当前位置:数据库 > SQLite >>

Android学习笔记---Android利用Sqlite,并且用sql语言操作SQLite数据库

6.对数据库进行操作:
  一下是对数据库的操作代码,包括添加,删除,更新,查询,和分页,统计
-------------------------------------------------------------------
/DBSQLIte/src/com/credream/entity/Person.java
package com.credream.entity;
public class Person
{
private Integer id;
private String name;
private String phone;
public Person()
{
 
}
 
public Person(Integer id, String name, String phone)
{
this.id = id;
this.name = name;
this.phone = phone;
}
 
 
public Person(String name, String phone)
{
this.name = name;
this.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;
}
 
 
 
 
 
 
@Override
public String toString()
{
return "Person [id=" + id + ", name=" + name + ", phone=" + phone + "]";
}
}
----------------------------------------------------------
/DBSQLIte/src/com/credream/service/DBOpenHelter.java
package com.credream.service;
 
 
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
 
 
public class DBOpenHelter extends SQLiteOpenHelper
{
//父类没有默认构造器,需要显示调用
public DBOpenHelter(Context context)
{
super(context, "credream.db", null, 2);
//数据库创建完成后,默认会保存在<包>/database/文件夹下
//当修改版本号时候,会触发:onUpgrade方法
//第二个:指定数据库名称,
//第三个:游标工厂,用来迭代,查询后的结果集,null代表使用系统默认的
 
 
游标工厂
//版本号,大于0
 
}
/**
 * 这个方法是在数据库第一次被创建的时候调用的
 */
@Override
public void onCreate(SQLiteDatabase db)
{
//SQLiteDatabase这个类,封装了增删改查操作,也叫做数据库操作实例
db.execSQL("CREATE TABLE person (personid integer primary key 
 
 
autoincrement, name varchar(20))");
//这里也可以不写name的数据类型,因为sqlite是数据类型无关的,就是写
 
 
了varchar(20),也可以写入超过20的内容
 
 
}
/**
 * 当数据库的版本号变更的时候被调用
 */
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
db.execSQL("alter table person add phone varchar(12) null");
 
 
}
 
 
}
---------------------------------------------
/DBSQLIte/src/com/credream/service/PersonService.java
package com.credream.service;
 
 
import java.util.ArrayList;
import java.util.List;
 
 
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.credream.entity.Person;
 
 
public class PersonService
{
private DBOpenHelter dbOpenHelter;
public PersonService(Context context){
this.dbOpenHelter=new DBOpenHelter(context);
}
/**
* 添加记录
* @param person
*/
public void save (Person person){
SQLiteDatabase db=dbOpenHelter.getWritableDatabase();
//SQLiteDatabase db2=dbOpenHelter.getWritableDatabase();
//这里获得的数据库实例和db这个数据库实例是一样的,因为数据库有缓存
 
 
功能
//在源码里进行了判断,如果得到的数据库实例不为null,并且已经打开,并
 
 
且是只读的,那么
//就直接返回这个实例
        //dbOpenHelter.getWritableDatabase().execSQL(sql);这里和db.execSQL("作用
 
 
是一样的
//db.execSQL("insert into person (name,phone) values
 
 
('"+person.getName()+"','"+person.getPhone()+"')");
   //上面这种写法是错误的,因为当用户输入cre'dream的时候那么sql语句就成了
//insert into person (name,phone) values
 
 
('cre'dream','15066659146')这样会出现sql语法错误
//所以,应该用转义字符
db.execSQL("insert into person (name,phone) values(?,?)",new 
 
 
Object[]{person.getName(),person.getPhone()});
//db.close();//数据库也可以不关闭,因为这样的话可以提升性能,因为不用频繁的
 
 
开关数据库
 
}
/**
* 删除记录
* @param person
*/
public void delete (Integer id){
SQLiteDatabase db=dbOpenHelter.getWritableDatabase();
db.execSQL("delete from person  where personid=?",new Object[]
 
 
{id});
}
/**
* 更新记录
* @param person
*/
public void update(Person person){
SQLiteDatabase db=dbOpenHelter.getWritableDatabase();
db.execSQL("update  person set name=?,phone=?   where 
 
 
personid=?",new Object[]{person.getName(),person.getPhone(),person.getId()});
 
}
/**
* 查找记录
* @param id
* @return
*/
public Person find (Integer id){
SQLiteDatabase db=dbOpenHelter.getReadableDatabase();
//getReadableDatabase();这个方法里面调用了getWritableDatabase();
 
 
方法,来取得数据库操作实例,只有调用
//失败的时候就会发现异常,当数据磁盘满了,会抛出异常,这时候会打开这
 
 
个实例的数据库
//然后开始读取,这样当磁盘满的时候,
//当数据库磁盘空间没有满的时候,返回的数据库操作实例是一样的:可读
 
 
可写,当数据库磁盘满了,返回的数据库
//操作实例是只读的
Cursor cursor=db.rawQuery("select * from person  where personid=?",new 
 
 
String[]{id.toString()});
//游标存放结果
if(cursor.moveToFirst()){
int
补充:移动开发 , Android ,
Oracle
MySQL
Access
SQLServer
DB2
Excel
SQLite
SYBASE
Postgres
如果你遇到数据库难题:
请访问www.zzzyk.com 试试
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,