安卓中数据库增删改查的方法

2024-01-12 15:18

本文主要是介绍安卓中数据库增删改查的方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


第一步:在xml布局中编辑

<LinearLayout 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:orientation="vertical"

    tools:context=".MainActivity" >

   <EditText 

       android:id="@+id/et_name"

       android:layout_width="match_parent"

       android:layout_height="wrap_content"

       android:hint="请输入联系人的姓名"/>

   <EditText 

       android:layout_height="wrap_content"

       android:layout_width="match_parent"

       android:id="@+id/et_phone"

       android:hint="请输入联系人的电话"

       android:inputType="phone"/>

   <Button 

       android:layout_width="fill_parent"

       android:layout_height="wrap_content"

       android:text="添加"

      android:onClick="add"/>

   <Button 

       android:layout_width="match_parent"

       android:layout_height="wrap_content"

       android:text="删除"

       android:onClick="delete"/>

   <Button 

       android:layout_width="fill_parent"

       android:layout_height="wrap_content"

       android:text="修改"

       android:onClick="update"/>

   <Button 

       android:layout_width="fill_parent"

       android:layout_height="wrap_content"

       android:text="查询"

       android:onClick="query"/>

</LinearLayout>

第二步:建立一个数据库的帮助类

/**

 * 数据库创建的帮助类 类似File

 * @author Administrator

 *

 */

public class MyDBOpenHelper extends SQLiteOpenHelper {

/**

 * @param context 上下文

 * @param version

 */

public MyDBOpenHelper(Context context) {

//第二个参数数据库的名称

//第三个参数null代表的是默认的游标工厂

//第四个参数 是数据库的版本号  数据库只能升级,不能降级,版本号只能变大不能变小

super(context, "saiermeng.db", null, 2);

}

//Called when the database is created for the first time.

//当数据库第一次被创建的时候调用的方法,适合在这个方法里面把数据库的表结构定义出来.

@Override

public void onCreate(SQLiteDatabase db) {

System.out.println("oncreate 数据库被创建了. 哈哈哈哈,嘎嘎嘎------------");

//执行sql语句

db.execSQL("create table contactinfo (id integer primary key autoincrement, name varchar(20), phone varchar(20))");

}

//Called when the database needs to be upgraded.

//当数据库更新的时候调用的方法

@Override

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

System.out.println("onUpgrade 数据库被更新了. oldVersion:"+oldVersion+"--------newVersion:"+newVersion+"----");

db.execSQL("alter table contactinfo add account varchar(20)");

}

}

第三步:另建一个包,创建一个联系人信息的类

/**

 * 联系人数据库表的访问类

 */

