SQLite的基本用法
SQLite是Android自带的轻量级数据库,接口封装的很好,不会SQL的也能很好的使用。
接下来讲一下怎么创建数据库、通过adb查看数据表和数据、增删查改。
一、创建数据库
Android封装了SQLiteOpenHelper给我们操作数据库,我们要继承它,然后实现自己的操作。
public class MyDatabaseHelper extends SQLiteOpenHelper { public String CREATE_BOOK = "CREATE TABLE BOOK (" +
"name char(20) NOT NULL," +
"price char(10) NOT NULL" +
")"; //构造函数
public MyDatabaseHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
} //如果传入的数据库不存在的话,才会调用该函数
@Override
public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_BOOK); } //输入版本号比当前版本号高的时候,才会调用该函数
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { }
}
当然在控制台自己创建也可以(这个可以忽略)
在MainActivity创建数据库
public class MainActivity extends AppCompatActivity { Button create; MyDatabaseHelper helper; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //打开数据库 第一个参数是上下文 第二个是数据库的名字,如果没有则会创建,第三个一般为null,第四个版本号
helper = new MyDatabaseHelper(this,"Book.db",null,1); create = (Button)findViewById(R.id.create); create.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { //获取一个可写的数据库实例,如果没有该数据库,会调用MyDatabaseHelper里面的Create方法
helper.getWritableDatabase(); }
}); }
}
二、通过adb查看数据库
adb在sdk文件夹下的platform-tools中,我们需要把路径配置到环境变量的path变量中。
然后在cmd输入adb,就能进入手机或者模拟器的控制台了。
进入data/data,再输入ls命令,可以看到自己的项目:
进入自己的项目,能看到自己的数据库文件夹
进入文件夹,能看到我们创建的数据库表:
然后输入sqlite3 Book.db,打开数据库,再输入.table,就能看到我们创建的表了
可以证明我们第一步创建数据库成功了。
三、插入数据
只需要获得一个数据库实例,然后通过ContentValues组装数据,然后再插入即可。
MainActivity代码,新增了insert按钮,点击添加数据:
insert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { //获取一个可写的数据库实例
SQLiteDatabase db = helper.getWritableDatabase(); //用于组装插入的数据
ContentValues values = new ContentValues(); values.put("name","计算机组成原理");
values.put("price","100"); //插入,第一个参数为表名,第二个一般为null,第三个是我们的数据
db.insert("BOOK",null,values); //清空
values.clear(); //插入第二条数据
values.put("name","数据库原理");
values.put("price","50"); db.insert("BOOK",null,values); }
});
在adb通过sql语句查看结果:
四:更新数据
原理和插入差不多:
update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { //获取一个可写的数据库实例
SQLiteDatabase db = helper.getWritableDatabase(); //用于组装更新的数据
ContentValues values = new ContentValues(); values.put("price","888"); //第一个参数是表名,第二个参数是数据,第三个是约束条件,对应SQL的where子句,第四个参数是占位符'?'的具体实现 相当于name = “计算机组成原理”
db.update("BOOK",values,"name = ?",new String[]{"计算机组成原理"}); }
});
通过adb可见,第一本书的价格已经更新到888元了
五:查询数据
query.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { //获取一个可写的数据库实例
SQLiteDatabase db = helper.getWritableDatabase(); //调用查找方法 第一个参数为表名 第二个为列名 第三个为约束条件where 第四个为约束条件占位符的具体值
//第五个为排序的列 第六个对应having 第七个对应orderby
//以下默认查询所有列,结果的集合返回到游标
Cursor cursor = db.query("BOOK",null,null,null,null,null,null,null); String temp = ""; //遍历
while(cursor.moveToNext()){ String name = cursor.getString(cursor.getColumnIndex("name")); String price = cursor.getString(cursor.getColumnIndex("price")); temp+= name+" "+price+"\n"; } //关闭游标
cursor.close(); result.setText(temp); }
});
运行效果:
六:删除数据
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { //获取一个可写的数据库实例
SQLiteDatabase db = helper.getWritableDatabase(); //表名 约束条件
db.delete("BOOK","price = ?",new String[]{"888"}); }
});
先点击删除,再点击查询:
完整的MainActivity代码:
public class MainActivity extends AppCompatActivity { Button create;
Button insert;
Button update;
Button query;
Button delete; TextView result; MyDatabaseHelper helper; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //打开数据库 第一个参数是上下文 第二个是数据库的名字,如果没有则会创建,第三个一般为null,第四个版本号
helper = new MyDatabaseHelper(this,"Book.db",null,1); result = (TextView)findViewById(R.id.result);
create = (Button)findViewById(R.id.create);
insert = (Button)findViewById(R.id.insert);
update = (Button)findViewById(R.id.update);
query = (Button)findViewById(R.id.query);
delete = (Button)findViewById(R.id.delete); create.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { //获取一个可写的数据库实例,如果没有该数据库,会调用MyDatabaseHelper里面的Create方法
helper.getWritableDatabase(); }
}); insert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { //获取一个可写的数据库实例
SQLiteDatabase db = helper.getWritableDatabase(); //用于组装插入的数据
ContentValues values = new ContentValues(); values.put("name","计算机组成原理");
values.put("price","100"); //插入,第一个参数为表名,第二个一般为null,第三个是我们的数据
db.insert("BOOK",null,values); //清空
values.clear(); //插入第二条数据
values.put("name","数据库原理");
values.put("price","50"); db.insert("BOOK",null,values); }
}); update.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { //获取一个可写的数据库实例
SQLiteDatabase db = helper.getWritableDatabase(); //用于组装更新的数据
ContentValues values = new ContentValues(); values.put("price","888"); //第一个参数是表名,第二个参数是数据,第三个是约束条件,对应SQL的where子句,第四个参数是占位符'?'的具体实现 相当于name = “计算机组成原理”
db.update("BOOK",values,"name = ?",new String[]{"计算机组成原理"}); }
}); query.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { //获取一个可写的数据库实例
SQLiteDatabase db = helper.getWritableDatabase(); //调用查找方法 第一个参数为表名 第二个为列名 第三个为约束条件where 第四个为约束条件占位符的具体值
//第五个为排序的列 第六个对应having 第七个对应orderby
//以下默认查询所有列,结果的集合返回到游标
Cursor cursor = db.query("BOOK",null,null,null,null,null,null,null); String temp = ""; //遍历
while(cursor.moveToNext()){ String name = cursor.getString(cursor.getColumnIndex("name")); String price = cursor.getString(cursor.getColumnIndex("price")); temp+= name+" "+price+"\n"; } //关闭游标
cursor.close(); result.setText(temp); }
}); delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) { //获取一个可写的数据库实例
SQLiteDatabase db = helper.getWritableDatabase(); //表名 约束条件
db.delete("BOOK","price = ?",new String[]{"888"}); }
}); }
}
布局代码:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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: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.administrator.databasetest.MainActivity"> <TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="查询结果"
android:id="@+id/result"
android:textSize="30dp"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginBottom="122dp" /> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/create"
android:text="创建" /> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/insert"
android:text="添加"
android:layout_below="@+id/create"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" /> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="更新"
android:id="@+id/update"
android:layout_below="@+id/insert"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" /> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/query"
android:text="查找"
android:layout_below="@+id/update"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" /> <Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="删除"
android:id="@+id/delete"
android:layout_below="@+id/query"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" /> </RelativeLayout>
SQLite基本都用法就那么多,想深入了解的可以看看官方的API,谢谢各位阅读。
SQLite的基本用法的更多相关文章
- (26)SQLite集成与用法
概述 在Cocos2d-x中,简单数据存储,可以使用UserDefault.那么如何存储大量,不规则的数据?我们可以使用SQLite数据库存储数据.SQLite是使用非常广泛的嵌入式数据库,它有小巧 ...
- SQLite集成与用法
本文转载至 http://cn.cocos2d-x.org/article/index?type=cocos2d-x&url=/doc/cocos-docs-master/manual/fra ...
- SQLite一些函数用法
--格林威治日期时间,比北京时间晚8小时 select datetime('now'); --格林威治日期 select date('now'); --本地时间 select time('now',' ...
- Android SQLite (二) 基本用法
在Android开发中SQLite起着很重要的作用,网上SQLite的教程有很多很多,不过那些教程大多数都讲得不是很全面.本人总结了一些SQLite的常用的方法,借着论坛的大赛,跟大家分享分享的. 一 ...
- Android SQLite (四 ) 全面详解(二)
SQLite创建数据库 创建数据库语法: sqlite3 DatabaseName.db 如下展示一个实例: SQLite附加数据库 假设这样一种情况,当在同一时间有多个数据库可用,您想使用其中的任何 ...
- SQLite使用教程11 表达式
SQLite 表达式 表达式是一个或多个值.运算符和计算值的SQL函数的组合. SQL 表达式与公式类似,都写在查询语言中.您还可以使用特定的数据集来查询数据库. 语法 假设 SELECT 语句的基本 ...
- SQLite使用教程10 运算符
SQLite 运算符 SQLite 运算符是什么? 运算符是一个保留字或字符,主要用于 SQLite 语句的 WHERE 子句中执行操作,如比较和算术运算. 运算符用于指定 SQLite 语句中的条件 ...
- Andoird - SQLite 数据库 基础教程
链接来源 http://www.tutorialspoint.com/android/android_sqlite_database.htm SQLite是一个开源的SQL数据库,这个数据库把数据存储 ...
- SQLite语法
一.建立数据库 sqlite3.exe test.db 二.双击sqlite-3_6_16目录下的程序sqlite3.exe,即可运行 三.退出 .exit 或者 .quit 四.SQLite支持如下 ...
随机推荐
- HTML中name,value属性区分
name和value区分(注重前后台的结合),个人笔记使用^_^ 前台 后台对于单选框来说,name是一样的,决定后台的键名,value的值决定了后台键值 复选框同理,但name应该是不同的
- matlab GUI重新命名
http://www.mathworks.com/matlabcentral/newsreader/view_thread/309789 To change the name you should o ...
- bzoj 1858 序列操作
bzoj 1858 序列操作 带有随机多个区间单值覆盖的区间操作题,可考虑用珂朵莉树解决. #include<bits/stdc++.h> using namespace std; #de ...
- LOJ2321. 「清华集训 2017」无限之环【费用流】
LINK 很好的一道网络里题 首先想插头DP的还是出门左转10分代码吧 然后考虑怎么网络流 首先要保证没有漏水 也就是说每个接口一定要有对应的接口 那么发现每个点只有可能和上下左右四个点产生联通关系 ...
- BZOJ1001 BeiJing2006 狼抓兔子 【网络流-最小割】*
BZOJ1001 BeiJing2006 狼抓兔子 Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的,而且现在的兔子还比较 ...
- flask第八篇——url_for【1】
我们已经知道,知道了url就可以找到对应的视图函数,那么现在问题来了,如果我们知道了视图函数,要怎么找到url呢?这时候我们就需要url_for函数了. # coding: utf-8 from fl ...
- 《selenium2 python 自动化测试实战》(19)——webdriver错误截图
webdriver 提供错误截图函数 get_screenshot_as_file(),可以帮助我们跟踪 bug,在脚本无法继续执行时候, get_screenshot_as_file()函数将截取当 ...
- LeetCode 417. Pacific Atlantic Water Flow
原题链接在这里:https://leetcode.com/problems/pacific-atlantic-water-flow/description/ 题目: Given an m x n ma ...
- poj 2187 Beauty Contest——旋转卡壳
题目:http://poj.org/problem?id=2187 学习材料:https://blog.csdn.net/wang_heng199/article/details/74477738 h ...
- NanoPiM1开箱测试
等了快一周了,终于那M1与那外壳一起给我寄过来了. 上午收到,开箱图就不亮了,来一上好电的图! 一同购买来的MSD卡里什么也没有,上电测试时只看到绿色的灯微微亮(这是一个BUG吗!!!!哈哈). 所以 ...