利用SQLite在android上实现增删改查

方法:

一、直接利用database.execSQL()方法输入完整sql语句进行操作

  这种方法适用于复杂的sql语句,比如多表查询等等

  这里适合于增删改,这个方法没有返回值,而查需要返回数据,故不适用

  增实例:

    database.execSQL("insert into student (name,age) values ('小李',45)");

  查的话用database.rawQuery()方法,也是我们直接输入完整的sql语句

  查实例:

    Cursor cursor = database.rawQuery("select id,name,age from student where name=?",new String[] { "小李" });

二、利用系统直接封装好的API,原理是系统内部把参数拼成sql语句

  适用于简单sql语句

  增: 返回操作的行

    long row=database.insert("student", null, values);

  删: 返回受影响的行数

    int n = database.delete("student", "name=? and age=?", new String[] {"饭饭", "20" });

  改: 返回受影响的行数

    int n = database.update("student", values, "name=?",new String[] { "饭饭" });

  查: 返回数据表游标 (注意查不是select)

    Cursor cursor = database.rawQuery("select id,name,age from student where name=?",new String[] { "小李" });

三、其它

1、数据库的连接有限,所以创建连接用完要关闭

2、将我们需要操作的数据写入ContentValues

3、查数据时,游标通过cursor.moveToNext()方法来确定下一行是否有值,有值就读取下一行的值

4、得到列的索引有两种方法:

  通过查找列字段对应的位置得到

    int id = cursor.getInt(cursor.getColumnIndex("id"));

  直接通过列号得到

    String name = cursor.getString(1);

代码:

com.fry.database.MySQLiteOpenHelper

 package com.fry.database;

 import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log; public class MySQLiteOpenHelper extends SQLiteOpenHelper{ /*
* 1、context 上下文
* 2、那么数据库名称
* 3、factory
* 4、version 数据库文件的版本
*/ public MySQLiteOpenHelper(Context context,int version) {
super(context, "fanfan3.db", null, version);
// TODO Auto-generated constructor stub
} /* 数据库文件创建成功后调用
* (non-Javadoc)
* @see android.database.sqlite.SQLiteOpenHelper#onCreate(android.database.sqlite.SQLiteDatabase)
*/
@Override
public void onCreate(SQLiteDatabase db) {
Log.d("fanfan", "onCreate");
db.execSQL("CREATE TABLE student(id INTEGER PRIMARY KEY AUTOINCREMENT,name TEXT,age INTEGER)");
} /* 数据库文件更新后调用
* (non-Javadoc)
* @see android.database.sqlite.SQLiteOpenHelper#onUpgrade(android.database.sqlite.SQLiteDatabase, int, int)
*/
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
Log.d("fanfan", "onUpgrade");
} }

数据库类

com.fanfan.test.Test

 package com.fanfan.test;

 import com.fry.database.MySQLiteOpenHelper;

 import android.annotation.SuppressLint;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.test.AndroidTestCase;
import android.util.Log; public class Test extends AndroidTestCase {
public void test1() {
MySQLiteOpenHelper helper = new MySQLiteOpenHelper(getContext(), 1);
SQLiteDatabase database = helper.getReadableDatabase();
helper.getWritableDatabase();
} // 系统提供的API可以解决简单问题,但是比如多表查询的问题,系统搞不定,我们可以自己用execSQL写sql语句
public void insert() {
MySQLiteOpenHelper helper = new MySQLiteOpenHelper(getContext(), 1);
SQLiteDatabase database = helper.getReadableDatabase();
// ContentValues values=new ContentValues();
// values.put("name", "饭饭");
// values.put("age", 20);
// long row=database.insert("student", null, values);
// Log.d("insert", "刚刚插入的是行的编号为: "+row);
// if(row==-1){
// String s="插入失败";
// Log.d("insert", s);
// }
// 不用系统API,自己写sql
database.execSQL("insert into student (name,age) values ('小李',45)");
// 关闭数据库连接
database.close();
} public void delete() {
MySQLiteOpenHelper helper = new MySQLiteOpenHelper(getContext(), 1);
SQLiteDatabase database = helper.getReadableDatabase();
// 返回受影响的行数
int n = database.delete("student", "name=? and age=?", new String[] {
"饭饭", "20" });
Log.d("delete", "返回受影响的行数为: " + n);
// 关闭数据库连接
database.close();
} public void update() {
MySQLiteOpenHelper helper = new MySQLiteOpenHelper(getContext(), 1);
SQLiteDatabase database = helper.getReadableDatabase();
ContentValues values = new ContentValues();
values.put("name", "小红");
// 返回受影响的行数 // 更改符合筛选条件的记录
int n = database.update("student", values, "name=?",
new String[] { "饭饭" });
// 更改表中所有记录
// int n=database.update("student", values, null, null);
Log.d("update", "返回受影响的行数为: " + n);
// 关闭数据库连接
database.close();
} public void select() {
MySQLiteOpenHelper helper = new MySQLiteOpenHelper(getContext(), 1);
// 创建数据库连接
SQLiteDatabase database = helper.getReadableDatabase();
/*
* distinct==true 剔除重复数据 table 表名 column 查询的列 selection 筛选条件
* selsetionArgs 指定筛选条件参数值 groupBy 分组 having 分组筛选 orderBy 排序 比如"age asc"
* limit 分页
*/
// select * from student where
// 返回的是一个结果集合
// Cursor cursor=database.query(true, "student", new
// String[]{"id","name","age"}, null, null, null, null, null, null); // 如果多表查询,上面的方法不行,因为database.execSQL没有返回值,我们无法返回结果
Cursor cursor = database.rawQuery(
"select id,name,age from student where name=?",
new String[] { "小李" }); // 下一行是否有数据
while (cursor.moveToNext()) {
// 具体得那一列的索引
// 通过索引得到
int id = cursor.getInt(cursor.getColumnIndex("id"));// id是第0列
// 直接通过列号得到
String name = cursor.getString(1);
int age = cursor.getInt(2);
String ans = "id: " + id + " name: " + name + " age: "
+ age;
Log.d("select", ans);
}
// 关闭数据库连接
database.close();
}
}

