之前写的数据库增删改查,是使用SQL语句来实现的,Google 就为Android开发人员考虑,就算不会SQL语句也能实现增删改查,所以就有了OOP面向对象的增删改查方式

其实这种OOP面向对象的增删改查方式,最后系统会自动拼接成SQL语句,然后交给Sqlite.c执行,当然这种OOP面向对象的增删改查有点是,很难写错

数据库帮助类:

package liudeli.datastorage.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper; public class MySQLiteOpenHelper extends SQLiteOpenHelper { public static MySQLiteOpenHelper mySQLiteOpenHelper; /**
* 由于表名每次使用很频繁,所有定义成常量
*/
public static final String TABLE_NAME = "student_table"; private static final String DB_NAME = "person_info.db";
private static final int VERSION = 2; public synchronized static MySQLiteOpenHelper getInstance(Context context) {
if (null == mySQLiteOpenHelper) {
mySQLiteOpenHelper = new MySQLiteOpenHelper(context, DB_NAME, null, VERSION);
}
return mySQLiteOpenHelper;
} /**
* 当开发者调用 getReadableDatabase(); 或者 getWritableDatabase();
* 就会通过此构造方法配置的信息 来创建 person_info.db 数据库
* 此方法的另外作用是,如果存着数据库就打开数据库,不存着数据库就创建数据库
* @param context 上下文
* @param name 数据库名
* @param factory 游标工厂
* @param version 版本,最低为1
*/
private MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
} /**
* 此方法是何时调用? ,是需要开发者调用 getReadableDatabase(); 或者 getWritableDatabase();
* 此方法的作用是,如果没有表就创建打开,如果有表就打开
* @param db 可执行SQL语句
*/
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table "+TABLE_NAME+"(_id integer primary key autoincrement, name text, age integer);");
} /**
* 此方法用于数据库升级
* @param db 可执行SQL语句
* @param oldVersion 以前旧版本的版本号
* @param newVersion 现在目前最新的版本号
*/
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("alter table "+TABLE_NAME+" add sex text null");
}
}

MainActivity OOP面向对象方式操作 增删改查:

package liudeli.datastorage;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast; import liudeli.datastorage.db.MySQLiteOpenHelper; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private final String TAG = MainActivity.class.getSimpleName(); private MySQLiteOpenHelper mySQLiteOpenHelper; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); mySQLiteOpenHelper = MySQLiteOpenHelper.getInstance(this); // person_info.db创建成功 table表创建成功 还有一个很重要的作用:刷新数据库 刷新表数据等
mySQLiteOpenHelper.getReadableDatabase();
mySQLiteOpenHelper.getWritableDatabase(); initViewListener();
} private void initViewListener() {
Button btQuery = findViewById(R.id.bt_query);
Button btInsert = findViewById(R.id.bt_insert);
Button btUpdate = findViewById(R.id.bt_update);
Button btDelete = findViewById(R.id.bt_delete); btQuery.setOnClickListener(this);
btInsert.setOnClickListener(this);
btUpdate.setOnClickListener(this);
btDelete.setOnClickListener(this);
} @Override
protected void onStart() {
super.onStart(); } /**
* 虽然之需要一次 getWritableDatabase getReadableDatabase 就可以来,为什么还需要每次点击都执行一次?
* 答:getWritableDatabase getReadableDatabase 还有一个很重要的作用:刷新数据库 刷新表数据等
* @param v
*/
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.bt_query: {
SQLiteDatabase db = mySQLiteOpenHelper.getReadableDatabase();
// SQL语句的方式
// Cursor cursor = db.rawQuery("select * from "+MySQLiteOpenHelper.TABLE_NAME+";", null); // OOP面向对象的方式 带条件查询
/*Cursor cursor = db.query(MySQLiteOpenHelper.TABLE_NAME,
new String[]{"_id", "name", "age"},
"_id = ?",
new String[]{"10"},
null,
null,
"_id desc");*/ // OOP面向对象的方式 全部查询
Cursor cursor = db.query(MySQLiteOpenHelper.TABLE_NAME,
new String[]{"*"},
null,
null,
null,
null,
null); while (cursor.moveToNext()) {
int _id = cursor.getInt(cursor.getColumnIndex("_id"));
String name = cursor.getString(cursor.getColumnIndex("name"));
int age = cursor.getInt(cursor.getColumnIndex("age"));
Log.d(TAG, "_id:" + _id + " name:" + name + " age:" + age);
}
db.close();
break;
}
case R.id.bt_insert: {
SQLiteDatabase db = mySQLiteOpenHelper.getWritableDatabase();
// SQL语句的方式
db.execSQL("insert into " + MySQLiteOpenHelper.TABLE_NAME + "(name,age) values('刘德利',19);"); // OOP面向对象的方式
ContentValues contentValues = new ContentValues();
contentValues.put("name", "张三");
contentValues.put("age", 19);
long result = db.insert(MySQLiteOpenHelper.TABLE_NAME, null, contentValues);
// 受影响行数大于0就是成功了
if (result > 0) {
alterUser("新增成功");
}
db.close();
break;
}
case R.id.bt_update: {
SQLiteDatabase db = mySQLiteOpenHelper.getWritableDatabase();
// SQL语句的方式
// db.execSQL("update student_table set name='德利' where _id = 1;"); // OOP面向对象的方式
ContentValues contentValues = new ContentValues();
contentValues.put("name", "张三四五");
contentValues.put("age", 100);
int result = db.update(MySQLiteOpenHelper.TABLE_NAME, contentValues, "_id=?", new String[]{"5"});
// 受影响行数大于0就是成功了
if (result > 0) {
alterUser("修改成功");
}
db.close();
break;
}
case R.id.bt_delete: {
SQLiteDatabase db = mySQLiteOpenHelper.getWritableDatabase();
// SQL语句的方式
// db.execSQL("delete from student_table where _id = 1;"); // OOP面向对象的方式
int result = db.delete(MySQLiteOpenHelper.TABLE_NAME, "_id=?", new String[]{"6"});
// 受影响行数大于0就是成功了
if (result > 0) {
alterUser("删除成功");
}
db.close();
break;
}
default:
break;
}
} private void alterUser(String text) {
Toast.makeText(this, text, Toast.LENGTH_LONG).show();
}
}