public class ContactInfoDao {

/**

 * 数据库打开的帮助类

 */

private MyDBOpenHelper helper;

/**

 * 在构造方法里面完成 必须要用的类的初始化

 * @param context

 */

public ContactInfoDao(Context context) {

helper = new MyDBOpenHelper(context);

}

 

/**

 * 添加一条记录

 * @param name 联系人姓名

 * @param phone 联系人电话

 * @return 返回的是添加后在数据库的行号  -1代表添加失败

 */

public long add(String name, String phone){

SQLiteDatabase db = helper.getWritableDatabase();

//db.execSQL("insert into contactinfo (name,phone) values (?,?)", new Object[]{name,phone});

ContentValues values = new ContentValues();

values.put("name", name);

values.put("phone", phone);

//内部是组拼sql语句实现的.

long rowid = db.insert("contactinfo", null, values);

//记得释放数据库资源

db.close();

return rowid;

}

/**

 * 根据姓名删除一条记录

 * @param name 要删除的联系人的姓名

 * @return 返回0代表的是没有删除任何的记录 返回整数int值代表删除了几条数据

 */

public int delete(String name){

//判断这个数据是否存在.

SQLiteDatabase db = helper.getWritableDatabase();

//db.execSQL("delete from contactinfo where name=?", new Object[]{name});

int rowcount = db.delete("contactinfo", "name=?", new String[]{name});

db.close();

//再从数据库里面查询一遍,name是否还在

return rowcount;

}

/**

 * 修改联系人电话号码

 * @param newphone 新的电话号码

 * @param name 要修改的联系人姓名

 * @return 0代表一行也没有更新成功, >0 整数代表的是更新了多少行记录

 */

public int update(String newphone , String name){

SQLiteDatabase db = helper.getWritableDatabase();

//db.execSQL("update contactinfo set phone =? where name=?", new Object[]{newphone,name});

ContentValues values = new ContentValues();

values.put("phone", newphone);

int rowcount =  db.update("contactinfo", values, "name=?", new String[]{name});

db.close();

return rowcount;

}

/**

 * 查询联系人的电话号码

 * @param name 要查询的联系人

 * @return 电话号码

 */

public String getPhoneNumber(String name){

String phone = null;

SQLiteDatabase db = helper.getReadableDatabase();

//Cursor  cursor = db.rawQuery("select phone from contactinfo where name=?", new String[]{name});

Cursor  cursor =  db.query("contactinfo", new String[]{"phone"}, "name=?", new String[]{name}, null, null, null);

if(cursor.moveToNext()){//如果光标可以移动到下一位,代表就是查询到了数据

phone = cursor.getString(0);

}

cursor.close();//关闭掉游标,释放资源

db.close();//关闭数据库,释放资源

return phone;

}

}

第四步:在MainActivity.java中编辑逻辑

public class MainActivity extends Activity {

private EditText et_name;

private EditText et_phone;

private ContactInfoDao dao;

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

et_name = (EditText) findViewById(R.id.et_name);

et_phone = (EditText) findViewById(R.id.et_phone);

dao = new ContactInfoDao(this);

}

 

/**

 * 添加一条联系人的信息

 *

 * @param view

 */

public void add(View view) {

String name = et_name.getText().toString().trim();

String phone = et_phone.getText().toString().trim();

if (TextUtils.isEmpty(name) || TextUtils.isEmpty(phone)) {

Toast.makeText(this, "不能为空", 0).show();

return;

} else {

long id = dao.add(name, phone);

if (id == -1) {

Toast.makeText(this, "添加失败", 0).show();

} else {

Toast.makeText(this, "添加成功,在数据库的第:"+id+"", 0).show();

}

}

}

 

/**

 * 删除一条记录

 *

 * @param view

 */

public void delete(View view) {

String name = et_name.getText().toString().trim();

if (TextUtils.isEmpty(name)) {

Toast.makeText(this, "姓名不能为空", 0).show();

return;

} else {

int count = dao.delete(name);

if(count==0){

Toast.makeText(this, "删除失败,没有记录", 0).show();

}else{

Toast.makeText(this, "删除成功,删除了"+count+"条记录", 0).show();

}

}

}

 

/**

 * 修改联系人的号码

 *

 * @param view

 */

public void update(View view) {

String name = et_name.getText().toString().trim();

String phone = et_phone.getText().toString().trim();

if (TextUtils.isEmpty(name) || TextUtils.isEmpty(phone)) {

Toast.makeText(this, "不能为空", 0).show();

return;

} else {

int count = dao.update(phone, name);

if(count==0){

Toast.makeText(this, "更新失败,没有记录", 0).show();

}else{

Toast.makeText(this, "更新成功,更新了"+count+"条记录", 0).show();

}

}

}

 

/**

 * 查询

 *

 * @param view

 */

public void query(View view) {

String name = et_name.getText().toString().trim();

if (TextUtils.isEmpty(name)) {

Toast.makeText(this, "姓名不能为空", 0).show();

return;

} else {

String result = dao.getPhoneNumber(name);

Toast.makeText(this, "号码:" + result, 0).show();

}

}

}

 

第一种:这四种方法都是通过SQL语句实现的

import android.content.Context;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

 

import com.saiermeng.createdb.MyDBOpenHelper;

 

