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来存储我们大量的数据,所以我们就须要掌握移动设备上 ...
随机推荐
- php 编程效率(1)
用单引号代替双引号来包含字符串,这样做会更快一些.因为PHP会在双引号包围的字符串中搜寻变量,单引号则 不会,注意:只有echo能这么做,它是一种可以把多个字符串当作参数的“函数”(译注:PHP手册中 ...
- delphi第2节
- UVA699 dfs and map
和书上的方法不一样... 因为我不知道节点,所以就直接用map来存左右了. #include<bits/stdc++.h> using namespace std; map <int ...
- Integer自动装箱拆箱bug,创建对象在-128到127
1 public class Demo3 { public static void main(String[] args) { Integer a = 1; Integer b = 2; Intege ...
- java网络之tcp
简单tcp传输 package pack; /* 演示tcp传输. 1,tcp分客户端和服务端. 2,客户端对应的对象是Socket. 服务端对应的对象是ServerSocket. 客户端, 通过查阅 ...
- Intergate flot with Angular js ——Angular 图形报表
下面这篇文章最终的结论就是 Flot 插件 结合 Angular 的Directive 来处理 图表的绘制 给出github上的一个demo源码.https://gist.github.com/fly ...
- 转 BAT CMD 批处理文件脚本总结(中文)
1. 综述 1.”.bat”: 这是微软的第一个批处理文件的后缀名,在几乎所有的Windows 操作系统内都能运行. 2. “.cmd”: 是为Windows NT 设计的 ...
- map转换成list
Java代码如下: package Test01; import java.util.ArrayList; import java.util.HashMap; import java.util.Ite ...
- 【贪心】时空定位I
[贪心]时空定位I 题目描述 张 琪曼已经确定了李旭琳在一个长为20千米,宽为2千米的空间,她要在横中心线上放置半径为Ri的定位装置,每个定位装置的效果都会让以它为中心的半径为实 数Ri(0<R ...
- 归心似箭,IT达人分享抢票攻略
[51CTO专稿]随着春节一天天临近,“购票难”的问题也愈发凸显,猎豹.火狐.360等“春运抢票神器”占领了各大网站的重要版面,“技术抢票”成为炙手可热的话题,看看身为程序员的邓以克是如何抢到回家的票 ...