布局代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity"> <Button
android:id="@+id/bt_query"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="查询"
/> <Button
android:id="@+id/bt_insert"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="插入"
/> <Button
android:id="@+id/bt_update"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="修改"
/> <Button
android:id="@+id/bt_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="删除"
/> </LinearLayout>

增删改查后的数据:

Android-Sqlite-OOP方式操作增删改查的更多相关文章

  1. Android -- SQLite 数据库创建,增删改查,事务处理

    1. 概述 在Android平台上,集成了一个嵌入式关系型数据库-SQLite,SQLite3支持 NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本)和BLOB(二进制对象)数据类 ...

  2. Android SQLite服务--创建、增删改查

    <pre name="code" class="java">import android.content.Context; import andro ...

  3. JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删改查),事件

    JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删 ...

  4. Android下数据库操作——增删改查

    Android下数据库第一种方式增删改查     1.创建一个帮助类的对象,调用getReadableDatabase方法,返回一个SqliteDatebase对象     2.使用SqliteDat ...

  5. Spring Boot入门系列(十八)整合mybatis,使用注解的方式实现增删改查

    之前介绍了Spring Boot 整合mybatis 使用xml配置的方式实现增删改查,还介绍了自定义mapper 实现复杂多表关联查询.虽然目前 mybatis 使用xml 配置的方式 已经极大减轻 ...

  6. MyBatis学习(三)MyBatis基于动态代理方式的增删改查

    1.前言 上一期讲到MyBatis-Statement版本的增删改查.可以发现.这种代码写下来冗余的地方特别多.写一套没啥.如果涉及到多表多查询的时候就容易出现问题.故.官方推荐了一种方法.即MyBa ...

  7. Hbase常用操作(增删改查)

    Hbase常用操作(增删改查) [日期:2014-01-03] 来源:Linux社区  作者:net19880504 [字体:大 中 小]     运行Eclipse,创建一个新的Java工程“HBa ...

  8. 02.Mybatis的动态代理方式实现增删改查

    动态代理的方式实现增删改查: 通过约定的方式定位sql语句 约定 > 配置文件 > 硬编码 约定的目标是省略掉通过硬编码的方式定位sql的代码,通过接口直接定位出sql语句,以下代码为通过 ...

  9. Android-Sqlite-SQL操作增删改查

    一想到Android到数据库,只需要想到一个类 SQLiteOpenHelper,然后写一个类继承 SQLiteOpenHelper,重写构造方法,对数据库进行配置 public class MySQ ...

随机推荐

  1. MikroTik-ROS-无线设备传输距离

    近期在MikroTik官网论坛给出了官方无线成品设备的最大传输距离. 以下设备列表基于理想的环境条件,包括干扰,天气,校准精度等因素,表给出了基于802.11ac或802.11n在获取最大传输带宽的情 ...

  2. Fri Oct 31 18:00:00 UTC+0800 2008转换为yyyy-mm-dd

    这个其实网上有很多例子,都是直接用js在前端做了时间处理,我的处理也一样,想要变成2008-3-31,就用下面的js直接可以处理 function Todate(num) { //Fri Oct 31 ...

  3. Go语言面组合式向对象编程基础总结

    转自:http://blog.csdn.net/yue7603835/article/details/44282823 Go语言的面向对象编程简单而干净,通过非侵入式接口模型,否定了C/C++ Jav ...

  4. Go语言并发编程总结

    转自:http://blog.csdn.net/yue7603835/article/details/44309409 Golang :不要通过共享内存来通信,而应该通过通信来共享内存.这句风靡在Go ...

  5. HTTP代理器Fiddler(三)

    HTTP代理神器Fiddler Fiddler是一款强大Web调试工具,它能记录所有客户端和服务器的HTTP请求. Fiddler启动的时候,默认IE的代理设为了127.0.0.1:8888,而其他浏 ...

  6. Django框架之模板语法【转载】

    Django框架之模板语法 一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法分类 一.模板语法之变量:语法为 {{ }}: 在 Django ...

  7. Selenium Webdriver——Chrome调试Xpath

    自己通过手写的Xpath要验证是否正确定位到元素,可以通过谷歌浏览器的Console功能(F12) 在console 输入:$x("") 定位去哪儿网的出发输入框: <inp ...

  8. leetcode441

    public class Solution { public int ArrangeCoins(int n) { //convert int to long to prevent integer ov ...

  9. Microsoft Office Professional Plus 2013全套

    Microsoft Office Professional Plus 2013全套产品,全激活版本 包括Access  Word  Excel  Powerpoint  Publisher  Skyd ...

  10. Mysql 索引概论

    Mysql性能下降原因 JOIN连接过多 ,索引失效(单值,复合), 查询SQL过水, explian 语法分析SQL性能 https://blog.csdn.net/b1303110335/arti ...