android实际项目中数据库的应用(增删改查)

Android(安卓)订餐APP(Sqlite数据库,完整的增删改查) Android(安卓)订餐APP(Sqlite数据库,完整的增删改查) 一.背景 首先说说项目的背景,基于地铁口鸡蛋饼的一个小项目,APP中固定设置的鸡蛋饼搭配,顾客也可以自己搭配 二.开发环境 AndroidStudio3.0.1 JDK1.8 语言:JAVA 数据存储:Sqlite 三.功能 注册、登录、管理员、普通用户 首页:鸡蛋饼食材搭配 订单:购买订单展示 ... 阅读详情
 

                //下面有详细的注释,

package com.ldci.db;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public  class  DBdao{
 private static final String DB_NAME="info.db";
 private static final String TB_NAME="email_tab";
                             //以下声明的是存放在数据库中列名
 static final String F_ID="_id";
 static final String F_FROMEMAIL="fromEmail";
 static final String F_PASSWORD="password";
    static final String F_TOEMAIL="toEmail";
  
 private SQLiteDatabase db;
 private DbHelper dbHelper;
 private Context context;
 
   public  DBdao(Context context){
    this.context=context;
   }
   public void open(){
    dbHelper=new DbHelper(context);
    db=dbHelper.getWritableDatabase();   //获得一个可写的数据库对象     ----这是创建数据库最常用的方法 
   }
   public void close(){
    db.close();
   }
         //插入
 public long addInfo(String from,String pass,String to){
    ContentValues initValues=new ContentValues();
    initValues.put(F_FROMEMAIL, from);
    initValues.put(F_PASSWORD,pass);
    initValues.put(F_TOEMAIL,to);
   return db.insert(TB_NAME, null, initValues); 
 }
      //删除一条数据(只删除选中的一行)    --是通过id来删除
   public long  delete(long rowId){
    return db.delete(TB_NAME, F_ID+"="+rowId,null);
   }
       //清空(删除所有行)
    public  long  deleteAll(){
     return db.delete(TB_NAME, null,null);
    
    }
       //更新       --是通过Id来执行更新操作
    public  long updata(long rowId,String from,String pass,String to ){
    ContentValues values=new ContentValues();
       values.put(F_FROMEMAIL, from);
       values.put(F_PASSWORD, pass);
       values.put(F_TOEMAIL, to);
     return db.update(TB_NAME, values, F_ID+"="+rowId, null);
 
    }
  /**
   * 查询记录
   * @return
   */
        //查询所有数据
  public Cursor getAll(){
   String  sql="select * from email_tab";
   return db.rawQuery(sql,null);            //将返回一个Cursor对象,Cursor对象包含查询到的所有数据
  }
     //查询一条数据 (通过Id)
  public Cursor getData(long rowId){
   return db.rawQuery("select * from email_tab where " + F_ID +"= " + rowId , null);
  }
                        //用while读出Cursor中所有内容
   public void readCursor(Cursor cursor){
      while(cursor.moveToNext()){                                                
       int rowId=cursor.getInt(cursor.getColumnIndex(F_ID));
       String  from=cursor.getString(cursor.getColumnIndex(F_FROMEMAIL));
       String pass=cursor.getString(cursor.getColumnIndex(F_PASSWORD));
       String to=cursor.getString(cursor.getColumnIndex(F_TOEMAIL));
       //Log.d("aa",rowId+from+pass+to);
       
      }
   
   }
 
  
             //1. 创建内部类,初始化数据库及数据表
 class DbHelper extends  SQLiteOpenHelper{

 public DbHelper(Context context) {
  super(context,DB_NAME, null,2);
 }
              
                   //  在数据库被创建时自动调用onCreate()方法      如果数据库文件已存在,则是不会调用onCreate()方法的
 @Override
 public void onCreate(SQLiteDatabase db) {           
  // TODO Auto-generated method stub                                 //此方法创建了一个数据库表
  String sql="create table  "+TB_NAME+
     "("
   +F_ID+" integer primary key AUTOINCREMENT,"
     +F_FROMEMAIL+" text,"
     +F_PASSWORD+" text,"
     +F_TOEMAIL+" text)";
     db.execSQL(sql);
  
 }

 @Override
 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
  db.execSQL("drop table if exists "+TB_NAME);
  onCreate(db); 
 } 
 }
}

 

