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的基本用法的更多相关文章

  1. (26)SQLite集成与用法

    概述 在Cocos2d-x中,简单数据存储,可以使用UserDefault.那么如何存储大量,不规则的数据?我们可以使用SQLite数据库存储数据.SQLite是使用非常广泛的嵌入式数据库,它有小巧 ...

  2. SQLite集成与用法

    本文转载至 http://cn.cocos2d-x.org/article/index?type=cocos2d-x&url=/doc/cocos-docs-master/manual/fra ...

  3. SQLite一些函数用法

    --格林威治日期时间,比北京时间晚8小时 select datetime('now'); --格林威治日期 select date('now'); --本地时间 select time('now',' ...

  4. Android SQLite (二) 基本用法

    在Android开发中SQLite起着很重要的作用,网上SQLite的教程有很多很多,不过那些教程大多数都讲得不是很全面.本人总结了一些SQLite的常用的方法,借着论坛的大赛,跟大家分享分享的. 一 ...

  5. Android SQLite (四 ) 全面详解(二)

    SQLite创建数据库 创建数据库语法: sqlite3 DatabaseName.db 如下展示一个实例: SQLite附加数据库 假设这样一种情况,当在同一时间有多个数据库可用,您想使用其中的任何 ...

  6. SQLite使用教程11 表达式

    SQLite 表达式 表达式是一个或多个值.运算符和计算值的SQL函数的组合. SQL 表达式与公式类似,都写在查询语言中.您还可以使用特定的数据集来查询数据库. 语法 假设 SELECT 语句的基本 ...

  7. SQLite使用教程10 运算符

    SQLite 运算符 SQLite 运算符是什么? 运算符是一个保留字或字符,主要用于 SQLite 语句的 WHERE 子句中执行操作,如比较和算术运算. 运算符用于指定 SQLite 语句中的条件 ...

  8. Andoird - SQLite 数据库 基础教程

    链接来源 http://www.tutorialspoint.com/android/android_sqlite_database.htm SQLite是一个开源的SQL数据库,这个数据库把数据存储 ...

  9. SQLite语法

    一.建立数据库 sqlite3.exe test.db 二.双击sqlite-3_6_16目录下的程序sqlite3.exe,即可运行 三.退出 .exit 或者 .quit 四.SQLite支持如下 ...

随机推荐

  1. storyboard出口回退问题

    问题 直接在Main.storyboard拖动添加到出口的时候总是出一些不知名的错误.猜想可能是swift4又TM换了新特性(不过好喜欢啊哈哈哈哈) 解决 其实可以先拖动添加@IBAction函数到代 ...

  2. js之简易计算器

    <!DOCTYPE html PUBLIC "-//W3C//Dli XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. (转载)从MVC到前后端分离

    摘要:MVC模式早在上个世纪70年代就诞生了,直到今天它依然存在,可见生命力相当之强.MVC模式最早用于Smalltalk语言中,最后在其它许多开发语言中都得到了很好的应用,例如,Java中的Stru ...

  4. stm32寄存器版学习笔记06 输入捕获(ETR脉冲计数)

    STM32外部脉冲ETR引脚:TIM1-->PA12;TIMER2-->PA0:TIMER3-->PD2;TIMER4-->PE0… 1.TIM2 PA0计数 配置步骤 ①开启 ...

  5. BZOJ4237 稻草人 【CDQ分治】

    Description JOI村有一片荒地,上面竖着N个稻草人,村民们每年多次在稻草人们的周围举行祭典. 有一次,JOI村的村长听到了稻草人们的启示,计划在荒地中开垦一片田地.和启示中的一样,田地需要 ...

  6. asp.net core microservices 架构之 分布式自动计算(一)

       一:简介   自动计算都是常驻内存的,没有人机交互.我们经常用到的就是console job和sql job了.sqljob有自己的宿主,与数据库产品有很关联,暂时不提.console job使 ...

  7. IOS SEL (@selector) 原理及使用总结(一)

    SEL 类成员方法的指针 可以理解 @selector()就是取类方法的编号,他的行为基本可以等同C语言的中函数指针,只不过C语言中,可以把函数名直接赋给一个函数指针,而Object-C的类不能直接应 ...

  8. Quartz 2D编程指南- PDF文档的创建、显示及转换

    PDF文档存储依赖于分辨率的向量图形.文本和位图,并用于程序的一系列指令中.一个PDF文档可以包含多页的图形和文本.PDF可用于创建跨平台.只读的文档,也可用于绘制依赖于分辨率的图形.         ...

  9. pipeline的存储代码

    在spider中最后一个函数返回item时会scrapy会调用pipeline里面的 process_item(self, item, spider):函数并传入item,spider等参数在这里可以 ...

  10. Python基础之路

    一.Python基础之简介 二.Python基础之数据类型 三.Python之运算符 三.Python变量 四.Python之流程控制 三.Python基础之函数 四.Python基础之面向对象