andriod数据库的开发

Andriod开发 Room 数据库处理框架 Room是Android Jetpack组件库中的一部分,它是一个SQLite数据库的抽象层,提供了更简单的API和更好的性能,适合于中大型应用程序。举个例子,我们要将书本信息存储到数据库中,那么可以先创建一个书本信息的新类,用于封装书本信息。在该实体类中,用注解表明实体:@Entity, 和对应表中的主键:@PrimaryKey。这个接口不需要实现具体的增删改查操作,只需要用注解标记好对应的操作。也是类似的,用注解写清楚该数据库涉及的实体类。这样数据库的实例就是全局变量。3)创建数据库的抽象类。 阅读详情

SQLiteOperHelper对数据库进行版本管理

如果应用使用到了SQLite数据库,在用户初次使用软件时,需要创建应用使用到的数据库表结构及添加一些初始化记录,另外在软件升级的时候,也需要对数据表结构进行更新。在Android系统,为我们提供了一个名为SQLiteOpenHelper的类,该类用于对数据库版本进行管理,该类是一个抽象类,必须继承它才能使用。 为了实现对数据库版本进行管理,SQLiteOpenHelper类有两种重要的方法,分别是onCreate(SQLiteDatabase db)和onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)

当调用SQLiteOpenHelper的getWritableDatabase()或者getReadableDatabase()方法获取用于操作数据库的SQLiteDatabase实例的时候,如果数据库不存在,Android系统会自动生成一个数据库,接着调用onCreate()方法,onCreate()方法在初次生成数据库时才会被调用,在onCreate()方法里可以生成数据库表结构及添加一些应用使用到的初始化数据。onUpgrade()方法在数据库的版本发生变化时会被调用,数据库的版本是由程序员控制的,假设数据库现在的版本是1,由于业务的需要,修改了数据库表的结构,这时候就需要升级软件,升级软件时希望更新用户手机里的数据库表结构,为了实现这一目的,可以把原来的数据库版本设置为2(有同学问设置为3行不行?当然可以,如果你愿意,设置为100也行),并且在onUpgrade()方法里面实现表结构的更新。当软件的版本升级次数比较多,这时在onUpgrade()方法里面可以根据原版号和目标版本号进行判断,然后作出相应的表结构及数据更新。

getWritableDatabase()和getReadableDatabase()方法都可以获取一个用于操作数据库的SQLiteDatabase实例。但getWritableDatabase()方法以读写方式打开数据库,一旦数据库的磁盘空间满了,数据库就只能读而不能写,倘若使用的是getWritableDatabase() 方法就会出错。getReadableDatabase()方法先以读写方式打开数据库,如果数据库的磁盘空间满了,就会打开失败,当打开失败后会继续尝试以只读方式打开数据库。

public class DatabaseHelperextends SQLiteOpenHelper {

    //类没有实例化,是不能用作父类构造器的参数,必须声明为静态

         privatestatic final String name = "itcast";//数据库名称

         privatestatic final intversion = 1;//数据库版本

         public DatabaseHelper(Contextcontext) {

//第三个参数CursorFactory指定在执行查询时获得一个游标实例的工厂类,设置为null,代表使用系统默认的工厂类

                super(context,name, null, version);

         }ee

        @Override public void onCreate(SQLiteDatabase db) {

              db.execSQL("CREATETABLE IF NOT EXISTS person (personidinteger primary key autoincrement,name varchar(20),age INTEGER)");  

         }

        @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

               db.execSQL("DROPTABLE IF EXISTS person");

               onCreate(db);

         }

}

上面onUpgrade()方法在数据库版本每次发生变化时都会把用户手机上的数据库表删除,然后再重新创建。一般在实际项目中是不能这样做的,正确的做法是在更新数据库表结构时,还要考虑用户存放于数据库中的数据不会丢失。

