今天学习了android 中内嵌的数据库sqlite,sqlite的简单介绍:
Google为Andriod的较大的数据处理提供了SQLite,他在数据存储、管理、维护等各方面都相当出色,功能也非常的强大。SQLite具备下列特点:
1.轻量级
使用 SQLite 只需要带一个动态库,就可以享受它的全部功能,而且那个动态库的尺寸想当小。
2.独立性
SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。
3.隔离性
SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。
4.跨平台
SQLite 目前支持大部分操作系统,不至电脑操作系统更在众多的手机系统也是能够运行,比如:Android。
5.多语言接口
SQLite 数据库支持多语言编程接口。
6.安全性
SQLite 数据库通过数据库级上的独占性和共享锁来实现独立事务处理。这意味着多个进程可以在同一时间从同一数据库读取数据,但只能有一个可以写入数据。
这几天一直再看mysql,所以看到数据库就感觉头疼,但是我还是坚持了下来
一、创建数据库
android 有个辅助类SQLiteOpenHelper让我们专门来管理数据库,SQLiteOpenHelper是一个抽象方法,意味着我们继承这个类要实现这两个方法分别是onCreate() onUpgrede()方法,还有两个实例方法getReadableDatabase() getWriteableDatabase(),这两个方法都可以创建或打开一个现有的数据库,并返回一个可对数据库读写的对象。
SQLiteOpenHelper的一般用少一点参数的构造方法:
SQLiteOpenHelper(Context context,String name,SQLiteDatabase.CursorFactory factory,int version);
name为创建的数据库的名称,factory一般为null 具体用法有待深入研究,version为数据库的版本,初次设置为1。关于数据库的版本,个人理解为初次创建数据库版本为1,增添删除数据不会影响版本,当你要运行onUpgrede()方法来更新表的时候你需要把版本设置的比之前高,否则不能正常更新数据库的表。例如初始版本为1,现在要增加一个新的表,version改为2即可。还有如果本地的数据库版本为4,你构造函数的数据库版本为3会报“Can't downgrade database from version 4 to 3”的错误,所以要注意版本的变化。
mysql类代码
public class MySql extends SQLiteOpenHelper{
private static final String CREATE_BOOK = "create table Book("
+"id integer primary key,"
+"author text,"
+"price real,"
+"pages integer,"
+"name text)";
private Context mContext;
public MySql(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
mContext = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(CREATE_BOOK);
Log.i("create", "create");
Toast.makeText(mContext,"create",Toast.LENGTH_SHORT).show();
}
}
MainActivity类代码
public class MainActivity extends ActionBarActivity {
private Button btn,btn1,btn2,btn3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final MySql mySql = new MySql(this,"BookStore",null,5);
btn = (Button)findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.i("btn","btn");
mySql.getWritableDatabase();
}
});
}
实例化Mysql之后通过执行getWritableDatabase()创建数据库,第一次运行getReadableDatabase() getWriteableDatabase()方法时会执行SQLiteOpenHelper的onCreate方法。通过adb进入data文件下的databases可以看到数据库BookStroe创建
借助sqlite命令打开 键入sqlite3 BookStroe进入sqlite,输入.table 可以看到创建的表Book。输入查询语句select * from Book;
什么都没有,因为还没插入数据。这样,数据库、表创建完毕下面插入数据。
二、插入数据
前面说了调用SQLiteOpenHelpergetReadableDatabase() getWriteableDatabase()方法创建、升级数据库,同时这两个方法还会返回一个SQLliteDatabase对象,借助这个对象可以完成插入、更新、删除等操作。
更改下MainActivity代码
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = mySql.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("id","1");
values.put("name","the sy");
values.put("author","dan");
values.put("pages",454);
values.put("price",16.96);
db.insert("Book", null, values);
values.clear();
values.put("id","2");
values.put("name","the sy1");
values.put("author","dan1");
values.put("pages",4541);
values.put("price",16.961);
db.insert("Book",null,values);
}
});
创建一个add Button,在按钮里增加添加数据的相应。首先获取到SQLliteDatabase对象db,之后创建一个ContentValues对象values存放sql,,values.put("str1","str2")put为向其中添加数据,str1位表中的字段名,str2位向该字段名插入的数据。values构造完成后调用SQLliteDatabase的insert方法,该方法接收3个参数,第一个参数为表名,第二个参数一般不用,直接null,第三个参数为ContentValues对象。运行之后按下add按钮,在adb中键入select * from Book;看到显示
数据上传成功。
三、更新数据
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = mySql.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("price",11);
db.update("Book",values,"name=?",new String[]{"the sy"});
}
});
也是获得一个SQLliteDatabase对象db,调用SQLliteDatabase的方法update,该方法接收3个参数,第一个参数为表的名字,第二个参数为ContentValues对象,第三个参数为sql查询的where部分,?为一个占位符,接收第四个参数传来的数据,上面意思是查找name为“the sy”的数据,将其price改为11。运行按下btn2,查看数据库
数据更新成功
三、删除数据
btn3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = mySql.getWritableDatabase();
ContentValues values = new ContentValues();
db.delete("Book","pages>?",new String[]{"500"});
}
});
四、数据库、表的更新
更新数据库时需要调用onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion)方法 oldVersion为更新之前的数据库版本,newVersion为更新之后新的数据库的版本,要调用该函数需要在实例化SQLiteOpenHelper的时候把版本该的比之前打1就可以
比如现在我想删除Book表,onUpgrade可以这样写
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("drop table if exists Book");
}
这种数据库更新方法比较粗暴,我再第一行代码上看到一种不错的解决方案。
五、查找数据
通过SQLliteDatabase的query方法执行并返回cursor对象来查找
SQLiteDatabase db = mySql.getWritableDatabase();
Cursor cursor = db.query("Test",null,null,null,null,null,null);
if(cursor.moveToFirst()){
for(int i=0;i or.getString(cursor.getColumnIndex("author"))
);
}
}
cursor.move()移动到表中的第几行
最近才开始慢慢写博客,真的是累啊
不过看自己写出来的还是很高兴哒~ 不BB了继续去写了。。