super(context, name, null, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("CREATE TABLE IF NOT EXISTS person (personid integer primary key autoincrement, name varchar(20), age
INTEGER)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL(“ALTER TABLE person ADD phone VARCHAR(12)”); //往表中增加一列
}
将会对比版本号,如果本身没有数据库,即数据库版本号为0,也就是第一次安装app,就会直接走onCreate方法,如果数据库本身已经存在了,如果版本号大于改版本号,就会执行onUpgrade方法。数据库版本只能升级,不能降级,降级会闪退。
三、基本语句:
openOrCreateDatabase(String path,SQLiteDatabase.CursorFactory factory)
打开或创建数据库
insert(String table,String nullColumnHack,ContentValues values)
插入一条记录
delete(String table,String whereClause,String[] whereArgs)
删除一条记录
query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy)
查询一条记录
update(String table,ContentValues values,String whereClause,String[] whereArgs)
修改记录
execSQL(String sql)
执行一条SQL语句
close()
关闭数据库
1、建表语句:
CREATE TABLE person (personid integer primary key autoincrement, name varchar(20),age integer default(0);
主键自增,最高20位,default默认值。
2、插入
insert into person(name, age) values(‘小明’,3)
3、删除
delete from person where age=10;
4、更新
update person set name=‘小明‘ where age=10
5、查询
select * from person 查询所有
select * from person order by id desc 降序查询,asc是升序
select name from person group by name having count(*)>1 分组查询
select * from Account limit 5 offset 3 分页查询
6、对表进行操作alert
增加一列: alert(into) person add address varchar(255);
删除列: alert person drop column age;
重命名列: alert person change age age_number integer;
四、实例用法:
写法,传统的一般的sql语句和insert方法,除了用execSQL()之外,还有
insert()、delete()、update()和query() 能完成数据的添加、删除、更新、查询操作。
1、插入
(1)
SQLiteDatabase db = …;
db.execSQL(“insert into person(name, age) values(?,?)”, new Object[]{“炸死特”, 4});
db.close();
execSQL(String sql, Object[] bindArgs)方法的第一个参数为SQL语句,第二个参数为SQL语句中占位符参数的值,参数值在数组中的顺序要和占位符的位置对应。
用占位符可以省去转义的痛苦。以免里面参数多次进行转义。
(2)
Insert()方法用于添加数据,各个字段的数据使用ContentValues进行存放,ContentValues类似于map集合,它提供了存取数据对应的put(String key, Xxx value)和getAsXxx(String key)方法, key为字段名称,value为字段值,Xxx指的是各种常用的数据类型,如:String、Integer等。
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
SQLiteDatabase db = databaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(“name”, “炸死特”);
values.put(“age”, 4);
long rowid = db.insert(“person”, null, values);//返回新添记录的行号,与主键id无关
2、查询:
(1)
SQLiteDatabase db = ….;
Cursor cursor = db.rawQuery(“select * from person where name like ? and age=?”, new String[]{“%炸死特%”, “4”});
while (cursor.moveToNext()) {
int personid = cursor.getInt(0); //获取第一列的值,第一列的索引从0开始
String name = cursor.getString(1);//获取第二列的值
int age = cursor.getInt(2);//获取第三列的值
}
cursor.close();
db.close();
Cursor是结果集游标,用于对结果集进行随机访问,如果大家熟悉jdbc, 其实Cursor与JDBC中的ResultSet作用很相似。使用moveToNext()方法可以将游标从当前行移动到下一行,如果已经移过了结果集的最后一行,返回结果为false,否则为true。另外Cursor 还有常用的moveToPrevious()方法(用于将游标从当前行移动到上一行,如果已经移过了结果集的第一行,返回值为false,否则为true )、moveToFirst()方法(用于将游标移动到结果集的第一行,如果结果集为空,返回值为false,否则为true )和moveToLast()方法(用于将游标移动到结果集的最后一行,如果结果集为空,返回值为false,否则为true ) 。
(2)
SQLiteDatabase db = databaseHelper.getWritableDatabase();
Cursor cursor = db.query(“person”, new String[]{“personid,name,age”}, “name like ?”, new String[]{"%炸死特%"}, null, null, “personid desc”, “1,2”);
while (cursor.moveToNext()) {
int personid = cursor.getInt(0); //获取第一列的值,第一列的索引从0开始
String name = cursor.getString(1);//获取第二列的值
int age = cursor.getInt(2);//获取第三列的值
}
cursor.close();
db.close();
query参数,
query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit)方法各
参数的含义:
table:表名。相当于select语句from关键字后面的部分。如果是多表联合查询,可以用逗号将两个表名分开。
columns:要查询出来的列名。相当于select语句select关键字后面的部分。
selection:查询条件子句,相当于select语句where关键字后面的部分,在条件子句允许使用占位符“?”
selectionArgs:对应于selection语句中占位符的值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。
groupBy:相当于select语句group by关键字后面的部分
having:相当于select语句having关键字后面的部分
orderBy:相当于select语句order by关键字后面的部分,如:personid desc, age asc;
limit:指定偏移量和获取的记录数,相当于select语句limit关键字后面的部分。
3.删除
(1)DELETE FROM table_name
或者:
DELETE * FROM table_name
当然要加上条件判断,
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.execSQL("delete from table person where age >2 ");
db.close();
(2)
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.delete(“person”, “personid<?”, new String[]{“2”});
db.close();
上面代码用于从person表中删除personid小于2的记录。
第一个是表名,第二个参数是条件,相当于where personid< ,?是占位符,内容是第三个参数。
5.update()方法
(1)
SQLiteDatabase db = databaseHelper.getWritableDatabase();
db.execSQL(“update person set name=’呵呵’ where personid=1”);
db.close();
“`
(2)
SQLiteDatabase db = databaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(“name”, “呵呵”);//key为字段名,value为值