增加数据:
删除数据 修改数据
SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。它是D.RichardHipp建立的公有领域项目。它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月。 至2015年已经有15个年头,SQLite也迎来了一个版本 SQLite 3已经发布。
------(摘自百度百科)
一般数据采用的固定的静态数据类型,而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: 包含了 小时、分钟、秒;
方法名称 |
方法表示含义 |
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() 关闭数据 |
insert(String table,String nullColumnHack,ContentValues values)
传入的参数:1,表名,2,空列的默认值,3,ContentValues,类似于hashMap,是一种储存的机制,用法为:
/**
* 创建一个用来插入数据的方法
*
* @param name 姓名
* @param sex 性别
* @param age 年龄
* @param hobby 爱好
*/
public void insert(String name, String sex, String age, String hobby) {
//让数据库可写
SQLiteDatabase database = getWritableDatabase();
/*
类似于HashMap 都有键值对
key 对应的列表中的某一列的名称,字段
value 对应字段要插入的值
*/
ContentValues values = new ContentValues();
values.put("name", name);
values.put("sex", sex);
values.put("age", age);
values.put("hobby", hobby);
//插入
database.insert(TABLE_NAME, null, values);
//插入完成后关闭,以免造成内存泄漏
database.close();
}
delete(String table,String whereClause,String[] whereArgs)
传入的参数:参数1, 表名称 参数2 , 删除条件参数3 , 删除条件值数组,用法为:
/**
* 创建一个删除数据的方法,传入的参数越多,删除时越精确的找到要删除的哪一行
*
* @param name
* @param sex
* @param age
* @param hobby
*/
public void delete(int id, String name, String sex, String age, String hobby) {
SQLiteDatabase database = getWritableDatabase();
/*
删除的条件,当id = 传入的参数id时,sex = 传入的参数sex时,age = 传入的age,hobby = 传入的hobby时
当条件都满足时才删除这行数据,一个条件不满足就删除失败
*/
String where = "id=? and name = ? and sex = ? and age = ? and hobby = ?";
//删除条件的参数
String[] whereArgs = {id + "", name, sex, age, hobby};
database.delete(TABLE_NAME, where, whereArgs);
database.close();
}
/**
* 再创建一个删除一个删除的方法,条件只有一个
*/
public void delete(int id) {
SQLiteDatabase database = getWritableDatabase();
//当条件满足id = 传入的参数的时候,就删除那整行数据,有可能有好几行都满足这个条件,满足的全部都删除
String where = "id = ?";
String[] whereArgs = {id + ""};
database.delete(TABLE_NAME, where, whereArgs);
database.close();
}
update(String table,ContentValues values,String whereClause, String[] whereArgs)方法
传入的参数:参数1 表名称 参数2 跟行列ContentValues类型的键值对Key-Value
参数3 更新条件(where字句) 参数4 更新条件数组
/**
* 创建一个修改数据的方法
* @param id 条件,修改id为"id"的那一行数据
* @param name
* @param sex
* @param age
* @param hobby
*/
public void updata(int id,String name, String sex, String age, String hobby) {
SQLiteDatabase database = getWritableDatabase();
// update(String table,ContentValues values,String whereClause, String[] whereArgs)
String where = "id = ?";
String[] whereArgs = {id+""};
ContentValues values = new ContentValues();
values.put("name", name);
values.put("sex", sex);
values.put("age", age);
values.put("hobby", hobby);
//参数1 表名称 参数2 跟行列ContentValues类型的键值对Key-Value
// 参数3 更新条件(where字句) 参数4 更新条件数组
database.update(TABLE_NAME, values,where, whereArgs);
database.close();
query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit)
传入参数:参数table:表名称 参数columns:列名称数组 参数selection:条件字句,相当于where 参数selectionArgs:条件字句,参数数组
参数groupBy:分组列 参数having:分组条件 参数orderBy:排序列 参数limit:分页查询限制
/**
* 创建一个查找数据库的方法
*
* public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit);
各个参数的意义说明:
参数table:表名称
参数columns:列名称数组
参数selection:条件字句,相当于where
参数selectionArgs:条件字句,参数数组
参数groupBy:分组列
参数having:分组条件
参数orderBy:排序列
参数limit:分页查询限制
参数Cursor:返回值,相当于结果集ResultSet
Cursor是一个游标接口,提供了遍历查询结果的方法,如移动指针方法move(),获得列值方法getString()等.
*/
public Cursor query() {
//数据库可读
SQLiteDatabase database = getReadableDatabase();
//查找
Cursor query = database.query(TABLE_NAME, null, null, null, null, null, null);
return query;
}
循环遍历,拿到数据
/**
* 通过查找数据库,拿到里面的数据
*/
private List
操作数据库的类
package com.duanlian.databasedemo;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
/**
* Created by duanlian on 2016/9/13.
*/
public class MyDataBase extends SQLiteOpenHelper {
//数据库名字
public static final String DB_NAME = "Students.db";
//数据库版本
public static final int DB_VERSION = 1;
//表名
public static final String TABLE_NAME = "student";
public static MyDataBase myDataBase;
/**
* 单例模式返回数据库
*
* @param context 上下文
* @return 数据库对象
*/
public static MyDataBase getInstances(Context context) {
if (myDataBase == null) {
return new MyDataBase(context);
} else {
return myDataBase;
}
}
//上下文,数据库名字,数据库工厂,版本号
public MyDataBase(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
//此方法中创建表
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
//这个有个坑,create table"+" " + TABLE_NAME 中间一定要加空格,别问为什么,我也不知道,不加就语法错误,吐血
sqLiteDatabase.execSQL("create table" + " " + TABLE_NAME + "(id INTEGER PRIMARY KEY AUTOINCREMENT,name text,sex text,age text,hobby text);");
}
/**
* 用来更新数据库版本的
* onCreate方法只是在第一次安装app的时候会调用,之后的数据库要更改的话,必须使用数据库版本上升,或者卸载了重新安装
*
* @param sqLiteDatabase 数据库
* @param oldVersion 老的版本号
* @param newVersion 更新后的版本号
*/
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) {
if (newVersion > oldVersion) {
//删除老表
sqLiteDatabase.execSQL("drop" + TABLE_NAME);
//重新创建表
onCreate(sqLiteDatabase);
}
}
/**
* 创建一个用来插入数据的方法
*
* @param name 姓名
* @param sex 性别
* @param age 年龄
* @param hobby 爱好
*/
public void insert(String name, String sex, String age, String hobby) {
//让数据库可写
SQLiteDatabase database = getWritableDatabase();
/*
类似于HashMap 都有键值对
key 对应的列表中的某一列的名称,字段
value 对应字段要插入的值
*/
ContentValues values = new ContentValues();
values.put("name", name);
values.put("sex", sex);
values.put("age", age);
values.put("hobby", hobby);
//插入
database.insert(TABLE_NAME, null, values);
//插入完成后关闭,以免造成内存泄漏
database.close();
}
/**
* 创建一个查找数据库的方法
*
* public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String groupBy,String having,String orderBy,String limit);
各个参数的意义说明:
参数table:表名称
参数columns:列名称数组
参数selection:条件字句,相当于where
参数selectionArgs:条件字句,参数数组
参数groupBy:分组列
参数having:分组条件
参数orderBy:排序列
参数limit:分页查询限制
参数Cursor:返回值,相当于结果集ResultSet
Cursor是一个游标接口,提供了遍历查询结果的方法,如移动指针方法move(),获得列值方法getString()等.
*/
public Cursor query() {
//数据库可读
SQLiteDatabase database = getReadableDatabase();
//查找
Cursor query = database.query(TABLE_NAME, null, null, null, null, null, null);
return query;
}
/**
* 创建一个删除数据的方法,传入的参数越多,删除时越精确的找到要删除的哪一行
*
* @param name
* @param sex
* @param age
* @param hobby
*/
public void delete(int id, String name, String sex, String age, String hobby) {
SQLiteDatabase database = getWritableDatabase();
/*
删除的条件,当id = 传入的参数id时,sex = 传入的参数sex时,age = 传入的age,hobby = 传入的hobby时
当条件都满足时才删除这行数据,一个条件不满足就删除失败
*/
String where = "id=? and name = ? and sex = ? and age = ? and hobby = ?";
//删除条件的参数
String[] whereArgs = {id + "", name, sex, age, hobby};
database.delete(TABLE_NAME, where, whereArgs);
database.close();
}
/**
* 再创建一个删除一个删除的方法,条件只有一个
*/
public void delete(int id) {
SQLiteDatabase database = getWritableDatabase();
//当条件满足id = 传入的参数的时候,就删除那整行数据,有可能有好几行都满足这个条件,满足的全部都删除
String where = "id = ?";
String[] whereArgs = {id + ""};
database.delete(TABLE_NAME, where, whereArgs);
database.close();
}
/**
* 创建一个修改数据的方法
* @param id 条件,修改id为"id"的那一行数据
* @param name
* @param sex
* @param age
* @param hobby
*/
public void updata(int id,String name, String sex, String age, String hobby) {
SQLiteDatabase database = getWritableDatabase();
// update(String table,ContentValues values,String whereClause, String[] whereArgs)
String where = "id = ?";
String[] whereArgs = {id+""};
ContentValues values = new ContentValues();
values.put("name", name);
values.put("sex", sex);
values.put("age", age);
values.put("hobby", hobby);
//参数1 表名称 参数2 跟行列ContentValues类型的键值对Key-Value
// 参数3 更新条件(where字句) 参数4 更新条件数组
database.update(TABLE_NAME, values,where, whereArgs);
database.close();
}
}
mainActivity里面的代码逻辑
package com.duanlian.databasedemo;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import com.duanlian.databasedemo.adapter.MyListViewAdapter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class MainActivity extends AppCompatActivity {
private List
插入数据逻辑
package com.duanlian.databasedemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
public class AddActivity extends AppCompatActivity {
private EditText edt_name;
private EditText edt_sex;
private EditText edt_age;
private EditText edt_hobby;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
initView();
}
private void initView() {
edt_name = (EditText) findViewById(R.id.add_name);
edt_sex = (EditText) findViewById(R.id.add_sex);
edt_age = (EditText) findViewById(R.id.add_age);
edt_hobby = (EditText) findViewById(R.id.add_hobby);
}
public void add(View view){
//拿到输入的数据
String name = edt_name.getText().toString().trim();
String sex = edt_sex.getText().toString().trim();
String age = edt_age.getText().toString().trim();
String hobby = edt_hobby.getText().toString().trim();
//调用插入方法
MyDataBase.getInstances(AddActivity.this).insert(name,sex,age,hobby);
finish();
}
}
修改数据逻辑
package com.duanlian.databasedemo;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
public class CorrectActivity extends AppCompatActivity {
private int id;
private String name;
private String sex;
private String age;
private String hobby;
private EditText edt_name;
private EditText edt_sex;
private EditText edt_age;
private EditText edt_hobby;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_correct);
id = getIntent().getIntExtra("id", 0);
name = getIntent().getStringExtra("name");
sex = getIntent().getStringExtra("sex");
age = getIntent().getStringExtra("age");
hobby = getIntent().getStringExtra("hobby");
initView();
}
private void initView() {
edt_name = (EditText) findViewById(R.id.correct_name);
edt_sex = (EditText) findViewById(R.id.correct_sex);
edt_age = (EditText) findViewById(R.id.correct_age);
edt_hobby = (EditText) findViewById(R.id.correct_hobby);
edt_name.setText(name);
edt_sex.setText(sex);
edt_age.setText(age);
edt_hobby.setText(hobby);
}
public void choose(View view) {
switch (view.getId()) {
case R.id.correct_cancel:
finish();
break;
case R.id.correct_sure:
//得到输入的
String name = edt_name.getText().toString().trim();
String sex = edt_sex.getText().toString().trim();
String age = edt_age.getText().toString().trim();
String hobby = edt_hobby.getText().toString().trim();
//调用修改方法
MyDataBase.getInstances(CorrectActivity.this).updata(id, name, sex, age, hobby);
finish();
break;
}
}
}
demo下载地址:
http://download.csdn.net/detail/dl10210950/9631514