Android开发之通过Android的API对sqlite数据库的操作以及数据库事务的练习

一、通过Android的API对sqlite数据库的操作

通过已有的ContentValues类,实例一个对象value来调用其中内部的方法来操作sqlite数据库

代码:

package com.example.databasedemo;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;

/**
 * 这个类用于对数据库的增删改查
 */
public class Dao {

    private final DatabaseHelper mHelper;
    private static final String TAG="Dao";
    public Dao(Context context){

        //创建数据库
        //Ctrl+Alt+F,之后加回车,创建成员变量
        mHelper = new DatabaseHelper(context);

    }

    public  void insert(){
        SQLiteDatabase db = mHelper.getWritableDatabase();
//        String sql="insert into "+Constants.TABLE_NAME+"(_id,name,age,salary,phone) values(?,?,?,?,?)";
//        Object []obj={1,"haohao",20,10000};
//        db.execSQL(sql,obj);
        ContentValues values  =new ContentValues();
        //插入数据
        values.put("_id",2);
        values.put("name","me");
        values.put("age",20);
        values.put("salary",5);
        db.insert(Constants.TABLE_NAME,null,values);
        db.close();
    }

    public  void delete(){
        SQLiteDatabase db = mHelper.getWritableDatabase();
//        String sql="delete from "+Constants.TABLE_NAME+" where name = ?";
//        Object []obj={"hao"};
//        db.execSQL(sql,obj);
        int result = db.delete(Constants.TABLE_NAME, null, null);
        Log.d(TAG,"result="+result);
        db.close();
    }

    public  void update(){
        SQLiteDatabase db = mHelper.getWritableDatabase();
//        String sql="update "+Constants.TABLE_NAME+" set salary= ? where name = ?";
//        Object []obj={3,"hao"};
//        db.execSQL(sql,obj);
        ContentValues values = new ContentValues();
        values.put("salary",54321);
        db.update(Constants.TABLE_NAME,values,null,null);
        db.close();
    }

    public  void query(){
        SQLiteDatabase db = mHelper.getWritableDatabase();
//        String sql="select * from "+Constants.TABLE_NAME+" where name = ?";
//        String []obj={"hao"};
//        Cursor cursor = db.rawQuery(sql, obj);
//        while (cursor.moveToNext()){
//            String name = cursor.getString(cursor.getColumnIndex("name"));
//            String age = cursor.getString(cursor.getColumnIndex("age"));
//            Log.d(TAG,"名字:"+name+"年龄:"+age);
//        }
//        cursor.close();

        Cursor cursor = db.query(Constants.TABLE_NAME, null, null, null, null, null, null);

        while (cursor.moveToNext()){
            int id = cursor.getInt(0);
            String name = cursor.getString(1);
            Log.d(TAG,"ID="+id+"name="+name);
        }

        cursor.close();
        db.close();
    }
}

ContentValues

二、数据库事务

package com.example.transcationdemo;

import androidx.appcompat.app.AppCompatActivity;

import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        DatabaseHelper helper =new DatabaseHelper(this);
        helper.getWritableDatabase();
        //   toTestInsert();
        toTestUpdate();
    }

    public void toTestInsert(){
        DatabaseHelper helper=new DatabaseHelper(getApplicationContext());
        SQLiteDatabase db=helper.getWritableDatabase();

        db.execSQL("insert into givemoney values( 1 , ‘company‘, 100000)");

        db.execSQL("insert into givemoney values( 2 , ‘me‘, 0)");

        db.close();
    }

    public void toTestUpdate(){
        DatabaseHelper helper =new DatabaseHelper(getApplicationContext());
        SQLiteDatabase db=helper.getWritableDatabase();

        db.beginTransaction();
        try {

             db.execSQL("update givemoney set money = 100000-12000 where name = ‘company‘");
            int a=10/0;
            db.execSQL("update givemoney set money = 12000 where name = ‘me‘");
            db.setTransactionSuccessful();
        } catch (SQLException e) {

        }finally {

            db.endTransaction();
            db.close();
        }

    }
}

Transcation

两个特点

1、安全性

通过Try{}Catch{}的进行,保证一次性将Try中的内容全部执行,避免数据丢失和运算的错误。

2、高效性

事务:先将数据写入内存,然后一次写入数据库。

普通:打开数据库,存入数据,关闭数据库。

原文地址:https://www.cnblogs.com/suanai/p/12274977.html

时间: 2024-10-24 05:32:05