第一次调用getWritableDatabase()或getReadableDatabase()方法后,SQLiteOpenHelper会缓存当前的SQLiteDatabase实例,SQLiteDatabase实例正常情况下会维持数据库的打开状态,所以在你不再需要SQLiteDatabase实例时,请及时调用close()方法释放资源。一旦SQLiteDatabase实例被缓存,多次调用getWritableDatabase()或getReadableDatabase()方法得到的都是同一实例。

package com.xqq.domain;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.widget.ListView;

import com.xqq.Db.MySQLieHelper;
import com.xqq.entity.Person;

public class PersonService {

	private MySQLieHelper dbOpenHelper;

	private Context context;

	public PersonService(Context context) {
		super();
		this.context = context;
		dbOpenHelper = new MySQLieHelper(context);
	}

	public void save(Person person) {
		SQLiteDatabase database=dbOpenHelper.getWritableDatabase();
		database.beginTransaction();
		try {
			database.execSQL("INSERT into person(name,age) values(?,?)",
					new Object[] { person.getName(), person.getAge() });
			
			database.setTransactionSuccessful();
		} catch (Exception e) {

		}
		database.endTransaction();

	}

	public void update(Person person) {
		SQLiteDatabase db=dbOpenHelper.getWritableDatabase();
		db.execSQL("update person set name=?,age=? where personid=?",
				new Object[]{person.getName(),person.getAge(),person.getId()});
	}

	public Person find(Integer id) {
		SQLiteDatabase db=dbOpenHelper.getWritableDatabase();
		Cursor cursor=db.rawQuery("select * from person where personid=?", new String[]{String.valueOf(id)});
		Person person=new Person();
		if(cursor.moveToNext()){
			person.setAge(cursor.getInt(cursor.getColumnIndex("age")));
			person.setName(cursor.getString(cursor.getColumnIndex("name")));
		}
		return person;
	}

	public void delete(Integer... ids) {
		if(ids.length>0){
			StringBuilder sb=new StringBuilder();
			for (Integer id : ids) {
	           sb.append("?").append(",");
			}
			sb.deleteCharAt(sb.length()-1);
			SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
			db.execSQL("delete from person where personid in ( "+sb+" )",(Object[])ids);
		}

	}

	public List<Person> getScrollData(int startResult, int maxResult) {
		List<Person> persons=new ArrayList<Person>();
		SQLiteDatabase db = dbOpenHelper.getWritableDatabase();
		Cursor cursor=db.rawQuery("select * from person limit ?,?", new String[]{String.valueOf(startResult),String.valueOf(maxResult)});
		while(cursor.moveToNext()){
			Person person=new Person();
			person.setAge(cursor.getInt(cursor.getColumnIndex("age")));
			person.setName(cursor.getString(cursor.getColumnIndex("name")));
			persons.add(person);
		}
		return persons;
	}
	
	public long getCount(){
		SQLiteDatabase db=dbOpenHelper.getWritableDatabase();
		Cursor cursor=db.rawQuery("select count(*) from person", null);
		if(cursor.moveToNext()){
			return cursor.getLong(0);
		}
		return 0;
	}
}

使用数据库操作SQLite数据库

使用SQLiteDatabase的beginTransaction()方法可以开启一个事务,程序执行到endTransaction() 方法时会检查事务的标志是否为成功,如果为成功则提交事务,否则回滚事务。当应用需要提交事务,必须在程序执行到endTransaction()方法之前使用setTransactionSuccessful() 方法设置事务的标志为成功,如果不调用setTransactionSuccessful() 方法,默认会回滚事务。使用例子如下:
 SQLiteDatabasedb= ....;

db.beginTransaction();//开始事务

try{

    db.execSQL("insertinto person(name, age) values(?,?)", new Object[]{"传智播客",4});

    db.execSQL("updateperson set name=? where personid=?",new Object[]{"传智",1});

    db.setTransactionSuccessful();//调用此方法会在执行到endTransaction()时提交当前事务,如果不调用此方法会回滚事务

}finally {

    db.endTransaction();//由事务的标志决定是提交事务,还是回滚事务

}

db.close();

