android sqlite 创建数据库,表、增加数据、更新数据、删除数据
2015-12-03 23:04
597 查看
今天学习了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类代码
MainActivity类代码
在Mysql的onCreate方法中执行db.execSQL(String sql);sql为创建表的sql语句。
实例化Mysql之后通过执行getWritableDatabase()创建数据库,第一次运行getReadableDatabase() getWriteableDatabase()方法时会执行SQLiteOpenHelper的onCreate方法。通过adb进入data文件下的databases可以看到数据库BookStroe创建
借助sqlite命令打开 键入sqlite3 BookStroe进入sqlite,输入.table 可以看到创建的表Book。输入查询语句select * from Book;
什么都没有,因为还没插入数据
。这样,数据库、表创建完毕下面插入数据。
二、插入数据
前面说了调用SQLiteOpenHelpergetReadableDatabase() getWriteableDatabase()方法创建、升级数据库,同时这两个方法还会返回一个SQLliteDatabase对象,借助这个对象可以完成插入、更新、删除等操作。
更改下MainActivity代码
创建一个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;看到显示
数据上传成功。
三、更新数据
也是获得一个SQLliteDatabase对象db,调用SQLliteDatabase的方法update,该方法接收3个参数,第一个参数为表的名字,第二个参数为ContentValues对象,第三个参数为sql查询的where部分,?为一个占位符,接收第四个参数传来的数据,上面意思是查找name为“the
sy”的数据,将其price改为11。运行按下btn2,查看数据库
数据更新成功
三、删除数据
获得一个SQLliteDatabase对象db,调用SQLliteDatabase的方法delete,该方法接收三个参数,第一个为表的名字,第二个参数为sql查询的where部分,?为一个占位符,接收第三个参数传来的数据,上面意思为删除pages大于500的数据。运行按下btn3,查看数据库
成功删除
四、数据库、表的更新
更新数据库时需要调用onUpgrade(SQLiteDatabase db,int oldVersion , int newVersion)方法 oldVersion为更新之前的数据库版本,newVersion为更新之后新的数据库的版本,要调用该函数需要在实例化SQLiteOpenHelper的时候把版本该的比之前打1就可以
比如现在我想删除Book表,onUpgrade可以这样写
同时记得更新数据库的版本,运行后Book表将会被删除。
这种数据库更新方法比较粗暴,我再第一行代码上看到一种不错的解决方案。
五、查找数据
通过SQLliteDatabase的query方法执行并返回cursor对象来查找
最近才开始慢慢写博客,真的是累啊
不过看自己写出来的还是很高兴哒~ 不BB了继续去写了。。
SQLite简介
Google为Andriod的较大的数据处理提供了SQLite,他在数据存储、管理、维护等各方面都相当出色,功能也非常的强大。SQLite具备下列特点:使用 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的onCreate方法中执行db.execSQL(String sql);sql为创建表的sql语句。
实例化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;看到显示
数据上传成功。
三、更新数据
<pre name="code" class="java">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,查看数据库
数据更新成功
三、删除数据
<pre name="code" class="java">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"}); } });
获得一个SQLliteDatabase对象db,调用SQLliteDatabase的方法delete,该方法接收三个参数,第一个为表的名字,第二个参数为sql查询的where部分,?为一个占位符,接收第三个参数传来的数据,上面意思为删除pages大于500的数据。运行按下btn3,查看数据库
成功删除
四、数据库、表的更新
更新数据库时需要调用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"); }
同时记得更新数据库的版本,运行后Book表将会被删除。
这种数据库更新方法比较粗暴,我再第一行代码上看到一种不错的解决方案。
五、查找数据
通过SQLliteDatabase的query方法执行并返回cursor对象来查找
<span style="white-space:pre"> </span>SQLiteDatabase db = mySql.getWritableDatabase(); Cursor cursor = db.query("Test",null,null,null,null,null,null); if(cursor.moveToFirst()){ for(int i=0;i<cursor.getCount();i++){ cursor.move(i); Log.i("query","id"+cursor.getInt(cursor.getColumnIndex("id"))+" author"+curs<span style="white-space:pre"> </span>or.getString(cursor.getColumnIndex("author")) ); } }cursor.move()移动到表中的第几行
最近才开始慢慢写博客,真的是累啊
不过看自己写出来的还是很高兴哒~ 不BB了继续去写了。。
相关文章推荐
- Android中JNI开发之常见错误
- Android 工程图片资源命名禁忌
- Android Studio 快捷键整理分享
- Android进程和线程 --消息队列模型--ThreadLocal (3)(2015-12-02 19:41)
- Android中向webview注入js代码
- Android四大视图动画图文详解
- Android
- Android进程和线程 --消息队列模型--Looper (2)(2015-12-02 19:41)
- Android 基于google Zxing实现对手机中的二维码进行扫描
- 仿Android6.0联系人列表
- Android快速开发系列 10个常用工具类
- android 事件分发机制
- Android 关于“NetworkOnMainThreadException”解决办法
- 【基于Jsoup】Android_App暴走笑话开发
- Android 的事件分发机制(二)---ViewGroup的事件传递
- Android之项目推荐使用的第三方库
- android NFC开发
- android加载本地文件数据
- Android第三方开源FloatingActionButton(com.getbase.floatingactionbutton)【2】
- android 点击时背景图片 、 文字颜色变换