------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
首先关于SQLite的介绍百度上看看就大致了解的差不多了。
Android 操作数据库的关键步骤就在于实现API SQLiteOpenHelper,通常这个库辅助类来创建或打开数据库。
废话不多说直接上代码解释吧:
public class PersonDBOpenHelper extends SQLiteOpenHelper {
//context 上下文
//第二个是名字,如果名字空 为内存数据库 数据库名字
//CursorFactory 游标工厂
//version 数据库的版本号 最小为1
public PersonDBOpenHelper(Context context) {
super(context, "Person.db", null, 3);
// TODO Auto-generated constructor stub
//数据量存放再data/data/包名/database 下
}
/**
* 数据量在<b>第一次创建的时候</b>使用的方法
* 仅仅是在数据库第一次被创建的时候执行
*/
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
Log.i("MyTag", "数据库被创建了");
String sql = "create table person (id integer primary key autoincrement," +
" name varchar(100), phone varchar(20))";
//db.beginTransaction();开始事务
db.execSQL(sql);
}
//数据库升级的时候被使用
//这里面常常添加跟新数据库的sq语句
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
Log.i("MyTag", "数据库更新了");
String sql = "insert into person (name,phone)values('zhangsan','110')";
String sql2 = "insert into person (name,phone)values('liss','1520345')";
String sql3 = "insert into person (name,phone)values('nuli','100')";
String sql4 = "insert into person (name,phone)values('fengfou','11001578')";
db.execSQL(sql4);
db.execSQL(sql3);
db.execSQL(sql2);
db.execSQL(sql);
Log.i("MyTag", "已经成功的插入了几行数据");
}
}
再使用的时候如果只new出来上面的实现类oncreate()方法是不会执行的就是说数据库是不会创建的,通常都是执行了
getWritableDatabase()或者getReadableDatabase() 之后才会而执行。这点很重要。
关于数据库的操作有多种实现方法,可以像在javaweb那样操作数据库如下:
package com.person.dao;
import com.tai.db.PersonDBOpenHelper;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class PersonDao {
private PersonDBOpenHelper helper;
public PersonDao(Context cont) {
helper = new PersonDBOpenHelper(cont);
}
public void add(String name,String phone)
{
SQLiteDatabase Database = helper.getWritableDatabase();
String sql = "insert into person(name,phone)values(?,?)";
Database.execSQL(sql, new Object[]{name,phone});
Database.close();//关闭数据库是为了避免过多的连接
}
public boolean find(String name)
{
SQLiteDatabase Database = helper.getReadableDatabase();
Cursor cursor = Database.rawQuery("select * from person where name = ?", new String[] {name});
boolean result = cursor.moveToFirst();
cursor.close();//游标也是要关闭的
return result;
}
public void update(String newphone,String name)
{
SQLiteDatabase Database = helper.getWritableDatabase();
String sql = "update person set phone = ? where name=?;)";
Database.execSQL(sql, new Object[]{newphone,name});
Database.close();
}
public void delete(String name)
{
SQLiteDatabase Database = helper.getWritableDatabase();
String sql = "delete from person where name = ?;)";
Database.execSQL(sql, new Object[]{name});
Database.close();
}
}
要记得再使用过SQLiteDatabase以及游标Cursor后把它关闭。
上面是通过执行SQL语句来操作数据库,android也给我们提供了方便的API使用方法了可以参照下面的方法
package com.person.dao;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import com.person.bean.Person;
import com.tai.db.PersonDBOpenHelper;
public class PersonDao2 {
private PersonDBOpenHelper helper;
public PersonDao2(Context cont) {
helper = new PersonDBOpenHelper(cont);
}
public boolean add(String name,String phone)
{
SQLiteDatabase Database = helper.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("name", name);
contentValues.put("phone", phone);
long id = Database.insert("person", null, contentValues);
Database.close();//关闭数据库是为了避免过多的连接
return id!=-1;
}
public boolean find(String name)
{
SQLiteDatabase Database = helper.getReadableDatabase();
Cursor cursor = Database.query("person", null, "name = ?", new String[]{name}, null, null, null);
boolean result = cursor.moveToFirst();
cursor.close();//游标也是要关闭的
return result;
}
public boolean update(String newphone,String name)
{
SQLiteDatabase Database = helper.getWritableDatabase();
// String sql = "update person set phone = ? where name=?;)";
// Database.execSQL(sql, new Object[]{newphone,name});
ContentValues contentValues = new ContentValues();
contentValues.put("phone", newphone);
int row = Database.update("person", contentValues, "name = ?", new String[] {name});
Database.close();
return row!=-1;
}
public boolean delete(String name)
{
SQLiteDatabase Database = helper.getWritableDatabase();
// String sql = "delete from person where name = ?;)";
// Database.execSQL(sql, new Object[]{name});
int row = Database.delete("person", "name = ?", new String[]{name});
Database.close();
Log.i("MyTag", row+"");
return row!=-1;
}
public List<Person> findAll()
{
SQLiteDatabase Database = helper.getReadableDatabase();
List<Person> list = new ArrayList<Person>();
Cursor cursor = Database.query("person", null, null, null, null, null, null);
while (cursor.moveToNext()) {
int id = cursor.getInt(cursor.getColumnIndex("id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
String phone = cursor.getString(cursor.getColumnIndex("phone"));
Person person = new Person(id,name,phone);
list.add(person);
}
cursor.close();
Database.close();
return list;
}
}
这里各个方法的参数都差不多,就是把平时我们用得SQL语句拆分开来,也就query的多一点别的都差不多。
android.database.sqlite.
SQLiteDatabase.query(
String table,
String[] columns,
String selection,
String[] selectionArgs,
String groupBy,
String having,
String orderBy)
String table,表名 String[] columns,要查询列表的列。传递null将返回所有列。String selection,查询条件String[] selectionArgs,查询条件对应的值
tring groupBy, String having, String orderBy 这些简要易懂和sql一样。