Android开发之通过Android的API对sqlite数据库的操作以及数据库事务的练习的相关文章

Android开发周报:Android L默认加密用户数据

Android开发周报:Android L默认加密用户数据 新闻 <iCloud前车之鉴,Android L默认开启加密功能>:iCloud 艳照风波再起,第二波女星照片流出,大量女星的裸照又开始在社交网站疯传,本次大规模的“艳照门”依然有可能是黑客利用苹果iCloud云端系统的漏洞, 在破解了女艺人们所设的简单密码后侵入并非法盗取了裸照,继而在网络论坛发布.注重保护用户的隐私,是厂商们义不容辞的责任,谷歌宣布Android L上将默认加密用户数据. <苹果出了个指南教你怎么从Andro

Android开发学习笔记:数据存取之SQLite浅析

一.SQLite的介绍 1.SQLite简介 SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入 式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了.它能够支持 Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如Tcl.PHP.Java.C++..Net等,还有ODBC接口,同样比起 Mysql.PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的

Android开发实践:Android交叉编译工具链的使用

前面2篇文章分别介绍了Android NDK编译的命令行参数,以及如何在任意目录使用Android.mk来编译本地c/c++代码,Andriod.mk和ndk-build只不过是Android官方提供了一套封装过的Android交叉编译环境而已,其实,你可以不用它,而直接通过传统的Makefile文件来编译你的c/c++代码的,本文即介绍如何直接通过传统的Makefile文件来编译可用于Android平台的库文件. 经常搞嵌入式开发的朋友对于交叉编译环境应该并不陌生,说白了,就是一组运行在x86

android开发环境 eclipse + android sdk配置笔记

本开发环境为:eclipse + android sdk,步骤说明的顺序,没有特别要求,看个人爱好了 步骤说明: 1.安装eclipse 2.配置jdk 3.安装android sdk 4.安装ADT,关联eclipse和android 详细说明: 1.安装eclipse * 到官方网下载eclipse(http://www.eclipse.org/downloads/),我是下载的Eclipse IDE for Java EE Developers. * 正常解压安装,注意记得路径就可以了 2

C#程序员学习Android开发系列之Android项目的目录结构

今天开始正式学习Android开发的种种细节,首先从最基本的概念和操作学起. 首先看一下Android项目的目录结构. 这是我随便建立的一个test项目,我们重点关注一下几个方面的内容: 1.src目录:存放java源代码的目录,里面建立一个包,包里面有4个java源文件(分别都继承自Activity).由于java要求比较严格,因此要求类名与文件名一致. gen(Generated Java Files)目录:自动产生Java源文件的目录,是由工具自动生成的,一般不需要自己修改.里面主要有一个

一劳永逸搭建android开发环境(android官网reference sample api tutorial全下载)

[摘要]本文简单介绍了android开发环境的搭建,重点介绍了SDK manager和AVD升级问题:并提供了android reference,sample,api,及docs的下载信息. [1]为何写这个题目呢? 1.工欲其事必先利器: 2.墙内的世界太烦躁,健康向上的东西也得不到: 3.google及其android在墙外: 4.SDK不好太多,太零散,非得用管理工具才好使: 如果你会翻越长城这堵世界奇迹之墙,你可以在android官网https://developer.android.c

Android开发入门教程--Android应用程序结构分析

一.新建HelloWorld项目: 1.打开Eclipse,点击"File"->"New"->"Project"-Android Application Project"": 在弹出的"New Android Application"窗体中输入相应的应用名称.项目名称.包名称,并选择相应的SDK版本和应用主题: 选择项目保存位置,一路"next"完成项目创建: 创建后的项目:

Android开发自学笔记(Android Studio)&mdash;4.1布局组件

一.引言 Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦.组件按照布局的要求依次排列,就组成了用户所看见的界面.在Android4.0之前,我们通常说Android开发五大布局和四大组件,这五大布局就是: LinearLayout 线性布局 FrameLayout 单帧布局,也有中文翻译为帧布局.框架布局. RelativeLayout 相对布局 AbsoluteLayout 绝对布局 TableLayout 表格布局 而在Android4.0之

Android开发新手教程--Android应用程序结构

一.新HelloWorld工程: 1.打开Eclipse.点击"File"->"New"->"Project"-Android Application Project"": 在弹出的"New Android Application"窗口中输入对应的应用名称.项目名称.包名称,并选择对应的SDK版本号和应用主题: 选择项目保存位置.一路"next"完毕项目创建: 创建后的项目: