首先实现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 ,artName ,tabloid ,essay ,downTime ) values (? ,? ,? ,? ,?);",
new String[] { "娱乐", "art1", "tab1", "come art 1", "2013.10.25" });
db.execSQL(
"insert into Artcle(typeName ,artName ,tabloid ,essay ,downTime ) values (? ,? ,? ,? ,?);",
new String[] { "体育", "art1", "tab1", "come art 1", "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.