Android-Sqlite-OOP方式操作增删改查
之前写的数据库增删改查,是使用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方式操作增删改查的更多相关文章
- Android -- SQLite 数据库创建,增删改查,事务处理
1. 概述 在Android平台上,集成了一个嵌入式关系型数据库-SQLite,SQLite3支持 NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本)和BLOB(二进制对象)数据类 ...
- Android SQLite服务--创建、增删改查
<pre name="code" class="java">import android.content.Context; import andro ...
- JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删改查),事件
JavaScript---Dom树详解,节点查找方式(直接(id,class,tag),间接(父子,兄弟)),节点操作(增删改查,赋值节点,替换节点,),节点属性操作(增删改查),节点文本的操作(增删 ...
- Android下数据库操作——增删改查
Android下数据库第一种方式增删改查 1.创建一个帮助类的对象,调用getReadableDatabase方法,返回一个SqliteDatebase对象 2.使用SqliteDat ...
- Spring Boot入门系列(十八)整合mybatis,使用注解的方式实现增删改查
之前介绍了Spring Boot 整合mybatis 使用xml配置的方式实现增删改查,还介绍了自定义mapper 实现复杂多表关联查询.虽然目前 mybatis 使用xml 配置的方式 已经极大减轻 ...
- MyBatis学习(三)MyBatis基于动态代理方式的增删改查
1.前言 上一期讲到MyBatis-Statement版本的增删改查.可以发现.这种代码写下来冗余的地方特别多.写一套没啥.如果涉及到多表多查询的时候就容易出现问题.故.官方推荐了一种方法.即MyBa ...
- Hbase常用操作(增删改查)
Hbase常用操作(增删改查) [日期:2014-01-03] 来源:Linux社区 作者:net19880504 [字体:大 中 小] 运行Eclipse,创建一个新的Java工程“HBa ...
- 02.Mybatis的动态代理方式实现增删改查
动态代理的方式实现增删改查: 通过约定的方式定位sql语句 约定 > 配置文件 > 硬编码 约定的目标是省略掉通过硬编码的方式定位sql的代码,通过接口直接定位出sql语句,以下代码为通过 ...
- Android-Sqlite-SQL操作增删改查
一想到Android到数据库,只需要想到一个类 SQLiteOpenHelper,然后写一个类继承 SQLiteOpenHelper,重写构造方法,对数据库进行配置 public class MySQ ...
随机推荐
- MikroTik-ROS-无线设备传输距离
近期在MikroTik官网论坛给出了官方无线成品设备的最大传输距离. 以下设备列表基于理想的环境条件,包括干扰,天气,校准精度等因素,表给出了基于802.11ac或802.11n在获取最大传输带宽的情 ...
- Fri Oct 31 18:00:00 UTC+0800 2008转换为yyyy-mm-dd
这个其实网上有很多例子,都是直接用js在前端做了时间处理,我的处理也一样,想要变成2008-3-31,就用下面的js直接可以处理 function Todate(num) { //Fri Oct 31 ...
- Go语言面组合式向对象编程基础总结
转自:http://blog.csdn.net/yue7603835/article/details/44282823 Go语言的面向对象编程简单而干净,通过非侵入式接口模型,否定了C/C++ Jav ...
- Go语言并发编程总结
转自:http://blog.csdn.net/yue7603835/article/details/44309409 Golang :不要通过共享内存来通信,而应该通过通信来共享内存.这句风靡在Go ...
- HTTP代理器Fiddler(三)
HTTP代理神器Fiddler Fiddler是一款强大Web调试工具,它能记录所有客户端和服务器的HTTP请求. Fiddler启动的时候,默认IE的代理设为了127.0.0.1:8888,而其他浏 ...
- Django框架之模板语法【转载】
Django框架之模板语法 一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法分类 一.模板语法之变量:语法为 {{ }}: 在 Django ...
- Selenium Webdriver——Chrome调试Xpath
自己通过手写的Xpath要验证是否正确定位到元素,可以通过谷歌浏览器的Console功能(F12) 在console 输入:$x("") 定位去哪儿网的出发输入框: <inp ...
- leetcode441
public class Solution { public int ArrangeCoins(int n) { //convert int to long to prevent integer ov ...
- Microsoft Office Professional Plus 2013全套
Microsoft Office Professional Plus 2013全套产品,全激活版本 包括Access Word Excel Powerpoint Publisher Skyd ...
- Mysql 索引概论
Mysql性能下降原因 JOIN连接过多 ,索引失效(单值,复合), 查询SQL过水, explian 语法分析SQL性能 https://blog.csdn.net/b1303110335/arti ...