代码建库,在代码中动态建立数据库是比较常用的方法。列如在程序运行的过程中,当需要进行数据库操作的时候,应用程序会首先尝试打开数据库,此时如果数据库并不存在,程序会自动建立数据库,然后再打开数据库。
在编写的时候,一般将所有对数据库的操作封装到一个类中,因此只要调用这个类,就可以完成对数据库的添加、更改、删除和查询等操作。
public class MysqLiteHelper extends sqliteOpenHelper { /** * version 1 * factory 数据查找的游标 默认null>>> cursor * name 数据库名 * @param context */ public MysqLiteHelper(Context context) { super(context,"my.db",null,1); // TODO Auto-generated constructor stub } @Override public void onCreate(sqliteDatabase db) { db.execsql("create table person (_id integer primary key autoincrement,name varchar(32),age integer)"); } Dao层 public class PersonService { private MysqLiteHelper helper; public PersonService(Context context) { helper = new MysqLiteHelper(context); } /** * 插入数据 * @param p */ public void insert (Person p){ sqliteDatabase db = helper.getWritableDatabase(); //db.execsql("insert into person values("+p.getName()+","+p.getAge()+")"); if(db.isOpen()){ db.execsql("insert into person(name,age)values (?,?)",new Object[]{p.getName(),p.getAge()}); } db.close(); } /** * 删除数据 * @param name */ public void del (String name){ sqliteDatabase db = helper.getWritableDatabase(); if(db.isOpen()){ db.execsql("delete from person where name=?",new String[]{name}); } db.close(); } /** * 修改数据 * @param oldName * @param newName */ public void update (String oldName,String newName){ sqliteDatabase db = helper.getWritableDatabase(); if(db.isOpen()){ db.execsql("update person set name=? where name=?",new String[]{newName,oldName}); } db.close(); } /** * 查询所有数据 * @return */ public List<Person> getAll(){ List<Person> lists=new ArrayList<Person>(); sqliteDatabase db = helper.getReadableDatabase(); if(db.isOpen()){ Cursor cursor = db.rawQuery("select name,age from person",null); if(cursor!=null&&cursor.getCount()>0){ while(cursor.moveToNext()){ String name = cursor.getString(0); int age = cursor.getInt(1); Person person=new Person(name,age); lists.add(person); } } cursor.close(); return lists; } db.close(); return null; } /** * 查询对应的数据 * @param id * @return */ public Person getPersonById(int id){ sqliteDatabase db = helper.getReadableDatabase(); Person person=new Person(); if(db.isOpen()){ Cursor cursor = db.rawQuery("select name,age from person where _id=? ",new String[]{String.valueOf(id)}); if(cursor!=null&&cursor.getCount()>0){ if(cursor.moveToLast()){ String name = cursor.getString(0); person.setName(name); int age = cursor.getInt(1); person.setAge(age); } } cursor.close(); return person; } db.close(); return null; }
一些简单sql操作语句:
//创建表
createtableperson(_idintegerprimarykeyautoincrement,namevarchar(32),ageinteger)
//插入数据
insertintopersonvalues(1,"bojie",18)
insertintopersonvalues(2,"pange",18)
//删除数据
deletefrompersonwherename="pange"
//查询数据
selectnamefrompersonwhere_id=2
//修改数据
updatepersonsetname="pange+tanji"wherename="pange"
其实这些操作都是基于一个继承了sqliteOpenHelper的子类
public class MysqLiteHelper extends sqliteOpenHelper { /** * version 1 * factory 数据查找的游标 默认null>>> cursor * name 数据库名 * @param context */ public MysqLiteHelper(Context context) { super(context,age integer)"); }