Android数据存储(3)——SQLite数据库的操作_增删改查完整输出

42 篇文章 1 订阅
2 篇文章 0 订阅
    在我们Android的开发过程中,很多时候需要用到数据库的知识,今天我们就来介绍一下Android的数据存储之SQLite数据库的存储。
    我们先来回顾一下对数据库的操作...
-------------------------------------------------分割线----------------------------------------------------------
SQLite  建表增、删、改、查
一、建表
CREATE TABLE USER ( _ID Intger autoincrement , NAME TEXT ,PASSWORD TEXT);
二、添加
INSERT INTO USER VALUES(1,"张三","123");
INSERT INTO USER VALUES(2,"张三","123");
三、删除
DELETE FROM USER WHERE _ID=1;
四、修改
UPDATE USER SET NAME='李四' WHERE _ID=1;
五、查询
SELECT * FROM USER;
SELECT * FROM USER WHERE NAME="张三";
SELECT * FROM USER WHRE NAME LIKE "%%" ;
过滤
SELECT DISTINCT NAME FROM USER;
COUNT(字段名|*);
MAX(字段名)
MIN(字段名)
AVG(字段名)
二、 SQLiteOpenHelper
SQliteOpenHelper 是一个抽象类,来管理数据库的创建和版本的管理。要使用它必须实
现它的 nCreate(SQLiteDatabase), onUpgrade(SQLiteDatabase, int, int)方法
常用方法说明
onCreate():当第一次运行时调用此方法,如果数据库已存在则不调用,不存在则调用,一
般写一些创建数据库的语句
onUpgrade():当数据库版本升级后会调用此方法,版本号从 开始,然后 2,3...,一般会执
行删除表等操作
onDowngrade():当数据库版本降级后调用此方法
onOpen():当打开数据库后会调用此方法
三、 SQLiteDatabase
一、引入
数据库创建的问题解决了,接下来就该使用数据库实现应用程序功能的时候了。基
本的操作包括创建、读取、更新、删除,即我们通常说的 CRUD ( Create, Read, Update, Delete)。
在实现这些操作的时候,我们会使用到两个比较重要的类 SQLiteDatabase 类和 Cursor 类。
二、创建表
1, execSQL(String sql):执行一条 sql 语句,且执行操作不能为 SELECT
因为它的返回值为 void,所以推荐使用 insert、 update 方法等
2., execSQL (String sql,Object[] bindArgs)
sql:执行一条 sql 语句
bindArgs:为 sql 语句中的?赋值
三、添加数据
1、 execSQL(String sql)
2、使用对象的 insert 方法
ContentValues values new ContentValues();
values.put(USERNAMEuser.getUsername());
values.put(PASSWORDuser.getPassword());
db.insert(TABLE_NAMEnullvalues);
参数:
table:数据库中的表名
nullColumnHack:指定默认插入字段,为 null 时能插入数据
values:表示插入字段所对应的值,使用 put 方法
四、删除数据
1、 execSQL(String sql)
2、使用对象的 delete 方法
String whereClaues="_id=?";
String [] whereArgs={String.valueOf(id)};
//db.delete(TABLE_NAME, "_id="+id, null);
db.delete(TABLE_NAMEwhereClaueswhereArgs);
参数
table:数据库的表名
whereClause:where 子句,比如:_id=?
whereArgs:where 子句中?的值
五、修改数据
1、 execSQL(String sql)
2、使用对象的 delete 方法
ContentValues values new ContentValues();
values.put(USERNAMEuser.getUsername());
values.put(PASSWORDuser.getPassword());
String whereClaues="_id=?";
String [] whereArgs={String.valueOf(user.getId())};
db.update(TABLE_NAMEvalueswhereClaueswhereArgs);
参数
table:数据库的表名
values:代表要修改的值,修改方法还是 put(key,values)
whereClause:条件子句,比如 id=?,name=?
whereArgs:为 whereClause 中的

-------------------------------------------------分割线----------------------------------------------------------
    了解了这些基础知识后,我们开始进行数据库帮助类的创建——SQLHelper.java
   
   
/**
* 数据封装类
*
* @author Cretin
*
*/
public class SQLHelper {
 
private static final String DATABASE_NAME = "datastroage";// 数据库文件名
private static final int VERSION = 1;// 数据库版本
private static final String TABLE_NAME = "person";
private static final String _ID = "_id";
private static final String _NAME = "name";
private static final String _PASSWORD = "password";
 
// 操作数据库的对象
private SQLiteDatabase db;
 
class SQLDataBaseHelper extends SQLiteOpenHelper {
 
public SQLDataBaseHelper(Context context) {
super(context, DATABASE_NAME, null, VERSION);
}
 
@Override
public void onCreate(SQLiteDatabase db) {
// 初始化表
String sql = "CREATE TABLE " + TABLE_NAME + "(" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT ," + _NAME
+ " TEXT," + _PASSWORD + " TEXT)";
db.execSQL(sql);
Log.i("SQLDataBaseHelper", "----" + sql);
}
 
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
 
}
}
 
