这里主要是掌握一些基本的相应的知识,具体的是阿金是等到明天在进行。
相应的知识点如下:
对于数据库中的一些常识。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 |
|
2. 修改一条数据
1 |
|
3. 删除一条数据
1 |
|
4. 查询一条数据
1 |
|
从上述代码可以看出,查询操作与增、删、改操作有所不同,前面三个操作都是通过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; } } }
原文地址:https://www.cnblogs.com/dazhi151/p/12260700.html