/**

 * 联系人数据库表的访问类

 */

public class ContactInfoDao {

/**

 * 数据库打开的帮助类

 */

private MyDBOpenHelper helper;

/**

 * 在构造方法里面完成 必须要用的类的初始化

 * @param context

 */

public ContactInfoDao(Context context) {

helper = new MyDBOpenHelper(context);

}

 

/**

 * 添加一条记录

 * @param name 联系人姓名

 * @param phone 联系人电话

 */

public void add(String name, String phone){

SQLiteDatabase db = helper.getWritableDatabase();

db.execSQL("insert into contactinfo (name,phone) values (?,?)", new Object[]{name,phone});

//记得释放数据库资源

db.close();

}

/**

 * 根据姓名删除一条记录

 * @param name 要删除的联系人的姓名

 */

public void delete(String name){

//判断这个数据是否存在.

SQLiteDatabase db = helper.getWritableDatabase();

db.execSQL("delete from contactinfo where name=?", new Object[]{name});

db.close();

//再从数据库里面查询一遍,name是否还在

}

/**

 * 修改联系人电话号码

 * @param newphone 新的电话号码

 * @param name 要修改的联系人姓名

 */

public void update(String newphone , String name){

SQLiteDatabase db = helper.getWritableDatabase();

db.execSQL("update contactinfo set phone =? where name=?", new Object[]{newphone,name});

db.close();

}

/**

 * 查询联系人的电话号码

 * @param name 要查询的联系人

 * @return 电话号码

 */

public String getPhoneNumber(String name){

String phone = null;

SQLiteDatabase db = helper.getReadableDatabase();

Cursor  cursor = db.rawQuery("select phone from contactinfo where name=?", new String[]{name});

if(cursor.moveToNext()){//如果光标可以移动到下一位,代表就是查询到了数据

phone = cursor.getString(0);

}

cursor.close();//关闭掉游标,释放资源

db.close();//关闭数据库,释放资源

return phone;

}

}

 

第二种:通过安卓中封装好的方法

import android.content.ContentValues;

import android.content.Context;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

 

import com.saiermeng.createdb.MyDBOpenHelper;

 

/**

 * 联系人数据库表的访问类

 */

public class ContactInfoDao {

/**

 * 数据库打开的帮助类

 */

private MyDBOpenHelper helper;

/**

 * 在构造方法里面完成 必须要用的类的初始化

 * @param context

 */

public ContactInfoDao(Context context) {

helper = new MyDBOpenHelper(context);

}

 

/**

 * 添加一条记录

 * @param name 联系人姓名

 * @param phone 联系人电话

 * @return 返回的是添加后在数据库的行号  -1代表添加失败

 */

public long add(String name, String phone){

SQLiteDatabase db = helper.getWritableDatabase();

//db.execSQL("insert into contactinfo (name,phone) values (?,?)", new Object[]{name,phone});

ContentValues values = new ContentValues();

values.put("name", name);

values.put("phone", phone);

//内部是组拼sql语句实现的.

long rowid = db.insert("contactinfo", null, values);

//记得释放数据库资源

db.close();

return rowid;

}

/**

 * 根据姓名删除一条记录

 * @param name 要删除的联系人的姓名

 * @return 返回0代表的是没有删除任何的记录 返回整数int值代表删除了几条数据

 */

public int delete(String name){

//判断这个数据是否存在.

SQLiteDatabase db = helper.getWritableDatabase();

//db.execSQL("delete from contactinfo where name=?", new Object[]{name});

int rowcount = db.delete("contactinfo", "name=?", new String[]{name});

db.close();

//再从数据库里面查询一遍,name是否还在

return rowcount;

}

/**

 * 修改联系人电话号码

 * @param newphone 新的电话号码

 * @param name 要修改的联系人姓名

 * @return 0代表一行也没有更新成功, >0 整数代表的是更新了多少行记录

 */

public int update(String newphone , String name){

SQLiteDatabase db = helper.getWritableDatabase();

//db.execSQL("update contactinfo set phone =? where name=?", new Object[]{newphone,name});

ContentValues values = new ContentValues();

values.put("phone", newphone);

int rowcount =  db.update("contactinfo", values, "name=?", new String[]{name});

db.close();

return rowcount;

}

/**

 * 查询联系人的电话号码

 * @param name 要查询的联系人

 * @return 电话号码

 */

public String getPhoneNumber(String name){

String phone = null;

SQLiteDatabase db = helper.getReadableDatabase();

//Cursor  cursor = db.rawQuery("select phone from contactinfo where name=?", new String[]{name});

Cursor  cursor =  db.query("contactinfo", new String[]{"phone"}, "name=?", new String[]{name}, null, null, null);

if(cursor.moveToNext()){//如果光标可以移动到下一位,代表就是查询到了数据

phone = cursor.getString(0);

}

cursor.close();//关闭掉游标,释放资源

db.close();//关闭数据库,释放资源

return phone;

}

}

 