package com.ldci.db;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;

import com.ldci.smsmessagedemo.R;

public class ShowInfoAct extends Activity implements OnItemClickListener {
 private TextView tvNull1;
 // 声明数据库访问对象
 private DBdao dao = null;
 private Cursor cursor = null;
 private long listId = 0;
 private SimpleCursorAdapter simpleCursorAdapter;
 ListView listView= null;
 

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);
  setContentView(R.layout.showinfo); // 首先加载的是含有ListView组件的布局文件
                          //先取得代表ListView控件的对象
  listView = (ListView) findViewById(R.id.list);
  dao = new DBdao(ShowInfoAct.this);
  dao.open();     //打开数据库
        readerListView();
 
//  if(listView.getCount()==0){
//   tvNull1=(TextView)findViewById(R.id.tvNull);
//    tvNull1.setText("NO  Data...........");
//  }

 // registerForContextMenu(list); // 为视图注册上下文菜单
 }
                       //用simpleCursorAdapter对象将cursor中的数据显示在ListView上
 private void readerListView() {
  cursor = dao.getAll();
  if(cursor.getCount()==0){                    //首先判断是在没有Cursor数据时,将会出现提示信息"No data...."
   tvNull1=(TextView)findViewById(R.id.tvNull);
    tvNull1.setText("NO  Data...........");
  }
  String [] key={dao.F_FROMEMAIL,dao.F_PASSWORD,dao.F_TOEMAIL};    //数据库的列名
  int[] values={R.id.tvFromemail,R.id.tvPassword,R.id.tvToemail};          //对应在数据库每一列中该显示的内容--都是XML中的TextView的Id
  simpleCursorAdapter = new SimpleCursorAdapter(ShowInfoAct.this,R.layout.showinfoself, cursor, key,values);
  listView.setAdapter(simpleCursorAdapter);
  listView.setOnItemClickListener(this);
 }
         //listView的点击事件   (position标识Item的位置)
 @Override
 public void onItemClick(AdapterView<?> parent, View view, int position,long id) {
  // TODO Auto-generated method stub
  cursor.moveToPosition(position);
  final String itemId = cursor.getString(cursor.getColumnIndex(dao.F_ID));
  final String from = cursor.getString(cursor.getColumnIndex(dao.F_FROMEMAIL));
  final String pass = cursor.getString(cursor.getColumnIndex(dao.F_PASSWORD));
  final String to = cursor.getString(cursor.getColumnIndex(dao.F_TOEMAIL));
//  Log.d("aa",itemId); 
//  Log.d("aa",from);
  String[] s = { "修改", "删除", "查看","清空"};
       
           //调用AlertDialog的内部类Builder类来创建AlertDialog对象,,,之后通过Builder类show()方法显示对话框
  new AlertDialog.Builder(ShowInfoAct.this).setItems(s,
    new DialogInterface.OnClickListener() {

     @Override
     public void onClick(DialogInterface dialog, int which) {
      // TODO Auto-generated method stub
      switch (which) {
      case 0:         //执行修改
                             Intent intent1 =new Intent(ShowInfoAct.this,UpdateEmailAct.class);
         Bundle bundle1=new Bundle();
         bundle1.putString("itemId",itemId);
         bundle1.putString("from", from);
         bundle1.putString("pass", pass);
         bundle1.putString("to", to);
         intent1.putExtras(bundle1);
         startActivity(intent1);
        
         break;
      case 1:    //删除
        dao.delete(Integer.parseInt(itemId)); // 数据库对象调用删除方法
         readerListView();
       break;
      case 2:   //查看
                                Intent  intent2=new Intent(ShowInfoAct.this,UpdateEmailAct.class);
                                Bundle bundle2=new Bundle();
                                bundle2.putString("itemId", itemId);
                                bundle2.putString("from",from);
                                bundle2.putString("pass", pass);
                                bundle2.putString("to",to);
                                intent2.putExtras(bundle2);
                               startActivity(intent2);
                               break;
      case 3:          //清空
        dao.deleteAll();
        readerListView();
        break;
        
       
      }

     }
    }).show();

 }

}

 

 

 

 

package com.ldci.db;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;

import com.ldci.smsmessagedemo.R;
import com.ldci.smsmessagedemo.StoreActivity;

