SQLlite在安卓中的基本详解和简单使用,真的太香了

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为值


版权声明:本文为m0_65511807原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。