安卓SQLite数据库操作(下)
在安卓开发中,数据库的操作无非就是增删改查。那么,这里我们通过例子来学习这四个操作。
我们先看代码吧。具体讲解后面说。
布局文件 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数据库操作(下)的更多相关文章
- 安卓 SQLite数据库操作实例
前段时间写了个安卓平台下SQLite数据库操作的实例 ,一直没得时间总结 ,今天把它弄出来了. 在Android 运行时环境包含了完整的 SQLite. 首先介绍一下SQLite这个数据库: SQLi ...
- 安卓SQLite数据库操作,半小时开发新闻管理系统,纯干货
本教程致力于可以快速的学习安卓软件开发,希望能通过一系列自己手写的教程,帮助正在学习或想要学习安卓开发的同仁. 本教程由今日头条-全栈攻城狮号首发,都是一个字一个字码的.请尊重劳动成果,转载请注明出处 ...
- 安卓SQLite数据库操作(上)
安卓系统自带数据库,名为SQLite.这篇文章我们用一个Demo来讲解安卓操作数据库的例子. By the way, 安卓创建的数据库文件存放在/data/data/<包名>/databa ...
- 在安卓开发中使用SQLite数据库操作实例
前段时间写了个安卓平台下SQLite数据库操作的实例 ,一直没得时间总结 ,今天把它弄出来了. 在Android 运行时环境包含了完整的 SQLite. 首先介绍一下SQLite这个数据库: SQLi ...
- 我的Android六章:Android中SQLite数据库操作
今天学习的内容是Android中的SQLite数据库操作,在讲解这个内容之前小编在前面有一篇博客也是讲解了SQLite数据库的操作,而那篇博客的讲解是讲述了 如何在Window中通过DOM来操作数据库 ...
- 实验8 SQLite数据库操作
实验报告 课程名称 实验8 SQLite数据库操作 实验日期 2016.5.6 实验项目名称 多媒体应用开发 实验地点 S30010 实验类型 □验证型 √设计型 □综合型 学 时 一 ...
- 实验八 sqlite数据库操作
实验报告 课程名称 基于Android平台移动互联网开发 实验日期 2016年5月3日 实验项目名称 SQLite数据库操作 实验地点 S30010 实验类型 □验证型 √设计型 □综合型 ...
- C# SQLite 数据库操作
C# SQLite 数据库操作学习 运行环境:Window7 64bit,.NetFramework4.61,C# 7.0 参考: SQLite 官网 SQL As Understood By SQL ...
- Python学习笔记:sqlite3(sqlite数据库操作)
对于数据库的操作,Python中可以通过下载一些对应的三方插件和对应的数据库来实现数据库的操作,但是这样不免使得Python程序变得更加复杂了.如果只是想要使用数据库,又不想下载一些不必要的插件和辅助 ...
随机推荐
- devstack apache2/keystone 没有启动
在devstack中./rejoin-stack.sh 发现apache2/keystone 没有启动 单单手动启动apach2服务之后keystone并没有启动 sudo service apach ...
- ubuntu安装与卸载.dep软件
一般情况下我们都是使用apt-get install进行软件安装,但是有时候也有可直接install的文件例如.deb. 接下来就记录一下.dep软件的安装与卸载 安装: 直接找到软件,双击就可以进行 ...
- review08
所谓异常就是程序运行时可能出现的一些错误,比如试图打开一个根本不存在的文件等,异常处理将会改变程序的控制流程,让程序有机会对错误做出处理. 各个catch参数中的异常类都是Exception的某个子类 ...
- hdu2243 ac自动机+矩阵快速幂
和上一题有点相似,但是这题是求包含的,并且还要求和 可以求所有情况-不包含的情况,所有情况可用矩阵快速幂求得 还有一点就是如果题目说答案余2^64,直接开unsigned long long就行了,会 ...
- 深入浅出Mybatis系列(九)---强大的动态SQL(转载)
原文出处:http://www.cnblogs.com/dongying/p/4092662.html 上篇文章<深入浅出Mybatis系列(八)---mapper映射文件配置之select.r ...
- Spring_总结_04_高级配置(四)_bean的作用域
一.前言 本文承接上一节:Spring_总结_04_高级配置(三)之处理歧义 1.单例bean Spring应用上下文中所有的bean默认都是单例的.也就是说,不管一个bean被注入到其他bean多少 ...
- 速记JVM内存模型和垃圾回收策略
一.常用JVM参数 -Xms: 初始堆大小 -Xmx: 最大堆-Xmn: 新生代大小 -Xss: 栈容量 -PermSize: 方法区大小 -MaxPermSize: 最大方法区大小 -MaxDire ...
- DataTable的用法
在项目中经常用到DataTable,如果DataTable使用得当,不仅能使程序简洁实用,而且能够提高性能,达到事半功倍的效果,现对DataTable的使用技巧进行一下总结. 一.DataTable简 ...
- Microsoft Visual Studio 2012 Update 4 RC 3 离线安装程序
Microsoft Visual Studio 2012 Update 4 RC 3 离线安装程序 ☆ 微软官网地址:☆ http://www.microsoft.com/en-us/download ...
- asp.net mvc中model注意事项
1 modelState必须是需要在action Filter中才生效 2 发送接口的json nullable的类型必须初始化