public class UpdateEmailAct extends Activity {
    private Button butEmail2;
    private EditText editEmail,editPass,editTarget;
    public  static  String  emailStr,passStr,targetStr;
    public String fromStrPre,passPre,toStrPre;
    public static String fromStrPreStatic,passPreStatic,toStrPre2Static;
    private CheckBox cbSave;
    private  ProgressDialog myDialog=null;
    private DBdao dao;
    String id,from,pass,to;
   
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.valemail);
        init();
         dao=new DBdao(this);
    dao.open();  //打开一个数据库
        onClickBut();  
        changeCheck();             //将会调用checkBox的监听事件,将判断checkbooks是否改变
     
       
       Intent intent=getIntent();                  //接收到ShowInfoAct界面传来的数据
        Bundle bundle=intent.getExtras();
         id=bundle.getString("itemId");
         from=bundle.getString("from");
         pass=bundle.getString("pass");
         to=bundle.getString("to");
//         Log.d("aa", from);
         editEmail.setText(from);
         editPass.setText(pass);
         editTarget.setText(to);
         StoreActivity.getStoreActivity().addActivity(this); 
    }
    public void onResume(){
     super.onResume();
        cbSave.setChecked(true);
//        load();
         changeCheck();                    //将会调用checkBox的监听事件,将判断checkbox是否改变
    }
                //通过id取得代表控件的对象
    public void init(){
     editEmail=(EditText)findViewById(R.id.editEmail1);
     editPass=(EditText)findViewById(R.id.editPass1);
     editTarget=(EditText)findViewById(R.id.editTarget);
     butEmail2=(Button) findViewById(R.id.go);
     cbSave=(CheckBox)findViewById(R.id.checkBoxSave1);
     
    }
       public void onClickBut(){                //为"确定"按钮绑定监听事件
        butEmail2.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {  
     
      if(cbSave.isChecked()){     //被选中则是True
       save();
       Log.d("aa","cb is Checked.....");
         }   
     
           //显示Progress对话框
       myDialog=ProgressDialog.show(UpdateEmailAct.this, "正在验证信息", "请稍后........");
        //取得用户输入的信息
           emailStr=editEmail.getText().toString().trim();   //将用户输入的email转化为字符串并且去掉前后空格
        passStr=editPass.getText().toString().trim();     //取得密码
        targetStr=editTarget.getText().toString().trim();
         new Thread(){
       public void run(){
       try {
        Thread.sleep(2000);
        
       } catch (Exception e) {
        e.printStackTrace();
       }finally{
        //卸载所创建的myDialog对象
        myDialog.dismiss();
        Message msg=handler.obtainMessage();
        msg.arg1=1;
        handler.sendMessage(msg);
       }
       }
      }.start(); 
      }
          });
       }
    Handler handler=new Handler(){
 @Override
  public void handleMessage(Message msg) {
   // TODO Auto-generated method stub
   super.handleMessage(msg);
   
     Toast.makeText(UpdateEmailAct.this,"\n----Email----\n"+emailStr+"\n--- Password----\n"+passStr,Toast.LENGTH_LONG).show();
   Intent intent=UpdateEmailAct.this.getIntent();
   Bundle bundle=new Bundle();
   bundle.putString("email", emailStr);
   intent.putExtras(bundle);   
   Toast.makeText(UpdateEmailAct.this,"您的Email及password相匹配,开启了自动备份功能...",Toast.LENGTH_SHORT).show();
   UpdateEmailAct.this.setResult(RESULT_OK,intent );
   UpdateEmailAct.this.finish();
  }
    };  
      public void  changeCheck(){
       cbSave.setOnClickListener(new OnClickListener(){
   @Override
   public void onClick(View v) {       
   }
     });
       }
      
     
      public static String fileName="valContent";
      private int mode=Activity.MODE_PRIVATE;
      
      public void save(){            //保存数据
       SharedPreferences settings=getSharedPreferences(fileName,mode);
       SharedPreferences.Editor ed=settings.edit();
       ed.putString("fromEmail", editEmail.getText().toString().trim());
       ed.putString("password", editPass.getText().toString().trim());
       ed.putString("toEmail",editTarget.getText().toString().trim());
       ed.commit();                 //保存key-value对 
     
      }
      
       public void load(){             //读取数据
        SharedPreferences settings=getSharedPreferences(fileName, mode);
        fromStrPre=settings.getString("fromEmail","******@163.com");
        passPre=settings.getString("password","********");
        toStrPre=settings.getString("toEmail","****@126.com");
        fromStrPreStatic=fromStrPre;
        passPreStatic=passPre;
        toStrPre2Static=toStrPre;
        editEmail.setText(fromStrPre);         //将得到的值放到EditText中 ,显示出来
        editPass.setText(passPre);
        editTarget.setText(toStrPre);  
       }
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // TODO Auto-generated method stub
  menu.add(1,1,1,"收藏").setIcon(R.drawable.save);
 
  return super.onCreateOptionsMenu(menu);
 }
 @Override
 public boolean onOptionsItemSelected(MenuItem item) {
  // TODO Auto-generated method stub
  switch(item.getItemId()){
  case 1:
      emailStr=editEmail.getText().toString().trim();   //将用户输入的email转化为字符串并且去掉前后空格
      passStr=editPass.getText().toString().trim();     //取得密码
      targetStr=editTarget.getText().toString().trim();  
     
      Long count=dao.updata(Integer.parseInt(id), emailStr, passStr, targetStr);    //调用dao中的更新操作
     if(count>0){
    Intent intent=new Intent(UpdateEmailAct.this,ShowInfoAct.class);
    startActivity(intent);
     Toast.makeText(this,"保存成功", Toast.LENGTH_LONG).show();
    }else{
     Toast.makeText(this,"保存失败", Toast.LENGTH_LONG).show();
    }
    
     
//      dao.updata(id, editEmail.getText().toString(), editPass.getText().toString(), editTarget.getText().toString());
//    Long  id=dao.addInfo("FromEmail:"+emailStr, "Password:"+passStr, "ToEmail:"+targetStr);
//    if(id>0){
//     Toast.makeText(this,"保存成功", Toast.LENGTH_LONG).show();
//    }else{
//     Toast.makeText(this,"保存失败", Toast.LENGTH_LONG).show();
//    }
// Intent intent=new Intent(this,ShowInfoAct.class);
//    startActivity(intent);
    dao.close();     //关闭数据库对象
       this.finish();           //关闭当前的Act
   
    break;
  
  }
  return super.onOptionsItemSelected(item);
 }
      
  
  
}
      

 

