1. Android提供API供使用,不一定使用SQL语句;
2. 不用SQL语句
3. sqlite3工具:直接用命令行操作数据库,SQL语句
数据库类
**
* @author andong
* 数据库帮助类, 用于创建和管理数据库的.
*/
public class PersonSQLiteOpenHelper extends SQLiteOpenHelper {
private static final String TAG = "PersonSQLiteOpenHelper";
/**
* 数据库的构造函数
* @param context
*
* name 数据库名称
* factory 游标工程
* version 数据库的版本号 不可以小于1
*/
public PersonSQLiteOpenHelper(Context context) {
super(context, "itheima28.db", null, 2);
}
/**
* 数据库第一次创建时回调此方法.
* 初始化一些表
*/
@Override
public void onCreate(SQLiteDatabase db) {
// 操作数据库
String sql = "create table person(_id integer primary key, name varchar(20), age integer);";
db.execSQL(sql); // 创建person表
}
/**
* 数据库的版本号更新时回调此方法,
* 更新数据库的内容(删除表, 添加表, 修改表)
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if(oldVersion == 1 && newVersion == 2) {
Log.i(TAG, "数据库更新啦");
// 在person表中添加一个余额列balance
db.execSQL("alter table person add balance integer;");
}
}
}
Person类-----------------------------
操作数据库的Dao类
public class PersonDao2 {
private static final String TAG = "PersonDao2";
private PersonSQLiteOpenHelper mOpenHelper; // 数据库的帮助类对象
public PersonDao2(Context context) {
mOpenHelper = new PersonSQLiteOpenHelper(context);
}
/**
* 添加到person表一条数据
* @param person
*/
public void insert(Person person) {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
if(db.isOpen()) { // 如果数据库打开, 执行添加的操作
ContentValues values = new ContentValues();
values.put("name", person.getName()); // key作为要存储的列名, value对象列的值
values.put("age", person.getAge());
long id = db.insert("person", "name", values); //id为影响行 参数(表名,缺省值填列名如果values为空则该列填入NULL,填入的记录)
Log.i(TAG, "id: " + id);
db.close(); // 数据库关闭
}
}
/**
* 更据id删除记录
* @param id
*/
public void delete(int id) {
SQLiteDatabase db = mOpenHelper.getWritableDatabase(); // 获得可写的数据库对象
if(db.isOpen()) { // 如果数据库打开, 执行添加的操作
String whereClause = "_id = ?";
String[] whereArgs = {id + ""};
int count = db.delete("person", whereClause, whereArgs);
Log.i(TAG, "删除了: " + count + "行");
db.close(); // 数据库关闭
}
}
/**
* 根据id找到记录, 并且修改姓名
* @param id
* @param name
*/
public void update(int id, String name) {
SQLiteDatabase db = mOpenHelper.getWritableDatabase();
if(db.isOpen()) { // 如果数据库打开, 执行添加的操作
ContentValues values = new ContentValues();
values.put("name", name);
int count = db.update("person", values, "_id = ?", new String[]{id + ""});
Log.i(TAG, "修改了: " + count + "行");
db.close(); // 数据库关闭
}
}
public List<Person> queryAll() {
SQLiteDatabase db = mOpenHelper.getReadableDatabase(); // 获得一个只读的数据库对象
if(db.isOpen()) {
String[] columns = {"_id", "name", "age"}; // 需要的列
String selection = null; // 选择条件, 给null查询所有
String[] selectionArgs = null; // 选择条件的参数, 会把选择条件中的? 替换成数据中的值
String groupBy = null; // 分组语句 group by name
String having = null; // 过滤语句
String orderBy = null; // 排序
Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);
<pre name="code" class="java"> //<span style="font-family: Arial, Helvetica, sans-serif;">使用Cursor后要关闭,会一直保存数据,否则内存溢出;cursor.close()</span>
int id;String name;int age;if(cursor != null && cursor.getCount() > 0) {List<Person> personList = new ArrayList<Person>();while(cursor.moveToNext()) { // 向下移一位, 知道最后一位, 不可以往下移动了, 停止.id = cursor.getInt(0);name = cursor.getString(1);age = cursor.getInt(2);personList.add(new Person(id, name, age));}db.close();return personList;}db.close();}return null;}/** * 根据id查询人 * @param id * @return */public Person queryItem(int id) {SQLiteDatabase db = mOpenHelper.getReadableDatabase(); // 获得一个只读的数据库对象if(db.isOpen()) {String[] columns = {"_id", "name", "age"}; // 需要的列String selection = "_id = ?"; // 选择条件, 给null查询所有String[] selectionArgs = {id + ""}; // 选择条件的参数, 会把选择条件中的? 替换成数据中的值String groupBy = null; // 分组语句 group by nameString having = null; // 过滤语句String orderBy = null; // 排序Cursor cursor = db.query("person", columns, selection, selectionArgs, groupBy, having, orderBy);
//<span style="font-family: Arial, Helvetica, sans-serif;">使用Cursor后要关闭,会一直保存数据,否则内存溢出;cursor.close()</span>
if(cursor != null && cursor.moveToFirst()) { // cursor对象不为null, 并且可以移动到第一行int _id = cursor.getInt(0);String name = cursor.getString(1);int age = cursor.getInt(2);db.close();return new Person(_id, name, age);}db.close();}return null;}}
测试类
public class TestCase2 extends AndroidTestCase {
private static final String TAG = "TestCase";
public void test() {
// 数据库什么时候创建
PersonSQLiteOpenHelper openHelper = new PersonSQLiteOpenHelper(getContext());
// 第一次连接数据库时创建数据库文件. onCreate会被调用
openHelper.getReadableDatabase();
}
public void testInsert() {
PersonDao2 dao = new PersonDao2(getContext());
dao.insert(new Person(0, "zhouqi", 88));
}
public void testDelete() {
PersonDao2 dao = new PersonDao2(getContext());
dao.delete(8);
}
public void testUpdate() {
PersonDao2 dao = new PersonDao2(getContext());
dao.update(3, "fengjie");
}
public void testQueryAll() {
PersonDao2 dao = new PersonDao2(getContext());
List<Person> personList = dao.queryAll();
for (Person person : personList) {
Log.i(TAG, person.toString());
}
}
public void testQueryItem() {
PersonDao2 dao = new PersonDao2(getContext());
Person person = dao.queryItem(4);
Log.i(TAG, person.toString());
}
}
---------------------------------------------------------------------------------例子:手机安全卫士05-----------------------------------------------------------------------
(1)创建数据库类,新建一个包db.dao
public class BlackNumberDBOpenHelper extends SQLiteOpenHelper {
/**
* 数据库创建的构造方法 数据库名称 blacknumber.db
* @param context
*/
public BlackNumberDBOpenHelper(Context context) {
super(context, "blacknumber.db", null, 1);
}
//初始化数据库的表结构
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table blacknumber (_id integer primary key autoincrement,number varchar(20),mode varchar(2))");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
(2)数据库业务类,新建一个包.db
/**
* 黑名单数据库的增删改查业务类
* @author Administrator
*
*/
public class BlackNumberDao {
private BlackNumberDBOpenHelper helper;
/**
* 构造方法
* @param context 上下文
*/
public BlackNumberDao(Context context) {
helper = new BlackNumberDBOpenHelper(context);
}
/**
* 查询黑名单号码是是否存在
* @param number
* @return
*/
public boolean find(String number){
boolean result = false;
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from blacknumber where number=?", new String[]{number});
if(cursor.moveToNext()){
result = true;
}
cursor.close();
db.close();
return result;
}
/**
* 查询黑名单号码的拦截模式
* @param number
* @return 返回号码的拦截模式,不是黑名单号码返回null
*/
public String findMode(String number){
String result = null;
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.rawQuery("select mode from blacknumber where number=?", new String[]{number});
if(cursor.moveToNext()){
result = cursor.getString(0);
}
cursor.close();
db.close();
return result;
}
/**
* 查询全部黑名单号码
* @return
*/
//BackNUmberInfo为一个类,类似于Person类
public List<BlackNumberInfo> findAll(){
List<BlackNumberInfo> result = new ArrayList<BlackNumberInfo>();
SQLiteDatabase db = helper.getReadableDatabase();
Cursor cursor = db.rawQuery("select number,mode from blacknumber order by _id desc", null);
while(cursor.moveToNext()){
BlackNumberInfo info = new BlackNumberInfo();
String number = cursor.getString(0);
String mode = cursor.getString(1);
info.setMode(mode);
info.setNumber(number);
result.add(info);
}
cursor.close();
db.close();
return result;
}
/**
* 添加黑名单号码
* @param number 黑名单号码
* @param mode 拦截模式 1.电话拦截 2.短信拦截 3.全部拦截
*/
public void add(String number,String mode){
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("number", number);
values.put("mode", mode);
db.insert("blacknumber", null, values);
db.close();
}
/**
* 修改黑名单号码的拦截模式
* @param number 要修改的黑名单号码
* @param newmode 新的拦截模式
*/
public void update(String number,String newmode){
SQLiteDatabase db = helper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("mode", newmode);
db.update("blacknumber", values, "number=?", new String[]{number});
db.close();
}
/**
* 删除黑名单号码
* @param number 要删除的黑名单号码
*/
public void delete(String number){
SQLiteDatabase db = helper.getWritableDatabase();
db.delete("blacknumber", "number=?", new String[]{number});
db.close();
}
}