简单的使用SQLite本地数据库

首先实现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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值