首先实现sqliteOpenHelper帮助类,在这个类的实现中,构造器 ,oncreate ()和onUpgrade()是必须重写实现的。
oncreate()是新建数据库和新建表。
onupgrade()是用来提供版本信息的,主要有两个参数,一个是旧的版本号,一个是新的版本号。
/** * 新建数据库 * * @author hongjie * */ public class OpenHelper extends sqliteOpenHelper { /** * 单例 构造器 * * @param context * @param name * @param factory * @param version */ private OpenHelper(Context context,String name,CursorFactory factory,int version) { super(context,name,factory,version); // TODO Auto-generated constructor stub } /** * context对象 */ public static Context context; /** * 帮助类实例 */ private static OpenHelper db; /** * 同步 */ synchronized public static sqliteDatabase getInstance() { if (db == null) { db = new OpenHelper(context,"news.db",null,1); } return db.getReadableDatabase(); } /** * 创建数据库表 表 Type :存放新闻的类型 ,比如 体育,娱乐 , 军事 */ @Override public void onCreate(sqliteDatabase db) { // TODO Auto-generated method stub try { // 创建类型表,存放 新闻的类别 db.execsql("create table Type(_id integer primary key,typeName char(10) );"); // 创建新闻表 ,存放 新闻的类型 ,标题 ,摘要 ,文章 ,时间 db.execsql("create table Artcle(_id integer primary key,typeName char(10),artName char(10),tabloid TEXT,essay TEXT,downTime date);"); } catch (Exception e) { // TODO: handle exception Log.i("表格信息","表格已经存在"); } } /** * 版本 */ @Override public void onUpgrade(sqliteDatabase db,int oldVersion,int newVersion) { // TODO Auto-generated method stub Log.i("版本信息","当前版本号码:" + newVersion); } }
文章表的操作,主要是在表中写入和取出数据。
/** * 文章表的操作方法 * * @author hongjie * */ public class ArtcleDao { private Cursor cursor; private sqliteDatabase db; private List list; /** * 构造器 */ public ArtcleDao() { super(); db = OpenHelper.getInstance(); } /** * 获取所有的新闻类别 */ public List GetAllArtcle() { list = new ArrayList(); cursor = db.rawQuery("select * from Artcle",null); while (cursor.moveToNext()) { Artcle artcle = new Artcle(); artcle.setId(cursor.getInt(cursor.getColumnIndex("_id"))); artcle.setTypeName(cursor.getString(cursor .getColumnIndex("typeName"))); artcle.setArtName(cursor.getString(cursor.getColumnIndex("artName"))); artcle.setTabloid(cursor.getString(cursor.getColumnIndex("tabloid"))); artcle.setEssay(cursor.getString(cursor.getColumnIndex("essay"))); artcle.setDownTime(cursor.getString(cursor .getColumnIndex("downTime"))); list.add(artcle); } return list; } /** * 添加新闻类别 */ public void PutAllArtcle() { db.execsql( "insert into Artcle(typeName,artName,tabloid,essay,downTime ) values (?,?,?);",new String[] { "军事","art1","tab1","come art 1","2013.10.25" }); db.execsql( "insert into Artcle(typeName,new String[] { "娱乐",new String[] { "体育","2013.10.25" }); } }
然后是写接口,封装对数据库的直接操作方法。
/** * 文章接口 * * @author hongjie * */ public class ArtcleService { private ArtcleDao artcleDao=new ArtcleDao(); /** * 获取所有的文章信息 */ public List GetAllArtcle() { return artcleDao.GetAllArtcle(); } /** * 添加模拟数据 */ public void PutAllArtcle() { artcleDao.PutAllArtcle(); } }
下面是界面:
/** * 测试界面 * * @author hongjie * */ public class MainActivity extends Activity { private TextView txt; private List list; private String toString; private Type type; private Artcle artcle; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); OpenHelper.context = this; txt = (TextView) findViewById(R.id.text); list = new ArrayList(); TypeService typedao = new TypeService(); // typedao.PutAllType(); list = typedao.GetAllType(); typeList(); ArtcleService artdao = new ArtcleService(); // artdao.PutAllArtcle(); list = artdao.GetAllArtcle(); artcleList(); txt.setText(toString); } public void typeList() { toString = ""; for (int i = 0; i < list.size(); i++) { type = (Type) list.get(i); toString += type.getId() + ";" + type.getTypeName() + "\n"; } toString += "\n"; } public void artcleList() { for (int i = 0; i < list.size(); i++) { artcle = (Artcle) list.get(i); toString += artcle.getId() + ";" + artcle.getTypeName() + ";" + artcle.getArtName() + ";" + artcle.getTabloid() + ";" + artcle.getEssay() + ";" + artcle.getDownTime() + "\n"; } } }实现的效果:
1.在写sql语句,创建表的时候,如果让id自增长,不能添加 auto_increment ,添加了就会出现 null 。直接 primary key 就可以了 ,会自动增长id号的。
2.存放比较大的字符串的时候,使用 TEXT 的容量更大点 ,是用来存放 字符文本。
3.数据库表格的创建是在第一次运行程序的时候,如果要对表格进行修改了,那么需要在卸载了该应用后,重新创建数据库。
4.Service的方法,产生对象要在 初始化 Context对象之后 ,因为是先创建了数据库才有对数据库的操作。这里 ,可以声明一个所有BaseActivity,在BaseActivity中初始化 Context.
原文链接:https://www.f2er.com/sqlite/201009.html