您的位置:首页 > 移动开发 > Android开发

继上一篇Android SQLite数据库系统学习之后实践

2018-03-16 16:02 567 查看
学习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();
}


十一、删除表里面的字段

十二、数据库升级

十三、数据库关联

十四、数据库事务

总结

其他对数据库的操作以后用到的时候再补充,如果有错误的再修改.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: