在安卓开发中,数据库的操作无非就是增删改查。那么,这里我们通过例子来学习这四个操作。

我们先看代码吧。具体讲解后面说。

布局文件 activity_main.xml

<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:orientation="vertical"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.db.MainActivity" > <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="Create_Datebase"
android:text="Create Datebase" /> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="Add_Data"
android:text="Add Data" /> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="Update_Data"
android:text="Update Date" /> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="Delete_Data"
android:text="Delete Data" /> <Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="Query_Data"
android:text="Query Data" /> </LinearLayout>

java文件

mySQLite.java

package com.example.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.widget.Toast; //创建SQLLite需要继承SQLiteOpenHelper类抽象类
public class mySQLite extends SQLiteOpenHelper{ public static final String CREATE_GIRL = "create table Girl(_id integer primary key autoincrement,Name char(20),Age integer,Phone char(20))" ;
private Context mContext; /*
* 构造方法参数说明
* 第一个:传入上下文对象
* 第二个:要创建的数据库名字
* 第三个:油标工厂,传入油标对象,其实就是一个指针的功能。和ResultSet功能差不多,这个参数一般传入null
* 第四个:数据库版本号,用于升级的时候调用。版本号必须大于1
* 构造方法四个参数传入其实是给父类调用的。
* */
public mySQLite(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
mContext = context;
} //数据库被创建的时候会调用这个方法
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
/*db.execSQL(CREATE_BOOK);
Toast.makeText(mContext,"Create Successded",0).show();*/
db.execSQL(CREATE_GIRL);
Toast.makeText(mContext,"Create Successded",0).show();
}
//数据库升级的时候调用
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub } }

MainActivity.java

package com.example.db;

import java.util.ArrayList;
import java.util.List; import android.app.Activity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast; public class MainActivity extends Activity { private mySQLite myDatebaseHelper; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); myDatebaseHelper = new mySQLite(this, "people.db", null, 1); }
//创建数据库
public void Create_Datebase(View v){ /*
* 如果数据库没有被创建,就创建并获取一个可写(其实也可以读)的数据库 如果数据库被创建,就直接获取一个可写(其实也可以读)的数据库
* 路径data/data/database/people.db
*/
myDatebaseHelper.getWritableDatabase(); }
//使用api添加数据
public void Add_Data(View v){
//拿到数据库对象
SQLiteDatabase db = myDatebaseHelper.getWritableDatabase();
/*
* 将要添加的数据封装在ContentValues对象中
* */
ContentValues values = new ContentValues();
values.put("Name", "JoyceChu");
values.put("Age", 18);
values.put("Phone", "1380013");
/*
* 第一个参数,表名
* 第二个参数,一般传入null
* 第三个参数,ContentValues对象
* 注意,db.insert("Gril", null, values);这条语句有返回值,如果返回-1表示插入数据失败
* 所以,我们可以通过返回值判断是否插入成功
* */
db.insert("Girl", null, values);
values.clear();
values.put("Name", "四叶草");
values.put("Age", 19);
values.put("Phone", "1380013");
db.insert("Girl", null, values);
values.clear();
values.put("Name", "朱主爱");
values.put("Age", 19);
values.put("Phone", "1380013");
db.insert("Girl", null, values);
values.clear();
values.put("Name", "新垣结衣");
values.put("Age", 19);
values.put("Phone", "1380013");
db.insert("Girl", null, values);
values.clear();
values.put("Name", "刘诗诗");
values.put("Age", 19);
values.put("Phone", "1380013");
db.insert("Girl", null, values);
values.clear();
values.put("Name", "金莎");
values.put("Age", 25);
values.put("Phone", "1380013");
db.insert("Girl", null, values);
values.clear();
values.put("Name", "林志玲");
values.put("Age", 25);
values.put("Phone", "1380013");
db.insert("Girl", null, values);
Toast.makeText(MainActivity.this, "Add Successded", 0).show(); } //更新数据
public void Update_Data(View v){ SQLiteDatabase db = myDatebaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
//将年龄改为25
values.put("age", 25);
/*
* 第一个参数:表名
* 第二个参数:ContentValues对象
* 第三,第四个参数:约束条件,如果传入null,表示更新所有行。
* 本例子表示将 Name = 刘诗诗 ,的age 修改为 25 ,如果没有约束,就所有age都变成25
* update也是有返回值的,返回int型,表示影响的行数
* */
db.update("Girl", values, "Name = ?", new String[]{"刘诗诗"});
Toast.makeText(MainActivity.this, "Update Successded", 0).show();
} //删除数据
public void Delete_Data(View v){
SQLiteDatabase db = myDatebaseHelper.getWritableDatabase();
ContentValues values = new ContentValues();
/*
* 第一个参数:表名
* 第二个参数:ContentValues对象
* 第三,第四个参数:约束条件,如果传入null,表示更新所有行。
* 本例子表示将 age > 19的行都删除
* */
db.delete("Girl", "Name = ?", new String[]{"刘诗诗"});
Toast.makeText(MainActivity.this, "Delete Successded", 0).show();
}
//查询数据
public void Query_Data(View v){
SQLiteDatabase db = myDatebaseHelper.getWritableDatabase();
/*
* 查询的参数非常多。这里我们选择七个参数的重载
* 第一个参数:表名
* 第二个参数:指定查询那几列,没指定默认查所有列
* 第三,四个参数:约束查询,没指定默认查所有列
* 第五个参数:指定要去group by的列,没指定的话,就不对查询结果group by
* 第六个参数:group by之后的过滤,没指定不过滤
* 第七个参数:查询结果排序方式,没指定使用默认排序
* 本例子传入null表示查询所有列
* 查询方法返回一个Cursor对象
* */ Cursor cursor = db.query("Girl", null, null, null, null, null, null);
//如果没有下一行,就表示数据检索完毕了
while(cursor.moveToNext()){ String name = cursor.getString(cursor.getColumnIndex("Name"));
int age = cursor.getInt(cursor.getColumnIndex("Age"));
String phone = cursor.getString(cursor.getColumnIndex("Phone"));
Toast.makeText(MainActivity.this, name+","+age+","+phone, 0).show(); }
} }

然后看运行截图

那么接下来就是讲解了。运行程序后,我们按照UI的按钮顺序,依次点击,并查看其数据库。注意,这里是简单的效果图讲解,具体原理我们要结合代码去看。代码有注释,很详细。

首先是Create Database按钮。点击按钮后,系统将创建一个数据库。people.db,数据库下有一个我们创建的表Girl。表里面并没有数据,注意,数据只会创建一次,创建之后再次点击不会重新创建多一次数据库,也不会增加多一个表的。如图所示。

接下来我们点击Add Data的按钮,也就是添加数据。注意,每一次点击,都会添加数据。这里我们点击一次,效果如图所示。点击一次后,我们添加了七条数据。如果在次点击。这七条数据会在添加一次,也就是说说,每一次点击都会增加七条数据。这里,我们不再点击了。

接下来是更新数据的按钮,也就Upate Data,从上图中,我们可以看到,刘诗诗的Age是19,那么明显不是的,所以我们要更新刘诗诗的Age。点击一次Update Data按钮更新数据。如图所示。更新按钮每一次点击都是会更新一次数据的。但在这个例子中,点击后,在怎么点击都一样是25,因为我们改变的数据25已经写死了。所以,每一次都是改成25,因此我们看起来就没有差别了。

然后是查询按钮,点击后,我们会将上面七条数据查询出来,为了方便,这里我们用Toast来显示。

OK。四个操作都有了。

安卓SQLite数据库操作(下)的更多相关文章

  1. 安卓 SQLite数据库操作实例

    前段时间写了个安卓平台下SQLite数据库操作的实例 ,一直没得时间总结 ,今天把它弄出来了. 在Android 运行时环境包含了完整的 SQLite. 首先介绍一下SQLite这个数据库: SQLi ...

  2. 安卓SQLite数据库操作,半小时开发新闻管理系统,纯干货

    本教程致力于可以快速的学习安卓软件开发,希望能通过一系列自己手写的教程,帮助正在学习或想要学习安卓开发的同仁. 本教程由今日头条-全栈攻城狮号首发,都是一个字一个字码的.请尊重劳动成果,转载请注明出处 ...

  3. 安卓SQLite数据库操作(上)

    安卓系统自带数据库,名为SQLite.这篇文章我们用一个Demo来讲解安卓操作数据库的例子. By the way, 安卓创建的数据库文件存放在/data/data/<包名>/databa ...

  4. 在安卓开发中使用SQLite数据库操作实例

    前段时间写了个安卓平台下SQLite数据库操作的实例 ,一直没得时间总结 ,今天把它弄出来了. 在Android 运行时环境包含了完整的 SQLite. 首先介绍一下SQLite这个数据库: SQLi ...

  5. 我的Android六章:Android中SQLite数据库操作

    今天学习的内容是Android中的SQLite数据库操作,在讲解这个内容之前小编在前面有一篇博客也是讲解了SQLite数据库的操作,而那篇博客的讲解是讲述了 如何在Window中通过DOM来操作数据库 ...

  6. 实验8 SQLite数据库操作

    实验报告 课程名称 实验8  SQLite数据库操作 实验日期 2016.5.6 实验项目名称 多媒体应用开发 实验地点 S30010 实验类型 □验证型    √设计型    □综合型 学  时 一 ...

  7. 实验八 sqlite数据库操作

    实验报告 课程名称 基于Android平台移动互联网开发 实验日期 2016年5月3日 实验项目名称 SQLite数据库操作 实验地点 S30010 实验类型 □验证型    √设计型    □综合型 ...

  8. C# SQLite 数据库操作

    C# SQLite 数据库操作学习 运行环境:Window7 64bit,.NetFramework4.61,C# 7.0 参考: SQLite 官网 SQL As Understood By SQL ...

  9. Python学习笔记:sqlite3(sqlite数据库操作)

    对于数据库的操作,Python中可以通过下载一些对应的三方插件和对应的数据库来实现数据库的操作,但是这样不免使得Python程序变得更加复杂了.如果只是想要使用数据库,又不想下载一些不必要的插件和辅助 ...

随机推荐

  1. svg_path

    1. path 的 d属性中,M的大/小写貌似不影响图形显示效果(至少现在[20160108]我测试下来是这样[chrome 版本 47.0.2526.80 m]):L/H/V 的大小写 是影响图形显 ...

  2. Virtio SCSI设备介绍

    Qemu的存储栈 在KVM虚拟化环境中,当客户机的内核存储系统像在物理机上一样通过页缓存.文件系统.通用块设备层运行到实际设备驱动时,这时驱动对设备寄存器的访问会触发CPU从客户机代码切换到物理机内的 ...

  3. struts2常见配置解决错误There is no mapped for namespace[/] and action name

    我碰到这个错误的原因是我把配置文件名写成了Struts.xml,改成struts.xml就可以了. 在确定struts.xml本身并没有写错的情况下,那么发生错误有可能是路径,配置文件名. 如果实在找 ...

  4. Announcing the Release of ASP.NET MVC 5.1, ASP.NET Web API 2.1 and ASP.NET Web Pages 3.1 for VS2012

    The NuGet packages for ASP.NET MVC 5.1, ASP.NET Web API 2.1 and ASP.NET Web Pages 3.1 are now live o ...

  5. 三目运算符与if else的运行效率

    两者的效率比较: 当比较次数较少时,效率一样: 当比较次数较多时,发现ifelse的速度更快,应该是其汇编指令更少的原因.   if else的汇编代码如下:     三目运算符代码如下:

  6. Object 的一个问题

    var s1 = 'abc';     s1 instanceof String //false var s2 = new String('abc');     s2 instanceof Strin ...

  7. CodeForces - 156C:Cipher (不错的DP)

    Sherlock Holmes found a mysterious correspondence of two VIPs and made up his mind to read it. But t ...

  8. Python函数-round() 函数

    round( x [, n] )功能: round() 方法返回浮点数x的四舍五入值. x-数值表达式.n-数值表达式.返回浮点数x的四舍五入值. 实例: #!/usr/bin/python prin ...

  9. Python函数-enumerate()

    enumerate(sequence, [start=0]) 作用: 将可循环序列sequence以start开始分别列出序列数据和数据下标,即对一个可遍历的数据对象(如列表.元组或字符串),enum ...

  10. FastAdmin 的 Bootstrap-Table 如何合并字段?

    FastAdmin 的 Bootstrap-Table 如何合并字段? ★hey-成都 14:13:34 把下面那个字段合并到上面那个字段是用什么方法 ^★暗物质-江西 14:17:21 city加上 ...