Android笔记之数据库

1、首先要定义一个myDBopenhelper的类继承SQLiteHelper类。

后面会看到这个类是帮助我们得到数据库的连接的,当然对于这个类还有一些需要注意的地方。将代码粘贴如下进行记录:

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class MyDBOpenHelper extends SQLiteOpenHelper {
/**
* @param context  应用程序上下文
* @param name    数据库的名字
* @param factory   查询数据库的游标工厂 一般情况下 用sdk默认的
* @param version  数据库的版本 版本号必须不小1 

*/
public MyDBOpenHelper(Context context) {
super(context, "will.db", null, 1);
}

// 在mydbOpenHelper 在数据库第一次被创建的时候 会执行onCreate();之后只要数据库存在就不会调用这个方法了。
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE person (personid integer primary key autoincrement, name varchar(20))");
}

//这个方法只有在数据库版本号发生改变的时候才被调用,用于在发布新版本时更新数据库结构。
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("ALTER TABLE person ADD phone VARCHAR(12) NULL ");
}
}

2、新建一个包dao这个包下定义操作数据库的类:

import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import cn.itcast.db.MyDBOpenHelper;
import cn.itcast.db.domain.Person;

public class PersonDao {
private static final String TAG = "PersonDao";
private MyDBOpenHelper dbOpenHelper;


// 在personDao被new出来的时候 就完成初始化
public PersonDao(Context context) {
dbOpenHelper = new MyDBOpenHelper(context);

通过下面两个方法获得数据库的连接:
// dbOpenHelper.getReadableDatabase();
// dbOpenHelper.getWritableDatabase();

               //Android使用getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的                        //SQLiteDatabase实例。---getReadableDatabase()方法中会调用getWritableDatabase()方法---

               //其中getWritableDatabase() 方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而                // 不能写,倘若使用的是getWritableDatabase() 方法就会出错。getReadableDatabase()方法则是先以读写    //方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。

       //另外:write方法会给数据库加锁,read方法就不会了。
}


// 增删改查


/**
* 往数据库添加一条数据
*/
public void add(String name, String phone) {
boolean result = find(name);
if (result)
return;

SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
if (db.isOpen()) {
db.execSQL("insert into person (name,phone) values (?,?)",new Object[] { name, phone });
// 关闭数据库 释放数据库的链接
//db.execSQL("insert into person (name,phone) values ('"+name+"','"+phone+"')");
db.close();
}
}


/**
* 查找数据库的操作
*/
public boolean find(String name) {
boolean result = false;
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
if (db.isOpen()) {
Cursor cursor = db.rawQuery("select * from person where name=?",new String[] { name });
if (cursor.moveToFirst()) {
int index = cursor.getColumnIndex("phone"); // 得到phone在表中是第几列
String phone = cursor.getString(index);
Log.i(TAG, "phone =" + phone);
result = true;
}
// 记得关闭掉 cursor
cursor.close();
result = false;
// 释放数据库的链接
db.close();
}
return result;
}


/**
* 删除一条记录
*/
public void delete(String name) {
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
if (db.isOpen()) {
db.execSQL("delete from person where name =?",new Object[] { name });
db.close();
}
}


/**
* 更新一条记录

*/
public void update(String name, String newname, String newphone) {
SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
if (db.isOpen()) {
db.execSQL("update person set name=? , phone=? where name=?",new Object[] { newname, newphone, name });
db.close();
}
}


/**
* 查找全部
*/
public List<Person> getAllPersons() {
List<Person> persons=null;
SQLiteDatabase db = dbOpenHelper.getReadableDatabase();
if (db.isOpen()) {
persons = new ArrayList<Person>();
Cursor cursor = db.rawQuery("select * from person ", null);
while (cursor.moveToNext()) {
Person person = new Person();
int nameindex = cursor.getColumnIndex("name");
int phoneindex = cursor.getColumnIndex("phone");
String name = cursor.getString(nameindex);
String phone = cursor.getString(phoneindex);
person.setName(name);
person.setNumber(phone);
persons.add(person);
}
cursor.close();
db.close();
}
return persons;
}
}

3、上面的查找全部依赖于一个自定义的与数据库表对应的类Person:

public class Person {
String name;
String number;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值