上面两条SQL语句在同一个事务中执行。



Andriod Studio创建数据库并查看自己创建的数据库 Andriod Studio创建数据库并查看自己创建的数据库 在进行Andriod Studio项目开发时,数据库是必不可少的一环。那么在代码中创建了数据库后,如何查看自己创建的数据库呢?如果能够查看自己的数据库,那将为开发过程带来极大的便利。就让我们看看如何创建数据库并且查看自己的数据库吧! 一、创建数据库 利用SQLiteOpenHelper创建数据库: 建立一个SQLiteOpenHelper的继承类MyDatabaseHelper public class MyDatabaseHelp 阅读详情

相关推荐

andriod数据库简易实现

简单的安卓小程序,将账号密码存入数据库,再登录界面修改删除密码

Android开发——SQLite数据库的使用

在Android中应用程序需要处理大量并发连接、高并发读写等高负载场景,SQLite可能会表现出性能瓶颈,不如传统的关系型数据库管理系统(RDBMS),因此不建议在这些场景中使用SQLite。SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。我们先需要建立一个数据库对象,以读的方式打开,并指定数据库的位置。在onCreate方法里面,防止第一次点击的时候,没有user.db这个文件,因此写了一个创建db文件的代码。当表头为null的时候为全部读取。

Krisit的博客 5332

Win10环境借助DockerDesktop部署Open web UI集成DeepSeek

Win10环境借助DockerDesktop部署Open web UI集成DeepSeek,并借助DuckDuckGo实现联网查询

虎鲸不是鱼 1699

Android之 常用数据库框架整理

4.2 ORM 框架,即 Object-Relational Mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体操作数据库的时候,就不需要再去和复杂的 SQL 语句打交道,只是像平时操作对象一样操作它就可以了。在数据库方面,它是主键。DaoSession还提供了一些通用的持久性方法,如实体的插入,加载,更新,刷新和删除。3.2 SQLiteOpenHelper的使用,自定义DatabaseHelper,继承SQLiteOpenHelper,来管理数据库的创建和数据库表的创建。

hdulhb的博客 6017

【Linux系统】Kdenlive软件多机位同音频视频同步化处理

Kdenlive简介 官网链接:https://kdenlive.org/zh/ 命令行安装: apt-get install kdenlive Kdenlive能够进行多轨道视频编辑,可以使用和调整多条音频、视频轨道。每条轨道可以按需进行单独锁定、静音。 Kdenlive多机位同音频视频同步化处理步骤 1. 新建Kdenlive文件 选择<文件>-<新建>,建立新的kdenlive文件,初始设置为<视频轨:2>,<音频轨:2>。 视.

qq_31550269的博客 1884

FCKeditor 2.6.4 php版本任意文件上传——漏洞复现

一、漏洞描述 FCKeditor是目前最优秀的可见即可得网页编辑器之一,它采用JavaScript编写。具备功能强大、配置容易、跨浏览器、支持多种编程语言、开源等特点。它非常流行,互联网上很容易找到相关技术文档,国内许多Web项目和大型网站均采用了FCKeditor。 Fckeditor 低于 2.6.4 php 版本任意文件上传漏洞,当您的PHP环境配置为 GPC = Off 时可绕过currentfolder参数过滤上传脚本木马控制网站服务器 二、漏洞原理 漏洞版本:<=2.6.4 三、环境搭建

W小哥 1万+

Android 进阶 1、sqlite数据库

在这个位置我们可以打开cmd,然后输入sqlite3,就可以执行一个命令行的数据库操作器,要注意的是他的一些命令是不一样的,跟其他的数据库比较起来,他创建或者打开数据库使用的是.open,在每一个关于数据库命令下面,都需要在前面加上一个点号,而在每一个sql命令下面都需要在后面加上一个分号;这个子类需要创建数据库和继承父类的构造方法,首先需要写一个构造方法,将上下文传进去,super一下父类的构造方法,然后就是接口方法oncreate,在里面执行创建数据表的sql命令;