SQLite项目实战集合:Android数据库开发全解析 SQLite是一个轻量级的嵌入式关系数据库管理系统,其核心代码实现了自包含、无服务器、零配置的SQL数据库引擎。由于其体积小、无需单独的服务器进程、易于维护等特点,它广泛用于移动设备、嵌入式系统以及桌面应用中。SQLite数据库存储在单一的磁盘文件中,使得数据管理变得非常简单。视图(View)是虚拟表,由查询结果组成。它们提供了一种便捷的方式来聚合、过滤和展示数据。视图可以简化复杂的SQL操作,并且能够提供数据的安全性,只向用户展示特定的数据部分。在该例子中,view_name是视图的名字, 阅读详情

相关推荐

Android平台个人财务管理应用开发实战

本章将介绍Android记账本应用的开发背景与目标,涵盖课程设计的整体架构、功能模块划分、开发工具与技术选型,帮助读者建立对项目整体结构的初步理解,为后续深入学习打下基础。随着移动互联网的快速发展,个人财务管理逐渐成为用户日常需求的重要部分。Android平台作为全球使用最广泛的移动操作系统,具备良好的生态支持与开发灵活性,是实现记账类应用的理想选择。本课程将围绕一个完整的记账本项目展开,涵盖从环境搭建、UI设计、数据存储到核心功能实现的全流程开发过程。

weixin_33308579的博客 377

Android 数据库增删改查

页面布局 代码 2、MainActivity.java 通过点击不同的按钮,进行不同的增删改查操作 3、UserDao.java 包含对数据库的增删改查方法 4、User.java 实体类对应着user表中的字段 5、SQLiteOpenHelper.java 创建表,更新表方法

qq_52108058的博客 1万+

Android简单数据库操作增删改查项目实现

Android简单数据库操作增删改查项目实现

Android项目:SQLite编程之数据库的增删改查操作(基础篇)

