Android数据库一:sqlite语句增删改查,androidsqlite
SQLite数据类型
一般数据采用的固定的静态数据类型,而SQLite采用的是动态数据类型,会根据存入值自动判断。SQLite具有以下五种常用的数据类型:
NULL: 这个值为空值;
VARCHAR(n):长度不固定且其最大长度为 n 的字串,n不能超过 4000;
CHAR(n):长度固定为n的字串,n不能超过 254;
INTEGER: 值被标识为整数,依据值的大小可以依次被存储为1,2,3,4,5,6,7,8;
REAL: 所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号;
TEXT: 值为文本字符串,使用数据库编码存储(TUTF-8, UTF-16BE or UTF-16-LE);
BLOB: 值是BLOB数据块,以输入的数据格式进行存储。如何输入就如何存储,不改变格式;
DATA :包含了 年份、月份、日期;
TIME: 包含了 小时、分钟、秒;
SqliteOpenHelper的用法:
该类的方法:
1、getReadableDatabase() 创建或者打开一个可读写的数据库,如果出现问题(磁盘满等),则打开一个只读的数据库。
2、getWritableDatabase() 获得一个可读写的数据库。如果磁盘满则会抛异常。
3、onCreate(SQLiteDatabase db) 只有第一次创建这个数据库的时候调用。一般在这个方法中创建数据的相应表。
4、onOpen(SQLiteDatabase db) 当每次打开数据库的时候都会调用。这个方法很少使用
5、onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) 当升级数据库即数据库的版本号发生改变的时候调用,一般如果需要修改表结构就写在这里.
//db.execSQL(“alert 表名 add 列名列数据类型”);
6、close() 关闭打开的所有数据库对象
使用步骤:
创建SQLiteOpenHelper类的子类MySQLiteOpenHelper 类,实现SQLiteOpenHelper类中的抽象方法onCreate()和onUpgrade();
调用 MySQLiteOpenHelper 对象的getWritableDatabase 或 getReadableDatabase方法,获得SQLiteDatabase 对象;
创建表。
调用SQLiteDatabase 对象的execSQL()方法,执行 update,insert,delete操作;调用rawQuery()方法执行select查询操作;
如果执行的是查询操作,则对返回的Cursor进一步处理。
案例
SQLiteOpenHelper
public class MyDBHelper extends SQLiteOpenHelper {
public MyDBHelper(Context context) {
super(context, "my.db", null, 1);
}
/**
* 第一次创建数据库的时候回调该方法,创建表以及表数据的初始化
*
* @param db
*/
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table person(_id integer primary key autoincrement,name text)";
db.execSQL(sql);
//可以给表初始化一些数据
//db.execSQL("insert into person(name) values('小米')");
}
/**
* 数据库升级的时候回调该方法
*
* @param db
* @param oldVersion
* @param newVersion
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//给表添加一个字段
//db.execSQL("alter table person add age integer");
}
/**
* 数据库打开的时候回调该方法
*
* @param db
*/
@Override
public void onOpen(SQLiteDatabase db) {
super.onOpen(db);
}
}
Dao类,增删改查方法
/**
* 使用SQL语句增删改查
* Created by xiaoyehai on 2017/12/30/030.
*/
public class DataBaseDao {
private final MyDBHelper mDbHelper;
public DataBaseDao(Context context) {
mDbHelper = new MyDBHelper(context);
}
/**
* 插入
*
* @param dataBean
*/
public void insert(DataBean dataBean) {
SQLiteDatabase db = mDbHelper.getWritableDatabase();
if (db.isOpen()) {
db.execSQL("insert into person(name) values(" + "'" + dataBean.getName() + "'" + ")");
db.close();
}
}
/**
* 更新
*
* @param id
* @param dataBean
*/
public void update(int id, DataBean dataBean) {
SQLiteDatabase db = mDbHelper.getWritableDatabase();
if (db.isOpen()) {
db.execSQL("update person set name=? where _id=?", new Object[]{dataBean.getName(), id});
db.close();
}
}
/**
* 根据id删除
*/
public void delete(int id) {
SQLiteDatabase db = mDbHelper.getWritableDatabase();
if (db.isOpen()) {
db.execSQL("delete from person where _id=?", new Object[]{id});
db.close();
}
}
/**
* 删除所有
*/
public void deleteAll() {
SQLiteDatabase db = mDbHelper.getWritableDatabase();
if (db.isOpen()) {
db.execSQL("delete from person");
db.close();
}
}
/**
* 查询所有
*/
public List<DataBean> queryAll() {
List<DataBean> list = new ArrayList<>();
SQLiteDatabase db = mDbHelper.getWritableDatabase();
if (db.isOpen()) {
Cursor cursor = db.rawQuery("select * from person", null);
while (cursor.moveToNext()) {
//int id = cursor.getInt(0);
int id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
DataBean dataBean = new DataBean(name);
list.add(dataBean);
}
cursor.close();
db.close();
}
return list;
}
/**
* 根据id查询
* 有问题
*/
public List<DataBean> query(int id) {
List<DataBean> list = new ArrayList<>();
SQLiteDatabase db = mDbHelper.getWritableDatabase();
if (db.isOpen()) {
Cursor cursor = db.rawQuery("select * from person where _id=?", new String[]{id + ""});
while (cursor.moveToNext()) {
//int id = cursor.getInt(0);
int _id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
DataBean dataBean = new DataBean(name);
list.add(dataBean);
}
cursor.close();
db.close();
}
return list;
}
Activity代码
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button btn_add;
private Button btn_delete;
private Button btn_update;
private Button btn_query;
private ListView mListView;
private DataBaseDao mDataBaseDao;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
mDataBaseDao = new DataBaseDao(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_add: //添加
addData();
break;
case R.id.btn_delete: //删除
deleteData();
break;
case R.id.btn_update: //更新
updateData();
break;
case R.id.btn_query: //查询
queryData();
break;
}
}
private void queryData() {
List<DataBean> list = mDataBaseDao.queryAll(); //查询全部
//List<DataBean> list = mDataBaseDao.query(5); //根据id查询
MyAdapter myAdapter = new MyAdapter(this, list, R.layout.item);
mListView.setAdapter(myAdapter);
}
private void updateData() {
DataBean dataBean = new DataBean("肖叶海更新");
mDataBaseDao.update(6, dataBean);
}
private void deleteData() {
//mDataBaseDao.delete(5); //根据id删除
mDataBaseDao.deleteAll(); //删除所有
}
private void addData() {
for (int i = 0; i < 10; i++) {
DataBean dataBean = new DataBean("肖叶海" + i);
mDataBaseDao.insert(dataBean);
}
}
private void initView() {
btn_add = (Button) findViewById(R.id.btn_add);
btn_delete = (Button) findViewById(R.id.btn_delete);
btn_update = (Button) findViewById(R.id.btn_update);
btn_query = (Button) findViewById(R.id.btn_query);
mListView = (ListView) findViewById(R.id.listview);
btn_add.setOnClickListener(this);
btn_delete.setOnClickListener(this);
btn_update.setOnClickListener(this);
btn_query.setOnClickListener(this);
}
}
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.originaldb.MainActivity">
<Button
android:id="@+id/btn_add"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="添加"/>
<Button
android:id="@+id/btn_delete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="删除"/>
<Button
android:id="@+id/btn_update"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="更新"/>
<Button
android:id="@+id/btn_query"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="查询"/>
<ListView
android:id="@+id/listview"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</LinearLayout>
实体类
public class DataBean {
private String name;
public DataBean(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}