aiwanchengxu的博客 3862

瑞芯微RK3506开发板Ethercat主站性能优化实战:从内核配置到微秒级延迟控制

本文详细介绍了在瑞芯微RK3506开发板上实现EtherCAT主站微秒级延迟控制的实战优化方案。核心在于部署Preempt-RT实时内核,并进行深度系统调优,包括CPU隔离、中断亲和性设置、内存锁定及电源管理调整。通过绕过Linux网络栈的专用驱动加载与配置,最终实现了稳定的高性能实时控制,满足工业自动化需求。

tcp8optimizer的博客 315

Android学习-数据库

Android学习-数据库的使用

qq_51922077的博客 1433

RDKit实战:5分钟搞定药物分子相似性分析(附Python代码)

本文提供了一套基于RDKit的快速药物分子相似性分析实战指南。通过Python代码演示,从环境搭建、分子指纹(如Morgan指纹)计算到Tanimoto相似性排序与可视化验证,帮助研究者在5分钟内完成从海量化合物库中精准筛选潜在活性分子的全流程,提升药物发现效率。

weixin_29193359的博客 312

【物联网毕设】多模态智能门禁系统设计(STM32+人脸识别+蓝牙联动)

本文详细介绍了基于STM32的多模态智能门禁系统设计,整合了人脸识别、蓝牙联动、RFID和密码等多种开锁方式。文章从硬件选型、电路设计、嵌入式软件编程到手机APP开发,提供了完整的毕设实现方案与调试指南,帮助物联网与嵌入式方向的学生构建一个功能全面、可扩展的智能门禁系统。

rain6的博客 246

Android Sqlite数据库详解

在整理ContentProvider是知识点之前要先整理Sqlite数据库的知识,因为ContentProvider中要使用到数据库。 步入正题:Sqlite是起源是一艘军舰上,一个数据库程序员觉得潜艇正在使用的数据库太强大的,每次更新升级操作复杂,耗时,效率不高。然后就想优化,目标就是设计出一个简单,操作简单,独立性强的数据库,因为也是开源的,之后就在开源社区流行起来,很多开发者都开始使用sqlite数据库。 定义:Sqlite是是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,是为了嵌入式系

门徒07的博客 5881

【35】软考软件设计师——设计模式代码填空(C++版)满分精讲|第5/6题二选一必考

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第35篇,聚焦下午选做题**第5/6题C++版设计模式代码填空**,与上一篇Java版形成双子配套,单题分值稳定12~15分。全文超4000字深度拆解C++独有核心考点:虚函数/纯虚函数、构造与析构函数规范、继承权限、模板类编程在设计模式中的应用;精讲单例、工厂、策略、观察者、适配器五大高频模式的C++专属代码写法,标注所有填空核心点位、语法陷阱、内存安全规范

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 543

Andriod开发——SQlite数据库的学习

SQlite是一个轻量级的数据库,它最初是为嵌入式设计的,占用资源非常少,在内存中只需要几百KB的存储空间。SQlite是遵守ACID关联式的数据库管理系统。它没有服务进程,通过文件保存数据,该文件是跨平台的,可以放在其他平台上使用。 Android SDK 为SQlite提供了一系列的数据库进行操作的类和接口,下面做一些简单的介绍: 1、SQLiteOpenHelper类是主要用于创建数据库

DongGJ_的博客 676

Yolo11改进:Block改进|MixDehazeNet,用于图像去雾网络的混合结构块|即插即用|附代码

https://arxiv.org/pdf/2305.17654 图像去雾是低级视觉领域中的一项典型任务。先前的研究验证了大型卷积核和注意力机制在去雾中的有效性。然而,存在两个缺点:引入大型卷积核时容易忽略图像的多尺度特性,而注意力模块的标准串联方式没有充分考虑雾分布的不均匀性。在本文中,我们提出了一种名为混合结构图像去雾网络(MixDehazeNet)的新型框架,该框架解决了上述两个问题。具体而言,它主要由两部分组成:多尺度并行大型卷积核模块和增强并行注意力模块。与单个大型卷积核相比,多尺度的并行大型卷积