实现功能: 1. 创建一个SQLiteOpenHelper子类 (1)实现数据库创建功能; (2)实现升级管理功能; 2. 实现数据库的增删改查操作 (1)上方控件中输入数值,点击添加,则将数据存入数据库中,同时下方的ListView添加一行; (2)点击下方的一行,则该行内容显示到上方的的控件中,修改其内容,然后点击修改按钮,则更新数据库和ListView; (3)先用(2)中操作选择一行,然后点击删除按钮,则从数据库和界面中删除选中的数据; (4)上方输入年龄值,点击查询按钮,则将大于等

Erer__的博客 6785

Android开发小程序:A、B应用实现数据库的增删改查并显示

A应用建立数据库,B应用通过列表展示内容,实现添加删除并能实时监听数据库的改变。

这是一个简单的Android小程序,实现增删改查

这是一个简单的Android小程序,实现增删改查

Android开发实现增删改查

创建数据库并写入方法 package com.example.sql; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import androidx.annot

xx080的博客 5056

android 实现简单的增删改查 适合初学者

android 实现简单的增删改查 适合初学者

android:数据库的增删改查

数据库学的真的很让人烦躁,一边看视频一边写代码,还有好多代码是什么意思我都不知到。这篇文章是对Android自带的数据库的操作,有数据的增加,删除,修改,查询的操作。学习数据库真的很枯燥,他没有之前android控件学的让人开心。写完这篇文章肯定不意味着结束学习,它大概意味着新的领域新的挑战。希望我写的这些东西能帮到更多人。新建一个包base----------在这个包下面新建一个类UserDBHelper.java。新建一个包entity---------在这个包下面新建一个类User。

Rssqzqyp的博客 2014

android连接本地mysql数据库实现增删查改-毕业设计项目

安卓模拟器连接本地MySQL数据库,实现资源增删查改功能,附数据库,完全可用

Android入门小项目(增删查改操作)

Android入门小项目(简单的增删查改),界面不要介意,这是给刚入门参考的,里面没有做自定义控件,后台是SSM简单搭建的,包含有数据库,开发工具为Android studio与eclipse

Android 数据库 Realm 使用教程讲解指南(一)

关于数据库,几乎是项目必备。还记得从最初的MySQL到GreenDao,从SQL语句到对对象映射。讲真的,数据库对客户端来说属于隐形的一大块,数据库技术很深,但是如果只是简单的增删改查的话还好。 之前一直用的是Greendao,增删改查以及版本更新。也没有什么太大的问题,如果有的话,几乎在网上都能找到,如果找不到那就是自己代码的问题。 现在接手的新项目中,使用的Realm数据...

Super 含 的博客 1864

CANoe实战:LIN Slave一致性测试全流程解析

本文详细解析了使用CANoe进行LIN Slave一致性测试的全流程,包括测试概述、环境搭建、模块集成、测试用例详解及报告分析。通过实际案例分享,帮助工程师掌握LIN 2.0/2.1/2.2、SAE J2602和ISO 17987等标准的自动化测试方法,提升汽车电子从节点的可靠性和兼容性验证效率。

weixin_42665725的博客 532

Android数据库框架greenDao学习笔记(三)----应用

引言   前面两篇文章,介绍了greenDao的集成方法与基本注解,具备了基本的基础知识,就可以开始进行实践了,本篇博客介绍,我是如何在项目中使用greenDao进行数据存储的,高手勿喷。

不悔的青春 1353

5G核心网NAS消息解析:从协议字段到实际抓包分析(附Wireshark示例)

本文深入解析5G核心网NAS消息的实战分析方法,从协议字段解读到实际Wireshark抓包诊断。通过详解扩展协议鉴别器、安全头类型、流程事务标识等核心字段,并结合注册流程故障排查实例,指导工程师快速定位NAS层问题,提升5G网络调试与协议分析效率。

grass的博客 532

数据清洗(Data Cleansing)

数据清洗(Data Cleansing)是指对数据进行处理和纠错,以去除或修复数据集中存在的错误、不致、不完整和冗余的数据,从而使数据更加准确、可靠和有用。数据清洗是数据处理和数据分析中一个非常重要的步骤,它可以帮助我们提高数据的质量,从而提高数据分析和机器学习的准确性和可靠性。数据清洗是一个重要的过程,它可以帮助我们提高数据的质量,从而提高数据分析和机器学习的准确性和可靠性。在实际应用中,我们可以使用一些工具和技术来实现数据清洗,例如 Pandas、NumPy 和 OpenRefine 等。通过数据清洗,

