[Android] SQLite数据库之增删改查基础操作
在编程中经常会遇到数据库的操作,而Android系统内置了SQLite,它是一款轻型数据库,遵守事务ACID的关系型数据库管理系统,它占用的资源非常低,能够支持Windows/Linux/Unix等主流操作系统,同时能够跟很多程序语言如C#、PHP、Java等相结合.下面先回顾SQL的基本语句,再讲述Android的基本操作.
一. adb shell回顾SQL语句
首先,我感觉自己整个大学印象最深的几门课就包括《数据库》,所以想先回顾SQL增删改查的基本语句.而在Android SDK中adb是自带的调试工具,它存放在sdk的platform-tools目录下,通过adb shell可以进入设备控制台,操作SQL语句.
G:
cd G:\software\Program software\Android\adt-bundle-windows-x86_64-20140321\sdk\platform-tools
adb shell
cd /data/data/com.example.sqliteaction/databases/
sqlite3 StuDatabase.db
.table
.schema
如下所示我先创建了SQLiteAction工程,同时在工程中创建了StuDatabase.db数据库.输入adb shell进入设备控制台,调用"sqlite3+数据库名"打开数据库,如果没有db文件则创建.
--创建Teacher表
create table Teacher (id integer primary key, name text);
--向表中插入数据
insert into Teacher (id,name) values('10001', 'Mr Wang');
insert into Teacher (id,name) values('10002', 'Mr Yang');
--查询数据
select * from Teacher;
--更新数据
update Teacher set name='Yang XZ' where id=10002;
--删除数据
delete from Teacher where id=10001;
二. SQLite数据库操作
下面讲解使用SQLite操作数据库:
1.创建打开数据库
使用openOrCreateDatabase函数实现,它会自动检测是否存在该数据库,如果存在则打开,否则创建一个数据库,并返回一个SQLiteDatabase对象.
2.创建表
通过定义建表的SQL语句,再调用execSQL方法执行该SQL语句实现建立表.
//创建学生表(学号,姓名,电话,身高) 主键学号
public static final String createTableStu = "create table Student (" +"id integer primary key, " +"name text, " +"tel text, " +"height real)";
//SQLiteDatabase定义db变量
db.execSQL(createTableStu);
3.插入数据
使用insert方法添加数据,其实ContentValues就是一个Map,Key字段名称,Value值.
SQLiteDatabase.insert(
String table, //添加数据的表名
String nullColumnHack,//为某些空的列自动复制NULL
ContentValues values //ContentValues的put()方法添加数据
);
//方法一
SQLiteDatabase db = sqlHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("id", "10001");
values.put("name", "Eastmount");
values.put("tel", "15201610000");
values.put("height", "172.5");
db.insert("Student", null, values);
//方法二
public static final String insertData = "insert into Student (" +"id, name, tel, height) values('10002','XiaoMing','110','175')";
db.execSQL(insertData);
4.删除数据
使用delete方法删除表中数据,其中sqlHelper是继承SQLiteDatabase自定义类的实例.
SQLiteDatabase.delete(
String table, //表名
String whereClause, //约束删除行,不指定默认删除所有行
String[] whereArgs //对应数据 );
//方法一 删除身高>175cm
SQLiteDatabase db = sqlHelper.getWritableDatabase();
db.delete("Student", "height > ?", new String[] {"175"});
//方法二
String deleteData = "DELETE FROM Student WHERE height>175";
db.execSQL(deleteData);
5.更新数据 使用update方法可以修改数据,SQL+execSQL方法就不在叙述.
//小明的身高修改为180
SQLiteDatabase db = sqlHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("height", "180");
db.update("Student", values, "name = ?", new String[] {"XiaoMing"});
6.其他操作
下面是关于数据库的其他操作,其中包括使用SQL语句执行,而查询数据Query方法由于涉及ListView显示,请见具体实例.
//关闭数据库
SQLiteDatabase.close();
//删除表 执行SQL语句
SQLiteDatabase.execSQL("DROP TABLE Student");
//删除数据库
this.deleteDatabase("StuDatabase.db");
//查询数据
SQLiteDatabase.query();
三. 数据库操作简单实例
显示效果如下图所示:
首先,添加activity_main.xml文件布局如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.touchimagetest.MainActivity" tools:ignore="MergeRootFrame" > <!-- 顶部 --> <RelativeLayout android:id="@+id/MyLayout_top" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="40dp" android:layout_alignParentTop="true" > <!-- 标题 --> <LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent"android:gravity="center" ><TextView android:layout_width="wrap_content" android:layout_height="wrap_content"android:layout_weight="1" android:gravity="center"android:textSize="20sp" android:text="学号" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center"android:textSize="20sp"android:text="姓名" /><TextView android:layout_width="wrap_content" android:layout_height="wrap_content"android:layout_weight="1" android:gravity="center"android:textSize="20sp"android:text="电话" /><TextView android:layout_width="wrap_content" android:layout_height="wrap_content"android:layout_weight="1"android:gravity="center" android:textSize="20sp" android:text="身高" /></LinearLayout> </RelativeLayout> <!-- 底部按钮 --> <RelativeLayout android:id="@+id/MyLayout_bottom" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="90dp" android:layout_alignParentBottom="true" android:gravity="center"> <LinearLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"android:layout_alignParentBottom="true" ><LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="40dp"android:gravity="center" ><EditText android:id="@+id/edit_id"android:layout_width="wrap_content" android:layout_height="wrap_content"android:layout_weight="1" android:gravity="center"android:textSize="20sp" android:hint="学号" /> <EditText android:id="@+id/edit_name"android:layout_width="wrap_content" android:layout_height="wrap_content"android:layout_weight="1" android:gravity="center"android:textSize="20sp" android:hint="姓名" /> <EditText android:id="@+id/edit_tel"android:layout_width="wrap_content" android:layout_height="wrap_content"android:layout_weight="1" android:gravity="center"android:textSize="20sp" android:hint="电话" /> <EditText android:id="@+id/edit_height"android:layout_width="wrap_content" android:layout_height="wrap_content"android:layout_weight="1" android:gravity="center"android:textSize="20sp" android:hint="身高" /> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content"android:orientation="horizontal" > <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:text="创表" /><Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:text="插入" /><Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:text="删除" /><Button android:id="@+id/button4" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:text="更新" /><Button android:id="@+id/button5" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" android:text="查询" /></LinearLayout> </LinearLayout> </RelativeLayout> <!-- 显示列表 --> <RelativeLayout android:id="@+id/Content_Layout" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_above="@id/MyLayout_bottom" android:layout_below="@id/MyLayout_top" android:background="#EFDFDF" > <!-- 显示表内容 --><ListViewandroid:id="@+id/listview1"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center" ></ListView></RelativeLayout>
</RelativeLayout>
然后是在res/layout中添加ListView显示的stu_item.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="horizontal" ><TextView android:id="@+id/stu_id"android:layout_width="wrap_content" android:layout_height="wrap_content"android:layout_weight="1" android:textSize="20sp" /> <TextView android:id="@+id/stu_name"android:layout_width="wrap_content" android:layout_height="wrap_content"android:layout_weight="1"android:textSize="20sp" /><TextView android:id="@+id/stu_tel"android:layout_width="wrap_content" android:layout_height="wrap_content"android:layout_weight="1" android:textSize="20sp" /><TextView android:id="@+id/stu_height"android:layout_width="wrap_content" android:layout_height="wrap_content"android:layout_weight="1"android:textSize="20sp" />
</LinearLayout>
再次,添加自定义类MySQLiteOpenHelper:
//添加自定义类 继承SQLiteOpenHelper
public class MySQLiteOpenHelper extends SQLiteOpenHelper {public Context mContext;//创建学生表(学号,姓名,电话,身高) 主键学号public static final String createTableStu = "create table Student (" +"id integer primary key, " +"name text, " +"tel text, " +"height real)";//抽象类 必须定义显示的构造函数 重写方法 public MySQLiteOpenHelper(Context context, String name, CursorFactory factory, int version) {super(context, name, factory, version);mContext = context;}@Overridepublic void onCreate(SQLiteDatabase arg0) {// TODO Auto-generated method stubarg0.execSQL(createTableStu);Toast.makeText(mContext, "Created", Toast.LENGTH_SHORT).show(); }@Overridepublic void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {// TODO Auto-generated method stubarg0.execSQL("drop table if exists Student");onCreate(arg0);Toast.makeText(mContext, "Upgraged", Toast.LENGTH_SHORT).show();}
}
最后是MainActivity.java文件,代码如下:
public class MainActivity extends Activity {//继承SQLiteOpenHelper类private MySQLiteOpenHelper sqlHelper;private ListView listview;private EditText edit1;private EditText edit2;private EditText edit3;private EditText edit4;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);sqlHelper = new MySQLiteOpenHelper(this, "StuDatabase.db", null, 2);//建立新表Button createBn = (Button) findViewById(R.id.button1);createBn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {sqlHelper.getWritableDatabase();}});//插入数据Button insertBn = (Button) findViewById(R.id.button2);edit1 = (EditText) findViewById(R.id.edit_id);edit2 = (EditText) findViewById(R.id.edit_name);edit3 = (EditText) findViewById(R.id.edit_tel);edit4 = (EditText) findViewById(R.id.edit_height);insertBn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {SQLiteDatabase db = sqlHelper.getWritableDatabase();ContentValues values = new ContentValues();/*//插入第一组数据values.put("id", "10001");values.put("name", "Eastmount");values.put("tel", "15201610000");values.put("height", "172.5");db.insert("Student", null, values);*/values.put("id", edit1.getText().toString());values.put("name", edit2.getText().toString());values.put("tel", edit3.getText().toString());values.put("height", edit4.getText().toString());db.insert("Student", null, values);Toast.makeText(MainActivity.this, "数据插入成功", Toast.LENGTH_SHORT).show();edit1.setText("");edit2.setText("");edit3.setText("");edit4.setText("");}});//删除数据Button deleteBn = (Button) findViewById(R.id.button3);deleteBn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {SQLiteDatabase db = sqlHelper.getWritableDatabase();db.delete("Student", "height > ?", new String[] {"180"});Toast.makeText(MainActivity.this, "删除数据", Toast.LENGTH_SHORT).show();}});//更新数据Button updateBn = (Button) findViewById(R.id.button4);updateBn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {SQLiteDatabase db = sqlHelper.getWritableDatabase();ContentValues values = new ContentValues();values.put("height", "180");db.update("Student", values, "name = ?", new String[] {"XiaoMing"});Toast.makeText(MainActivity.this, "更新数据", Toast.LENGTH_SHORT).show();}});//查询数据listview = (ListView) findViewById(R.id.listview1);Button selectBn = (Button) findViewById(R.id.button5);selectBn.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {try {SQLiteDatabase db = sqlHelper.getWritableDatabase();//游标查询每条数据Cursor cursor = db.query("Student", null, null, null, null, null, null);//定义list存储数据List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();//适配器SimpleAdapter数据绑定//错误:构造函数SimpleAdapter未定义 需把this修改为MainActivity.thisSimpleAdapter adapter = new SimpleAdapter(MainActivity.this, list, R.layout.stu_item,new String[]{"id", "name", "tel", "height"}, new int[]{R.id.stu_id, R.id.stu_name, R.id.stu_tel, R.id.stu_height});//读取数据 游标移动到下一行while(cursor.moveToNext()) {Map<String, Object> map = new HashMap<String, Object>();map.put( "id", cursor.getString(cursor.getColumnIndex("id")) );map.put( "name", cursor.getString(cursor.getColumnIndex("name")) );map.put( "tel", cursor.getString(cursor.getColumnIndex("tel")) );map.put( "height", cursor.getString(cursor.getColumnIndex("height")) );list.add(map);}listview.setAdapter(adapter);}catch (Exception e){Log.i("exception", e.toString());}}});}
}
PS:希望文章对大家有所帮助,文章是关于SQLite的基础操作,而且没有涉及到数据库的触发器、存储过程、事务、索引等知识,网上也有很多相关的资料.同时现在有门课程《数据库高级技术与开发》,故作者当个在线笔记及基础讲解吧!这篇文章有一些不足之处,但作为基础文章还是不错的.
下载地址:http://download.csdn.net/detail/eastmount/8159881
主要参考:
1.郭霖大神的《第一行代码Android》
2.android中的数据库操作 By:nieweilin
(By:Eastmount 2014-11-15 夜2点 http://blog.csdn.net/eastmount/)
[Android] SQLite数据库之增删改查基础操作相关推荐
- 动态网站作业4-JSP中实现数据库的增删改查的操作
动态网站作业4-JSP中实现数据库的增删改查的操作 用Statement向数据库中添加元素 1.创建JavaBean–UserBean package com.media.bean;public cl ...
- Java对MySQL数据库进行增删改查的操作(一)
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...
- MongoDB增删改查基础操作
MongoDB高手课_MongoDB_NoSQL-极客时间极客时间推出的MongoDB高手课是帮助互联网从业者学习MongoDB.NoSQL的在线课程,极客时间是面向IT领域的知识服务产品,致力于帮助 ...
- sqllite事务和MySQL事务_Android学习---SQLite数据库的增删改查和事务(transaction)调用...
上一篇文章中介绍了手工拼写sql语句进行数据库的CRUD操作,本文将介绍调用sqlite内置的方法实现CRUD操作,其实质也是通过拼写sql语句. 首先,创建一个新的android项目: 其次,查看代 ...
- Sqlite3小结(小型数据库中增删改查的操作)
说一点:学习的话还是要用印象笔记~没有为什么~:数据库浅学 一.数据库简介 1.数据库简介 数据库(Database)是按照数据结构来组织.存储和管理数据的仓库. 在信息化社会,充分有效地管理和利用各 ...
- 华山论剑之iOS中(数组,字典,SQLite,CoreData)的“增删改查“
我们的生活态度就应该是 "不抱怨" ! 其实我想写这篇文章很久了,因为自己做的iOS开发 ,对数据这一块有这极高的要求.所以一些必须的存储数据的使用,我们都有必要熟悉用法.在以前我 ...
- web端获取微信小程序云数据库数据实现增删改查等操作
获取小程序数据库 前言 一.微信小程序Web SDK 1.微信官方示例 2.未登录模式注意事项 二.完整流程演示 1.开启云数据库访问权限 2.编写云函数 3.web前端引入js 4.web页面js访 ...
- Android SQL语句实现数据库的增删改查
本文介绍android中的数据库的增删改查 复习sql语法: * 增 insert into info (name,phone) values ('wuyudong','111') * 删 delet ...
- python对sqlite增删改查_Python操作sqlite3数据库 增删改查
SQLite,是一款轻型的数据库,占用资源非常的低.这里记录下对sqlite3的增删改查相关操作,顺便复习一下SQL语句- -. 一.创建数据库 连接到一个现有的数据库.如果数据库不存在,那么它就会被 ...
最新文章
- 《强化学习周刊》第2期:多智能体强化学习(MARL)赋能“AI智能时代”
- 转- prototype
- 的数据湖_一文读懂云原生数据湖体系
- ironpython2.7.9_Microsoft IronPython_.NET和Python实现平台下载 v2.7.9.1000最新官方版
- springboot+springcloud相关问题
- localtunnel:本地端口的服务映射到公网
- jekenis父子结构项目打包_maven 父子工程打包 并且上传linux服务器
- thinkphp-许愿墙-2
- curl 增加header_libcurl增加HTTP header 和 POST之后获取返回数据
- Kafka : 查看kafka topic的消息offset范围
- Python入门篇之字符串使用
- cobbler批量安装linux
- win10安装kali组双系统
- 对第三组博客的检查情况
- 快逸报表之在IE打印问题
- 泪目!java项目源码免费下载
- 网盘容量背后的技术秘密
- 10行Python代码实现抽奖助手自动参与抽奖
- 阿里云大数据工具,让海底捞更懂你
- [BZOJ1616][Usaco2008 Mar]Cow Travelling游荡的奶牛(dfs||dp)
热门文章
- THUPCCTSAPIO摸鱼被$\Huge{\color{black}{\mathbf{z}}\color{red}{\mathbf{zh}}}$爆踩记
- 【bzoj4009】[HNOI2015]接水果 DFS序+树上倍增+整体二分+树状数组
- C#Winform程序如何发布并自动升级(图解)
- 循环队列(0965)
- 利用Virtual Audio Cable实现系统声音录制
- 2015-09-14-初级vector
- Nginx HTTP User_agent
- 产品经理如何量化关键需求指标
- HDU-1874 畅通工程续 (最短路径启蒙题)
- java 马士兵 io 代码分析_学习笔记-马士兵java- (IO初步)流