public SQLHelper(Context context) {
SQLDataBaseHelper baseHelper = new SQLDataBaseHelper(context);
db = baseHelper.getWritableDatabase();
}
 
// 添加
public void add(Person person) {
ContentValues values = new ContentValues();
values.put(_NAME, person.getName());
values.put(_PASSWORD, person.getPassword());
db.insert(TABLE_NAME, null, values);
}
 
// 修改
public void update(Person person) {
 
/**
* 参数1:表名 参数2:要修改的值 参数3:要修改哪条符合条件的数据 where id=1 参数4:参数3里面的?对应
*/
// db.update(TABLE_NAME, values, whereClause, whereArgs)
ContentValues values = new ContentValues();
values.put(_NAME, person.getName());
values.put(_PASSWORD, person.getPassword());
db.update(TABLE_NAME, values, _ID + "=?", new String[] { String.valueOf(person.getId()) });
}
 
// 删除
public void delete(int id) {
db.delete(TABLE_NAME, _ID + "=" + id, null);
}
 
// 查询一个
public Person queryById(int id) {
Person p = null;
Cursor cursor = db.query(TABLE_NAME, null, _ID + "=?", new String[] { String.valueOf(id) }, null, null, null);
if (cursor.moveToNext()) {
p = new Person(cursor.getInt(cursor.getColumnIndex(_ID)), cursor.getString(cursor.getColumnIndex(_NAME)),
cursor.getString(cursor.getColumnIndex(_PASSWORD)));
}
return p;
}
 
// 全查询
public List<Person> queryAll(Person person) {
List<Person> list = new ArrayList<Person>();
Cursor cursor = db.query(TABLE_NAME, null, null, null, null, null, null);
while (cursor.moveToNext()) {
Person p = new Person(cursor.getInt(cursor.getColumnIndex(_ID)), cursor.getString(cursor
.getColumnIndex(_NAME)), cursor.getString(cursor.getColumnIndex(_PASSWORD)));
list.add(p);
}
return list;
}
}
    为了让大家看的清楚,我把People类也贴出来,虽然都是自动生成的。
   
   
public class Person {
private int id;
private String name;
private String password;
public Person(int id, String name, String password) {
super();
this.id = id;
this.name = name;
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "Person [id=" + id + ", name=" + name + ", password=" + password + "]";
}
}
    最后贴出测试类MainActivity.java
   
   
package com.example.activity;
 
import java.util.List;
 
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
 
public class MainActivity extends Activity implements OnClickListener {
 
// UI
private EditText et_id;
private EditText et_username;
private EditText et_password;
private Button btn_add;
private Button btn_update;
private Button btn_del;
private Button btn_query_all;
private Button btn_querybyid;
 
private TextView tv_all_msg;
 
// 声明数据库工具
private SQLHelper helper;
 
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
helper = new SQLHelper(this);
}
 
private void initView() {
et_id = (EditText) this.findViewById(R.id.et_id);
et_username = (EditText) this.findViewById(R.id.et_username);
et_password = (EditText) this.findViewById(R.id.et_password);
 
btn_add = (Button) this.findViewById(R.id.btn_add);
btn_update = (Button) this.findViewById(R.id.btn_update);
btn_del = (Button) this.findViewById(R.id.btn_del);
btn_query_all = (Button) this.findViewById(R.id.btn_query_all);
btn_querybyid = (Button) this.findViewById(R.id.btn_querybyid);
 
tv_all_msg = (TextView) this.findViewById(R.id.tv_all_msg);
 
// 添加事件
btn_add.setOnClickListener(this);
btn_update.setOnClickListener(this);
btn_del.setOnClickListener(this);
btn_query_all.setOnClickListener(this);
btn_querybyid.setOnClickListener(this);
}
 
@Override
public void onClick(View v) {
String id = et_id.getText().toString();
String name = et_username.getText().toString();
String password = et_password.getText().toString();
Person person = new Person(Integer.parseInt(id), name, password);
switch (v.getId()) {
case R.id.btn_add:
helper.add(person);
break;
case R.id.btn_update:
helper.update(person);
break;
case R.id.btn_del:
helper.delete(person.getId());
break;
case R.id.btn_query_all:
List<Person> p = helper.queryAll(null);
tv_all_msg.setText("");
for (Person person2 : p) {
tv_all_msg.append(person2.toString());
tv_all_msg.append("\n");
}
break;
case R.id.btn_querybyid:
Person mmm = helper.queryById(person.getId());
tv_all_msg.setText("");
tv_all_msg.append(mmm.toString());
break;
}
}
 
}
    当有了这些东西,就可以得到下面这些东西了。。。

    转载请指明出处!
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值