关于android中数据库的创建以及基础的增删改查的相应操作

时间:2021-09-02 18:01:33

这里主要是掌握一些基本的相应的知识,具体的是阿金是等到明天在进行。

相应的知识点如下:

对于数据库中的一些常识。SQLite 没有服务器进程,它通过文件保存数据,该文件是跨平台的,可以放在其他平台中使用。并且在保存数据时,支持null(零) 、integer (整数)、real (浮点数字) 、text (字符串文本)和blob(二进制对象)5种数据类型。但实际上SQLite也接收varchar(n)、 char(n)、decimal(p,s)等数据类型,只不过在运算或保存时会转换成对应的5种数据类型。因此,可以将各种类型的数据保存到任何字段中,而不用关心字段声明的数据类型

SqliteOpenHelper的用法:
该类的方法:
1、getReadableDatabase() 创建或者打开一个可读写的数据库,如果出现问题(磁盘满等),则打开一个只读的数据库。

2、getWritableDatabase() 获得一个可读写的数据库。如果磁盘满则会抛异常。

3、onCreate(SQLiteDatabase db) 只有第一次创建这个数据库的时候调用。一般在这个方法中创建数据的相应表。

4、onOpen(SQLiteDatabase db) 当每次打开数据库的时候都会调用。这个方法很少使用

5、onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) 当升级数据库即数据库的版本号发生改变的时候调用,一般如果需要修改表结构就写在这里.

//db.execSQL(“alert 表名 add 列名列数据类型”);

6、close()   关闭打开的所有数据库对象

 

 

二、进行增加数据的相关操作是:

通过getWritableDatabase()方 法得到SQLiteDatabase对象,然后获得ContentValues对象并将数据添加到ContentValues对象中,最后调用inser()方法将数据插入到person表中。

insert()方法接收3个参数,第一个参数是数据表的名称,第二个参数表示如果发现将要插入的行为空行时,会将这个列名的值设为null,第三个参数为ContentValues对象。ContentValues类类似于Map类,通过键值对的形式存入数据,这里的key表示插入数据的列名,value 表示要插入的数据。

需要注意的是,使用完SQLiteDatabase对象后定要调用close()方法关闭,否则数据库连接会一直存在,不断消耗内存,当系统内存不足时将获取不到SQLiteDatabase对象,并且会报出数据库未关闭异常。

 

三、修改相应数据的注意事项

通过SQLiteDatebase对象db调用update()方法用来修改数据库中的数据,update()方法接收4个参数,第一个参数表示表名,第二个参数接收一个ContentValues对象,第三个参数可选择where语句,第四个参数表示whereClause语句中的占位参数列表,这些字符串会替换掉where条件中的 " ? "。

四、查询数据的先关操作是

在进行数据查询时使用的是SQLiteDatabase的query0方法,该方法返回的是一个行数集合Cursor。 Cursor 是一个游标接口,提供了遍历查询结果的方法,如移动指针方法move(),获得列值方法getString()等,通过这些方法可以获取集合中的属性值以及序号等。

需要注意的是,在使用完Cursor对象后,一定要及时关闭,否则会造成内存泄露。下面介绍如何使用SQLiteDatabase的query()方法查询数据,

 

这种操作方法类似于执行SQL语句 (语法和SQL server类似)。

1. 增加一条数据

?
1 db.execSQL( "insert into perosn (name, price) values(?,?)" , new String[]{name,price})

2. 修改一条数据

?
1 db.execSQL( "update person set price =? where name =?" , new String[]{price,name});

3. 删除一条数据

?
1 db.execSQL( "delete from person where _id = ?" , new String[]{id});

4. 查询一条数据

?
1 Cursor cursor = db.rawQuery( "select _id,name,price from person where id =?" , new String[]{id});

从上述代码可以看出,查询操作与增、删、改操作有所不同,前面三个操作都是通过execSQL()方法执行SQL语句,而查询操作使用的是rawQuery()方法。这是因为查询数据库会返回一个结果集Cursor,而execSQL()方法则没有返回值。

 

 

创建数据库的基本代码如下:

public class SqliteHelper extends SQLiteOpenHelper{

/**
* 1.上下文
* 2.数据库名字
* 3.工厂游标
* 4.版本号
* @param context
*/
public SqliteHelper(Context context) {
super(context, "Person.db", null, 1);
// TODO Auto-generated constructor stub
}
//创建  创建表  只要创建成功 只会执行一次
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("create table person(id integer primary key autoincrement,"  
"name text,"  
"sex text)");
}

对于数据库方面的增删改查的相应代码如下:

//添加
public boolean add(String name,String age){

ContentValues values = new ContentValues();
//1.key 字段名  2.要进行添加的值
values.put("name", name);
values.put("age", age);
//1. 表名 2.要进行添加的列  3. 添加的值
long insert = sb.insert("user", null, values );
if(insert!=-1){
return true;
}else{
return false;
}

}

//查询
public String select(){
/**
* table, 表名
* columns, 查询列
* selection, 条件
* selectionArgs,条件的值
*  groupBy,组查询
*  having, 子查询
*  orderBy 顺序  升序  降序
*/
Cursor query = sb.query("user", null, null, null, null, null, null);
StringBuffer stringBuffer = new StringBuffer();
while (query.moveToNext()) {

String name = query.getString(query.getColumnIndex("name"));
String age = query.getString(query.getColumnIndex("age"));
stringBuffer.append(name "----" age);
}
return stringBuffer.toString();
}

//删除
public boolean delete(String name){
/**
* 1.表名
* 2.条件
* 3.条件的值
*/
int delete = sb.delete("user", "name = ?", new String[]{name});
if(delete!=-1){
return true;
}else{
return false;
}

}
//修改

public boolean update(String name,String age,String tj){

/**
* table, 表名
* values,要修改的值
*  whereClause, 条件
*  whereArgs 条件的值
*/
ContentValues values = new ContentValues();
values.put("name", name);
values.put("age", age);
int update = sb.update("user", values, "name = ?", new String[]{tj});

if(update!=-1){
return true;
}else{
return false;
}
}
}