m0_47867638的博客 1269

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

原生andriod开发基础之SQLite数据库使用

layout <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/activ

姜大大的博客 241

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Andriod所有实验程序代码

Andriod所有实验程序代码 实验二 UI设计(一) 实验目的: 自主完成一个简单APP的设计工作,综合应用已经学到的Android UI设计技巧,重点注意合理使用布局。 实验要求: 完成一个计算器的设计,可以以手机自带的计算器为参考。设计过程中,注意考虑界面的美观性,不同机型的适应性,以及功能的完备性。 注意结合Activity的生命周期,考虑不同情况下计算器的界面状态。 如有余力,可以考虑...

VVVVVVV______的博客 630

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

andriod连接mysql测试_android开发 MyEclipse下测试连接MySQL数据库

1、首先要加载MySQL驱动包。步骤:右击项目找到build path->configure build path->libraries——>add External JARs添加驱动包2、写测试类:TestCon.java(在此之前,首先必须1.在自己的电脑上Mysql下确定账户是"root",密码是"123456";2.进入账户,创建数据库cui;3.在数据库cui下面,创建...

weixin_28863779的博客 240

【springboot】Andriod模拟抖音系统

系统测试对于开发软件来说,是一部极其重要的一个步骤,这关系到软件给予用户首次使用的满意度好坏,是开发者在开发软件过程中最后且关键的最后一个需要解决的问题,在开发者在测试出问题之后,对可能还存在的漏洞,以及之前还未完全处理完全的系统错误,进行彻底的解决,因为在系统在研发中,存在着各种各样的小问题,有些问题在开发问题中,可能不易被发现,所以就需要在这个环节中把这些小问题全部发现并处理。

2301_76817904的博客 903

SSM基于Andriod的剪纸艺术平台3swaq(程序+源码+数据库+调试部署+开发环境)

剪纸艺术作为中国传统民间艺术的瑰宝,承载着丰富的历史文化内涵与民族精神。然而,随着现代科技发展和生活方式转变,传统剪纸艺术面临传承断层、受众减少等挑战。现有研究多集中于技艺传承、文化内涵解析及市场应用,但基于移动平台的数字化传播与互动研究相对薄弱。

Cute2024_的博客 1092

Node.js毕业设计基于Andriod平台的手机Web地图服务设计(Express+附源码)

通过使用HTML、CSS、JavaScript和Vue等前端技术,我们可以构建一个用户友好、响应迅速的界面,使用户能够轻松地获取和操作地理位置信息。同时,利用Node.js和Express作为后端技术,我们可以实现高性能、可扩展的服务器端逻辑,以满足大量用户并发访问的需求。总之,基于Andriod平台的手机Web地图服务设计,将为人们提供一种全新的地理位置信息获取方式,极大地提高人们的生活质量。在现代社会,地理位置信息的重要性日益凸显,无论是出行、旅游、购物还是工作,地理位置信息都扮演着至关重要的角色。

Django毕设程序杰哥 811

SQLite的相关知识

在Andriod中如何使用SQLite - SQLiteDatabase 主要提供了一些管理SQLite数据库的类 提供创建,删除,执行SQL命令,并执行其他常见的数据库管理任务的方法 .

薛定谔很忙的博客 350

SSM基于Andriod的剪纸艺术平台3swaq(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

本文围绕 SSM 基于 Android 的剪纸艺术平台展开研究,针对剪纸艺术传承困境,结合 SSM 框架与 Android 技术,设计含用户、剪纸文化等六大模块的平台。阐述研究背景意义、现状,明确开发环境与技术方案,规划进度,分析可行性,旨在为剪纸艺术数字化传承提供支持。

laodeng22567的博客 951
上一篇: Handler学习总结
下一篇: 详解公钥、私钥、数字证书的概念
startFromWeb
博客等级 码龄16年 23粉丝 32原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值