Android中SQLite的使用
SQLite是Android中内置的数据库,SQLite是轻量级数据库,支持标准的SQL语法,并且支持ACID事物。
在Android中提供了SQLIteOPenHelper类,帮助我们使用SQLite。SQLite是一个抽象类,其中有两个抽象方法,分别是onCreate()和onUpgrade(),我们必须重写。SQLiteOpenHelper 中还有两个非常重要的实例方法, getReadableDatabase() 和getWritableDatabase()。这两个方法都可以创建或打开一个现有的数据库(如果数据库已存在则直接打开,否则创建一个新的数据库),并返回一个可对数据库进行读写操作的对象。不同的是,当数据库不可写入的时候(如磁盘空间已满)getReadableDatabase()方法返回的对象将以只读的方式去打开数据库,而getWritableDatabase()方法则将出现异常。
SQLiteOpenHelper 中有两个构造方法可供重写。一般选择参数少的进行重写。第一个参数是Context,第二个参数是数据库的名称,第三个参数是自己定义的Cursor,一般我们传人null,第四个是当前数据库的版本号。
1.对数据库的操作
对数据的操作无非为四种:增删改差,对应到数据库里面是,insert(增加数据),delete(删除数据),update(修改数据),select(查询数据)。
SQLite中提供了insert()方法进行插入数据,需要提供3个参数,第一个是表名,第二个是一般为null,第三个参数ContentValue对象,包含需要的值.
提供update()方法进行修改数据,需要提供4个参数,第一是表名,第二个是contentValue对象,第三,四个参数决定对哪些数据进行修改,为指定则默认所有。
提供delete()方法对数据进行删除,需要提供3个参数,第一是表名,第二,三两个参数指定要删除的数据的条件。未指定则默认所有。
其他query()方法对数据进行查询,需要提供7个参数,是最复杂的。第一个参数指定表名,第二个参数指定所需要的列,第三、四个参数指定查询哪些数据,第五、六个参数和组有关。一般现在直接用null,最后一个是排序方式。
下面来看具体的代码,
首先是布局文件,我们只为每个功能设定了一个按钮
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity"
android:orientation="vertical"
> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/create_database"
android:text="create database"
/> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/add_btn"
android:text="add data"
/> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/update_btn"
android:text="update data"
/> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/delete"
android:text="delete data"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/select_btn"
android:text="search a data"
/> </LinearLayout>
activity_main.xml
然后我们定义了MyDataBaseHelper继承DatabaseHelpler,代码如下
public class MyDatabaseHelper extends SQLiteOpenHelper {
public static final String CREATE_BOOK = "create table Book ("
+"id integer primary key,"
+"author text,"
+"price real,"
+"pages integer,"
+"name text)";
private Context mContext;
public MyDatabaseHelper(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);//用sql语句直接创建表
Toast.makeText(mContext,"create successed",Toast.LENGTH_LONG).show();
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
View MyDatabaseHelper.java
最后在MainActivity.java中使用
public class MainActivity extends AppCompatActivity {
private MyDatabaseHelper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dbHelper = new MyDatabaseHelper(this,"BookStore.db",null,1);
Button createdb = (Button)findViewById(R.id.create_database);
createdb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dbHelper.getWritableDatabase();
}
});
Button addData = (Button)findViewById(R.id.add_btn);
addData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("id",1);
values.put("author","Tao Lin");
values.put("pages",555);
values.put("price", 65.9);
values.put("name", "first code");
db.insert("Book", null, values);//插入第一条数据
values.clear();
values.put("id", 2);
values.put("author","Dan Brown");
values.put("pages",510);
values.put("price",19.95);
values.put("name","the lost symbol");
db.insert("Book", null, values);//插入第二条数据
}
});
Button updataData = (Button)findViewById(R.id.update_btn);
updataData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("price",50.99);
db.update("Book", values, "name = ?", new String[]{"first code"});
}
});
Button deleteData = (Button)findViewById(R.id.delete);
deleteData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
db.delete("Book","pages>?" ,new String[]{"550"});
}
});
Button selectData = (Button)findViewById(R.id.select_btn);
selectData.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SQLiteDatabase db = dbHelper.getWritableDatabase();
Cursor cursor = db.query("Book",null,null,null,null,null,null);
if (cursor.moveToNext()){
do{
String name = cursor.getString(cursor.getColumnIndex("name"));
String author = cursor.getString(cursor.getColumnIndex("author"));
int pages = cursor.getInt(cursor.getColumnIndex("pages"));
double price = cursor.getDouble(cursor.getColumnIndex("price"));
Log.d("MainActivity","Book name is "+name);
Log.d("MainActivity","Book author is "+author);
Log.d("MainActivity","Book pages is "+pages);
Log.d("MainActivity","Book price is "+price);
}while (cursor.moveToNext());
}
cursor.close();
}
});
}
}
MainAcivity.java
如果你对SQL语句非常熟悉,Android也支持直接用SQL语句对数据库进行访问。具体的下次再说。
Android中SQLite的使用的更多相关文章
- Android中SQLite数据库操作(1)——使用SQL语句操作SQLite数据库
下面是最原始的方法,用SQL语句操作数据库.后面的"Android中SQLite数据库操作(2)--SQLiteOpenHelper类"将介绍一种常用的android封装操作SQL ...
- Android中SQLite数据库小计
2016-03-16 Android数据库支持 本文节选并翻译<Enterprise Android - Programing Android Database Applications for ...
- 我的Android六章:Android中SQLite数据库操作
今天学习的内容是Android中的SQLite数据库操作,在讲解这个内容之前小编在前面有一篇博客也是讲解了SQLite数据库的操作,而那篇博客的讲解是讲述了 如何在Window中通过DOM来操作数据库 ...
- Android中SQLite应用详解
上次我向大家介绍了SQLite的基本信息和使用过程,相信朋友们对SQLite已经有所了解了,那今天呢,我就和大家分享一下在Android中如何使用SQLite. 现在的主流移动设备像Android.i ...
- Android中SQLite应用详解(转)
上次我向大家介绍了SQLite的基本信息和使用过程,相信朋友们对SQLite已经有所了解了,那今天呢,我就和大家分享一下在Android中如何使用SQLite. 现在的主流移动设备像Android.i ...
- Android 中 SQLite 性能优化
数据库是应用开发中常用的技术,在Android应用中也不例外.Android默认使用了SQLite数据库,在应用程序开发中,我们使用最多的无外乎增删改查.纵使操作简单,也有可能出现查找数据缓慢,插入数 ...
- Android中Sqlite数据库多线程并发问题
最近在做一个Android项目, 为了改善用户体验,把原先必须让用户“等待”的过程改成在新线程中异步执行.但是这样做遇到了多个线程同时需要写Sqlite数据库,导致操作数据库失败. 本人对Java并不 ...
- Android中SQLite介绍
现在的主流移动设备像Android.iPhone等都使用SQLite作为复杂数据的存储引擎,在我们为移动设备开发应用程序时,也许就要使用到SQLite来存储我们大量的数据,所以我们就需要掌握移动设备上 ...
- Android中SQLite应用具体解释
如今的主流移动设备像Android.iPhone等都使用SQLite作为复杂数据的存储引擎,在我们为移动设备开发应用程序时,或许就要使用到SQLite来存储我们大量的数据,所以我们就须要掌握移动设备上 ...
随机推荐
- linux系统定时重启tomcat
#touch auto-start.sh [root@Linux opt]# echo $LANGen_US.UTF-8 #vim auto-start.sh #!/bin/sh export LAN ...
- java 参数传值
基本数据类型参数的传值,参数为基本数据类型 class Computer{ int add(int x,int y){ return x+y; } } public class Example4_6 ...
- haxe 配置
安装所有类库: 命令提示符 haxelib install 类库名 如:haxelib install openfl 配置安卓: 命令提示符 haxelib run openfl setup andr ...
- Mesos架构
Mesos Architecture 上图显示了 Mesos 的主要组成部分. Mesos 由一个 master daemon 来管理 slave daemon 在每个集群节点上的运行, mesos ...
- Dev之ChartControl控件(二)— 绘制多重坐标图形
有时针对一个ChartControl控件可能要设置多个Y轴,进行显示: 以下举个例子:如在一个Chart中显示多个指标项如图: 首先,读取数据,并对左边的Y轴最大和最小值进行设定 IndexSerie ...
- 看懂gradle
http://blog.csdn.net/zxhoo/article/details/29570685
- java集合框架map
Map<K,V> K key V value Map集合:该集合存储键值对.一对一对往里存,而且要保证键的唯一性. 1,添加. 2,删除. 3,判断. 4,获取. Map |--Hasht ...
- 《LED调光-DMX512灯光协义接收控制》转
源:http://blog.163.com/zhaojun_xf/blog/static/30050580200951023046891 来自: 作者:龙图开发网 文章来源:龙图开发网 时间:2009 ...
- zf-关于收费统计没出来监利县的问题
这个问题一看就知道跟存储过程有关,所以我直接去后台实现类找到了这个的存储过程 存储过程里第一句就是quhua_code 从 select 开始 就是查询出 4个地方的名字 然后在把这查询出的数据给@ ...
- JavaScript:有符号整数与无符号整数相互转化
确实巧妙:原文http://blog.csdn.net/kandyer/article/details/8241937 <script language="JavaScript&quo ...