简单的使用SQLite本地数据库

前端之家收集整理的这篇文章主要介绍了简单的使用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,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

猜你在找的Sqlite相关文章