前序:
Android五大存储:内部存储、外部存储、网络存储、SharedPreferences和SQLite
这次不废话了,讲到的知识除了SQLite 还涉及到单元测试框架,请看下图:
英文看不懂没关系,看到绿色长条说明测试运行成功!!!
正文:
直接看代码:
/**
* Created by xuchen on 2016/9/1.
*/
public class MyOpenHelper extends SQLiteOpenHelper {
public MyOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
//数据库创建的时候调用此方法
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table person(_id integer primary key autoincrement,name char(10),salary) char(20),phone integer(20))");
Log.e("onCreate: ", "数据库创建了");
}
//数据库升级时调用此方
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
Log.e("onUpgrade: ", "数据库升级了");
}
SQLiteOpenHelper 顾名思义SQLite打开帮助类,最重要的便是这三个方法了onCreate(); onUpgrade(); MyOpenHelper();
测试:
public class TextCase extends AndroidTestCase {
private MyOpenHelper myOpenHelper;
private SQLiteDatabase db;
public void text(){
//getContext():获取一个虚拟的上下文
MyOpenHelper myOpenHelper = new MyOpenHelper(getContext(), "peopel.db", null, 1);
//如果数据库不存在,先创建数据库,再获取可读可写的数据库对象,如果数据库存在,就直接打开
SQLiteDatabase db = myOpenHelper.getWritableDatabase();
}
@Override
protected void setUp() throws Exception {
super.setUp();
myOpenHelper = new MyOpenHelper(getContext(), "people.db", null, 1);
db = myOpenHelper.getWritableDatabase();
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
db.close();
}
public void insert(){
db.execSQL("insert into person (name,salary,phone)values(?,?,?)",new Object[]{"小汪","20000",110});
db.execSQL("insert into person (name,salary,phone)values(?,?,?)",new Object[]{"小华","25000",120});
db.execSQL("insert into person (name,salary,phone)values(?,?,?)",new Object[]{"小哥","30000",119});
}
public void delete(){
db.execSQL("delete from person where name =?",new Object[]{"小汪"});
}
public void update(){
db.execSQL("update person set phone=? where name=?",new Object[]{10086,"小华"});
}
public void select(){
Cursor cursor = db.rawQuery("select name,salary from person",null);
while (cursor.moveToNext()){
//通过列索引获取列的值
String name = cursor.getString(cursor.getColumnIndex("name"));
String salary = cursor.getString(cursor.getColumnIndex("salary"));
Log.e("select: ",name+";"+salary);
}
}
/**
* SQLite API;
*/
public void insertAPI(){
//把要插入的数据全部封装至ContentValues对象
ContentValues values = new ContentValues();
values.put("name","德玛西亚");
values.put("salary","30000");
values.put("phone",911);
db.insert("person",null,values);
}
public void deleteAPI(){
int i = db.delete("person", "name = ? and _id=?", new String[]{"德玛西亚", "3"});
Log.e("i: ", String.valueOf(i));
}
public void updateAPI(){
ContentValues values = new ContentValues();
values.put("salary",50000);
int i = db.update("person", values, "name=?", new String[]{"小哥"});
Log.e("i: ", String.valueOf(i));
}
public void selectAPI(){
Cursor cursor = db.query("person", null, null, null, null, null, null, null);
while (cursor.moveToNext()){
String name = cursor.getString(cursor.getColumnIndex("name"));
String salary = cursor.getString(cursor.getColumnIndex("salary"));
String phone = cursor.getString(cursor.getColumnIndex("phone"));
Log.e("selectAPI: ",name+";"+salary+";"+phone );
}
public void transaction(){
try {
//开启事务
db.beginTransaction();
ContentValues values = new ContentValues();
values.put("phone",10010);
db.update("person",values,"name=?",new String[]{"小哥"});
values.clear();
values.put("salary",60000);
db.update("person",values,"name=?",new String[]{"小哥"});
//设置事务执行成功
db.setTransactionSuccessful();
}
finally {
//关闭事务,同时提交,如果已经设置事务执行成功,那么sql语句就生效了,反之,sql语句回滚
db.endTransaction();
}
分享:
如果对于如何用Android开发游戏感兴趣的同学可以看这篇文章,链接如下:
五子棋:http://www.jianshu.com/writer#/notebooks/4761187/notes/5418026
反馈:
欢迎万能网友互相分享交流!
CSDN:http://write.blog.csdn.net/postlist
github: https://github.com/ITtrap
QQ: 2632545852 微信:xuchen2100
Email: xuchen1009@gmail.com
网友评论