学习Android SQLite数据库之后,实践一次,加深印象,也方便以后查看.
- 创建数据库
- 在数据库中创建第一张表 student (_id 主键,name,number,age)
- insert
- 添加几条数据到表中
- query
- 查询 表 student 中的所有数据,遍历打印,数据 和总的数据数量
- 按条件 name 查询 记录
- 按条件 name 和number 查询记录
- update
- 按名字修改 整条记录的数据
- 按名字修改 age
delete
- 删除数据库
- 删除表中所有记录
- 删除表
- 按名字删除单条记录
- 按名字和number删除单条记录
创建第二张表 studenttemp (_id主键,name,number)
- 复制第一张表中的数据到第二张表中
- 在第二张表中添加字段 age
- 删除数据库第一张表 student
- 重命名数据库 第二张表 studenttemp 为 student
一、创建数据库
private static final String CREATE_TABLE_STUDENT = "create table "+TABLE_NAME
+" (_id integer not null primary key autoincrement,"
+"name text,"
+"number integer )";
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_TABLE_STUDENT);
}
调用 getWritableDatabase() 或者getReadableDatabase()的时候才会真正创建
二、 删除数据库
StudentOpenHelper类中
context.deleteDatabase("school.db");
三、创建数据库
1.在数据库中创建第一张表 student (_id 主键,name,number,age)
- 同一,创建数据库的时候 调用 getWritableDatabase() 或者getReadableDatabase()的时候会执行onCreate 方法,执行里面的 db.execSQL(CREATE_TABLE_STUDENT);
- 手动创建一张表
public void createTable(String tableName){
SQLiteDatabase db = getWritableDatabase();
String CREATE_TABLE= "create table " + tableName
+ " (_id integer not null primary key autoincrement,"
+ "name text,"
+ "number integer,"
+ "age integer )";
db.execSQL(CREATE_TABLE);
db.close();
}
四、添加记录
- 调用 insert 方法
public long addRecord(StudentBean studentBean){
SQLiteDatabase db = getWritableDatabase();
ContentValues values = new ContentValues();
values.put("name",studentBean.getName());
values.put("number",studentBean.getNumber());
values.put("age",studentBean.getAge());
long insert = db.insert(TABLE_NAME, null, values);
return insert;
}
- 使用execSQL执行SQL语句添加
public void addRecord2 (StudentBean studentBean){
SQLiteDatabase db = this.getWritableDatabase();
String INSERT_RECORD = "INSERT INTO "+TABLE_NAME+" (uuid, number, name,age,sex,gclass)"
+" VALUES ('"
+studentBean.getUuid()+"',"
+studentBean.getNumber()+",'"
+studentBean.getName()+"',"
+studentBean.getAge()+","
+studentBean.getSex()+",'"
+studentBean.getGclass()+"')";
db.execSQL(INSERT_RECORD);
db.close();
}
五、查询 表 student 中的所有数据,遍历打印,数据 和总的数据数量
查询相比其他操作要复杂许多
提供了四种查询方式:
1.db.rawQuery(String sql, String[] selectionArgs);
2.db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy);
3.db.query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);
4.db.query(String distinct, String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit);
1.查询全部记录
public LinkedList <StudentBean> queryRecordAll(){
LinkedList<StudentBean> studentBeenList = new LinkedList<>();
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null);
while (cursor != null && cursor.moveToNext()) {
StudentBean studentBean = new StudentBean();
String name = cursor.getString(cursor.getColumnIndex("name"));
int number = cursor.getInt(cursor.getColumnIndex("number"));
int age = cursor.getInt(cursor.getColumnIndex("age"));
studentBean.setName(name);
studentBean.setNumber(number);
studentBean.setAge(age);
studentBeenList.add(studentBean);
Log.i("jhk_2018","name = "+name+" nameid = "+cursor.getColumnIndex("name")+" cursor "+cursor.getColumnCount());
}
return studentBeenList;
}
2.单个条件查询
public LinkedList <StudentBean> queryRecordByName(String nameStr){
LinkedList<StudentBean> studentBeenList = new LinkedList<>();
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, new String[]{"number","age"}, "name = ?", new String[]{nameStr}, null, null, "age");
while (cursor != null && cursor.moveToNext()) {
StudentBean studentBean = new StudentBean();
int number = cursor.getInt(cursor.getColumnIndex("number"));
int age = cursor.getInt(cursor.getColumnIndex("age"));
studentBean.setNumber(number);
studentBean.setAge(age);
studentBeenList.add(studentBean);
}
return studentBeenList;
}
3.多个条件查询,并且按照 number 排序
public LinkedList <StudentBean> queryRecordByNameANumber(String nameStr,int num){
LinkedList<StudentBean> studentBeenList = new LinkedList<>();
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.query(TABLE_NAME, new String[]{"name","number","age"}, "name = ? and number = ? ", new String[]{nameStr,Integer.toString(num)}, null, null, "number");
while (cursor != null && cursor.moveToNext()) {
StudentBean studentBean = new StudentBean();
String name = cursor.getString(cursor.getColumnIndex("name"));
int number = cursor.getInt(cursor.getColumnIndex("number"));
int age = cursor.getInt(cursor.getColumnIndex("age"));
studentBean.setName(name);
studentBean.setNumber(number);
studentBean.setAge(age);
studentBeenList.add(studentBean);
Log.i("jhk_2018","queryRecordByNameANumber number = "+number+" numberid = "+cursor.getColumnIndex("number")+" cursor "+cursor.getColumnCount());
}
return studentBeenList;
}
六、UpDate更新
1.按名字修改 整条记录的数据
public int upDateByName(String nameStr,StudentBean studentBean){
SQLiteDatabase db = getWritableDatabase();
ContentValues valuse = new ContentValues();
valuse.put("name",studentBean.getName());
valuse.put("number",studentBean.getNumber());
valuse.put("age",studentBean.getAge());
int update = db.update(TABLE_NAME, valuse, "name = ? ", new String[]{nameStr});
db.close();
return update;
}
2.按名字修改 age
public int upDateByNameAAge(String nameStr,int agei,StudentBean studentBean){
SQLiteDatabase db = getWritableDatabase();
ContentValues valuse = new ContentValues();
valuse.put("name",studentBean.getName());
valuse.put("number",studentBean.getNumber());
valuse.put("age",studentBean.getAge());
int update = db.update(TABLE_NAME, valuse, "name = ? and age = ? ", new String[]{nameStr,Integer.toString(agei)});
db.close();
return update;
}
七、Delete 删除
1. 删除表
public void deleteTable() {
SQLiteDatabase db = getWritableDatabase();
String DELETE_TABLE = "drop table "+TABLE_NAME;
db.execSQL(DELETE_TABLE);
db.close();
}
2. 删除表中所有记录
- 使用不带where子句的delete语句
public int deleteAll() {
SQLiteDatabase db = getWritableDatabase();
int delete = db.delete(TABLE_NAME, null, null);
db.close();
return delete;
}
- 使用SQL语句:delete from table_name
public int deleteAll() {
SQLiteDatabase db = getWritableDatabase();
String detele_table = "delete from "+TABLE_NAME;
db.execSQL(detele_table);
db.close();
return delete;
}
- 按名字删除单条记录
public int deleteByName(String nameStr) {
SQLiteDatabase db = getWritableDatabase();
int delete = db.delete(TABLE_NAME, "name = ? ", new String[]{nameStr});
db.close();
return delete;
}
- 按照名字和number删除记录
public int deleteByNameANum(String nameStr,int num) {
SQLiteDatabase db = getWritableDatabase();
int delete = db.delete(TABLE_NAME, "name = ? and number = ? ", new String[]{nameStr,Integer.toString(num)});
db.close();
return delete;
}
八、复制表
“create table “+newTableName+” as select number , name ,age from “+oldTableName +” where number = ‘222’”;
as 后面跟 要复制的字段
from 后面跟 原表
where 后面跟筛选条件
注:新的表 数据库中要不存在
public void copyTable(String oldTableName, String newTableName) {
SQLiteDatabase db = getWritableDatabase();
String COPY_TABLE = "create table "+newTableName+" as select number , name ,age from "+oldTableName +" where number = '222'";
db.execSQL(COPY_TABLE);
db.close();
}
九、插入字段
public void insertColumn(String insertColumnTable,String insertColumn) {
SQLiteDatabase db = getWritableDatabase();
String COPY_TABLE = "alter table "+insertColumnTable+" add column "+insertColumn+" text ";
db.execSQL(COPY_TABLE);
db.close();
}
十、重命名表
public void renameTable(String renameOldTableName,String renameNewTableName) {
SQLiteDatabase db = getWritableDatabase();
String COPY_TABLE = "alter table "+renameOldTableName+" rename to "+renameNewTableName;
db.execSQL(COPY_TABLE);
db.close();
}
十一、删除表里面的字段
十二、数据库升级
十三、数据库关联
十四、数据库事务
总结
其他对数据库的操作以后用到的时候再补充,如果有错误的再修改.