JUnit 测试增删改查

利用SQLite在android上实现增删改查的更多相关文章

  1. 利用SQLite在android上创建数据库

    利用SQLite在android上创建数据库 方法: 1.创建我们的数据库类继承SQLiteOpenHelper类 完成相关函数的重写和数据库对象的初始化 public MySQLiteOpenHel ...

  2. sqlite数据库操作详细介绍 增删改查,游标

    sqlite数据库操作详细介绍 增删改查,游标     本文来源于www.ifyao.com禁止转载!www.ifyao.com Source code     package com.example ...

  3. 利用API方式进行数据库的增删改查

    /* 将数据库的增删改查单独放进一个包 */ package com.itheima28.sqlitedemo.dao; import java.util.ArrayList; import java ...

  4. android 数据库的增删改查的另一种方式

    老师笔记 # 3 Android下另外一种增删改查方式         1.创建一个帮助类的对象,调用getReadableDatabase方法,返回一个SqliteDatebase对象 2.使用Sq ...

  5. android 数据库的增删改查

    主java package com.itheima.crud; import android.app.Activity; import android.content.Context; import ...

  6. 利用SQLiteOpenHelper创建数据库,进行增删改查操作

    Android中提供SQLiteOpenHelper类,在该类的构造器中,调用Context中的方法创建并打开一个指定名称的数据库对象.继承和扩展SQLiteOpenHelper类主要做的工作就是重写 ...

  7. 啊啊啊啊啊啊啊今天就写,炒鸡简单 数据库Sqlite的创建,库的增删改查

    啦啦啦啦啦啦啦 写这个不用多长时间,我直接写代码注释都是些语句,Sql语句和Api来操作数据库 ,语句的参数我会注释 SQLite数据库创建数据库需要使用的api:SQLiteOpenHelper必须 ...

  8. django 利用ORM对单表进行增删改查

    牛小妹上周末,一直在尝试如何把数据库的数据弄到界面上.毕竟是新手,搞不出来,文档也看不懂.不过没关系,才刚上大学.今晚我们就来解释下,要把数据搞到界面的第一步.先把数据放到库里,然后再把数据从库里拿出 ...

  9. asp.net下利用MVC模式实现Extjs表格增删改查

    在网上看到有很多人写extjs下的表格控件的增删改查,但是大多数都是直接从后台读取数据,很少有跟数据库进行交互的模式. 今天就来写一个这样的例子.欢迎大家交流指正. 首先简单介绍一下MVC模式,MVC ...

随机推荐

  1. [转]深入javascript——构造函数和原型对象

    对象,是javascript中非常重要的一个梗,是否能透彻的理解它直接关系到你对整个javascript体系的基础理解,说白了,javascript就是一群对象在搅..(哔!). 常用的几种对象创建模 ...

  2. Java关于反射的用法

    一. 首先是准备一个需要反射的类 public class Person { private String name; private int age; public String sex; publ ...

  3. windows下react-native搭建环境

    第一步:安装Java 1.下载JDK,选择适应自己的机型:官网地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downl ...

  4. 酷派 5267 刷入第三方 recovery教程 刷机 ROOT

    准备工作: 一台电脑: 酷派5267手机: 一张内存卡: 下载好刷机资料:  http://pan.baidu.com/s/1i4LoVh7 备用下载: http://pan.baidu.com/s/ ...

  5. KVO的使用及底层实现

    1.概念 KVO(Key-Value-Observer)也就是观察者模式,是苹果提供的一套事件通知机制.允许对象监听另一个对象特定属性的改变,并在改变时接收到事件,一般继承自NSObject的对象都默 ...

  6. 在64位WindowsServer2012R2中安装Oracle10g第二版(10.2.0.4.0)-20160106

      1.操作系统版本 用于安装数据库的操作系统镜像文件名为:cn_windows_server_2012_r2_vl_with_update_x64_dvd_6052729.iso 安装DataCen ...

  7. Arduino LM35温度检测

    一. 接线原理图 二.实物图 三.代码例子

  8. 重新理解 Monad

    对于大多数刚刚入门函数式编程的同学来说,monad(单子.又叫单体)可能是这里面的一道坎.你可能对 map . flatMap 以及 filter 再熟悉不过,可是到了高阶的抽象层次上就又会变得一脸懵 ...

  9. REST ful

    前后端分离.面向资源.无状态: 请求包含全部信息. 什么是 REST? 下面六条准则定义了一个 REST 系统的特征: 客户-服务器(Client-Server),提供服务的服务器和使用服务的客户需要 ...

  10. Python标准模块--logging(转载)

    转载地址:http://www.cnblogs.com/zhbzz2007/p/5943685.html#undefined Python标准模块--logging 1 logging模块简介 log ...