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. matlab load

    参考文献:http://jingyan.baidu.com/article/fec4bce2257963f2618d8bfa.html 对应save,load 命令更加简单. load的方式有三种: ...

  2. I.MX6 Kernel BUG at include/linux/netdevice.h:520!

    /*************************************************************************** * I.MX6 Kernel BUG at i ...

  3. phpcms v9取消验证码

    phpcms/modules/admin/index.php// $code = isset($_POST['code']) && trim($_POST['code']) ? tri ...

  4. java中守护线程的一些概念和用法

    网上的资料中,守护线程的功能一般都是“只要当前JVM实例中尚存任何一个非守护线程没有结束,守护线程就全部工作:只有当最后一个非守护线程结束是,守护线程随着JVM一同结束工作,Daemon作用是为其他线 ...

  5. [译]SSL/TLS真的被BEAST攻击攻破了吗?真实情况是怎样的?我应该做什么?

    原文链接:https://luxsci.com/blog/is-ssltls-really-broken-by-the-beast-attack-what-is-the-real-story-what ...

  6. Redis 字符串与哈希

    /*** * 字符串 redis里的字符串 ***/ //设置key的值 redis 127.0.0.1:6379> set key 'my name is imay' //设置值的过期时间 ( ...

  7. 淘宝npm镜像使用

    淘宝NPM镜像使用 镜像使用方法 1.config命令 npm config set registry https://registry.npm.taobao.org npm info undersc ...

  8. [深度学习]Python/Theano实现逻辑回归网络的代码分析

    2014-07-21 10:28:34 首先PO上主要Python代码(2.7), 这个代码在Deep Learning上可以找到. # allocate symbolic variables for ...

  9. ffmpeg/ffplay 添加实时的时间水印 (转)

    右上角添加时间水印 ffmpeg -i 0.ts -vf drawtext="fontfile=arial.ttf:x=w-tw:fontcolor=white:fontsize=30:te ...

  10. jq 合并json对象

    一,保存object1和2合并后产生新对象,若2中有与1相同的key,默认2将会覆盖1的值 1 var object = $.extend({}, object1, object2); 二,将2的值合 ...