这篇关于安卓中数据库增删改查的方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/598276

相关文章

SQL server数据库如何下载和安装

《SQLserver数据库如何下载和安装》本文指导如何下载安装SQLServer2022评估版及SSMS工具,涵盖安装配置、连接字符串设置、C#连接数据库方法和安全注意事项,如混合验证、参数化查... 目录第一步:打开官网下载对应文件第二步:程序安装配置第三部:安装工具SQL Server Manageme

C#连接SQL server数据库命令的基本步骤

《C#连接SQLserver数据库命令的基本步骤》文章讲解了连接SQLServer数据库的步骤,包括引入命名空间、构建连接字符串、使用SqlConnection和SqlCommand执行SQL操作,... 目录建议配合使用:如何下载和安装SQL server数据库-CSDN博客1. 引入必要的命名空间2.

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

Java 方法重载Overload常见误区及注意事项

《Java方法重载Overload常见误区及注意事项》Java方法重载允许同一类中同名方法通过参数类型、数量、顺序差异实现功能扩展,提升代码灵活性,核心条件为参数列表不同,不涉及返回类型、访问修饰符... 目录Java 方法重载(Overload)详解一、方法重载的核心条件二、构成方法重载的具体情况三、不构

Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式

《Java通过驱动包(jar包)连接MySQL数据库的步骤总结及验证方式》本文详细介绍如何使用Java通过JDBC连接MySQL数据库,包括下载驱动、配置Eclipse环境、检测数据库连接等关键步骤,... 目录一、下载驱动包二、放jar包三、检测数据库连接JavaJava 如何使用 JDBC 连接 mys

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I

Qt使用QSqlDatabase连接MySQL实现增删改查功能

《Qt使用QSqlDatabase连接MySQL实现增删改查功能》这篇文章主要为大家详细介绍了Qt如何使用QSqlDatabase连接MySQL实现增删改查功能,文中的示例代码讲解详细,感兴趣的小伙伴... 目录一、创建数据表二、连接mysql数据库三、封装成一个完整的轻量级 ORM 风格类3.1 表结构

Python中反转字符串的常见方法小结

《Python中反转字符串的常见方法小结》在Python中,字符串对象没有内置的反转方法,然而,在实际开发中,我们经常会遇到需要反转字符串的场景,比如处理回文字符串、文本加密等,因此,掌握如何在Pyt... 目录python中反转字符串的方法技术背景实现步骤1. 使用切片2. 使用 reversed() 函

Python中将嵌套列表扁平化的多种实现方法

《Python中将嵌套列表扁平化的多种实现方法》在Python编程中,我们常常会遇到需要将嵌套列表(即列表中包含列表)转换为一个一维的扁平列表的需求,本文将给大家介绍了多种实现这一目标的方法,需要的朋... 目录python中将嵌套列表扁平化的方法技术背景实现步骤1. 使用嵌套列表推导式2. 使用itert

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核