meimei169500的博客 1万+

Android数据库操作--实用的东西

Android采用关系型数据库SQLite3,它是一个支持SQL轻量级的嵌入式数据库,在嵌入式操作系统上有很广泛的应用,WM采用的也是SQLite3         关于过于、原理方面的东西在这篇文章里不会提到,但是如果你想能够快速的学会操作SQLite3,那这就是你要找的文章!         首先,我们看一下api,所有数据库相关的接口、类都在android.databas

chaozhung的专栏 932

robomimic实验复现全流程:从数据集下载到训练视频生成

本文详细介绍了机器人模仿学习项目RoboMimic的完整实验复现流程。内容涵盖从使用Conda创建Python 3.8隔离环境、安装RoboSuite仿真器和MuJoCo物理引擎,到下载并探索数据集、配置与启动模型训练,最后进行模型评估和生成策略执行视频。该指南旨在帮助研究者和开发者高效搭建实战环境,规避常见问题,快速验证算法或应用于实际场景。

weixin_29089057的博客 517

Android 数据库 LiteOrm 的使用

1、什么是 LiteOrm       LiteOrm是一个小巧、强大、比系统自带数据库操作性能快1倍的 android ORM 框架类库,开发者一行代码实现数据库的增删改查操作,以及实体关系的持久化和自动映射。   2、github地址       https://github.com/litesuits/android-lite-orm   3、使用      下载最新的jar 包,然后导入到...

weixin_33980459的博客 179

STC8H单片机ADC实战:从读取电位器到串口绘图,12位精度玩起来

本文详细介绍了STC8H单片机的ADC功能实战应用,从读取电位器到串口绘图,展示了12位精度的实现方法。通过硬件连接、代码配置、串口数据传输及高级优化技巧,帮助开发者快速掌握ADC模块的使用,适用于各种传感器数据采集和信号处理场景。

weixin_28278377的博客 343

28.Anaconda安装jupyter notebook、jupyterlab及体验

手贱,不小心将Anaconda自带得jupyter给卸载了,没法子了查了好多资料都比较麻烦,所以自己摸索着重新安装,记录一下心得。说明:Anaconda没有加入环境变量,Anaconda官方建议不要将Anaconda加入环境变量,这就意味着他和python是可以共存的。

迷逝 5025

Android Studio SQLite 数据库 增删改查 简单

效果展示 思路     一个class用来创建数据库,建表,一个activity用来执行增删改查操作 代码 DatebaseHlper import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; public class DatabaseHelper ext

LiN 2万+

本地通知与健康数据的隐私保护方案

随着移动健康(mHealth)应用的普及,本地通知与健康数据的结合为用户提供了更加个性化的健康管理体验。然而,这种便利性也带来了严峻的隐私保护挑战。本文旨在探讨如何在移动应用中实现本地通知功能的同时,确保用户健康数据的隐私安全。本地通知与健康数据结合的技术架构隐私保护的核心技术方案具体算法实现与数学模型实际应用案例分析本文首先介绍背景知识和核心概念,然后深入探讨隐私保护的技术方案,包括算法原理和数学模型。接着提供实际代码实现和应用场景分析,最后讨论未来发展趋势和挑战。

移动开发前沿的博客 1308

Android--SQLite数据库实现增删改查

SQLite–轻量级数据库 一般常见于安卓客户端。用于存储一些重要数据,因其操作容易、使用简单的好处博得一大批迷妹。今天就来说一说sqlite一些简单的使用方法。 一步一步开始做吧,我先创建个项目,主要是使用sqlite的代码。 首先,我需要在项目初次运行时创建数据库并新建一张user表,用来存储username和password两个字段; ...

小口口的博客 3万+

k8s上分离集群seatunnel部署(生产推荐)

k8s上分离集群seatunnel部署(生产推荐)

寂夜了无痕的博客 883

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

上一篇: 在java中发送Email自我总结
下一篇: Service BroadcastReceiver备份短信的应用
AndroidDevWjm
博客等级 码龄15年 6粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值