首页 > 其他分享 >打卡21

打卡21

时间:2024-06-19 17:32:20浏览次数:13  
标签:检索 21 void private public DatabaseChecker 打卡 数据库

所花时间(包括上课):

 2h

代码量(行):

 150左右

搏客量(篇):

 1

了解到的知识点:

安卓

备注(其他):

 

今天进行整合时,发现安卓端的自动检索数据库进行弹窗的功能还没没有进行解决

以下是在网上找到的思路

创建一个名为DatabaseChecker的线程,在其中实现与MySQL数据库的连接、执行检索代码、比较数据变化、推送通知窗口等功能。在该线程的run()方法中,将会不断执行定时检索代码。

public class DatabaseChecker extends Thread {
    private Context context;
    private boolean running = false;
    private Timer timer;

    public DatabaseChecker(Context context) {
        this.context = context.getApplicationContext();
    }

    public synchronized void startChecking() {
        if (!running) {
            running = true;
            timer = new Timer();
            timer.schedule(new MyTimerTask(), 0, 10000);
        }
    }

    @Override
    public synchronized void run() {
        while (running) {
            // 执行数据库检索代码
            checkDataUpdate();
            try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    public synchronized void stopChecking() {
        if (running) {
            running = false;
            timer.cancel();
        }
    }

    private class MyTimerTask extends TimerTask {
        @Override
        public void run() {
            // 执行数据库检索代码
            checkDataUpdate();
        }
    }

    private void checkDataUpdate() {
        // 执行MySQL查询代码
        ResultSet newResult = queryDataFromMysql();
        if (newResult == null) {
            return;
        }
        if (oldResult == null) {
            oldResult = newResult;
            return;
        }
        try {
            if (!oldResult.next() && !newResult.next()) {
                return;
            }
            if (oldResult.next() != newResult.next()) {
                // 数据库数据发生变化,推送弹窗
                NotificationCompat.Builder builder =
                        new NotificationCompat.Builder(context, "channel_id")
                                .setSmallIcon(R.drawable.ic_notification)
                                .setContentTitle("数据更新提示")
                                .setContentText("数据库中的数据已更新")
                                .setPriority(NotificationCompat.PRIORITY_DEFAULT);

                NotificationManagerCompat notificationManager =
                        NotificationManagerCompat.from(context);

                // notificationId是应用程序中的通知唯一标识符
                notificationManager.notify(notificationId, builder.build());
            }
            oldResult = newResult;
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

DatabaseChecker类中,queryDataFromMysql()方法的实现可以参考下面的步骤。

  1. 在主界面中启动检索线程

在 MainActivity 的 onCreate() 方法中启动 DatabaseChecker线程,如下所示:

public class MainActivity extends AppCompatActivity {
    private DatabaseChecker databaseChecker;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        databaseChecker = new DatabaseChecker(this);
        databaseChecker.startChecking();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        databaseChecker.stopChecking();
    }
}
  1. 解析数据库检索结果

checkDataUpdate()方法中对检索结果进行解析,将当前和上一次的结果进行比较。在第一次检索时,可以将oldResult字段设为null,以便在后续的检索中不会将第一条记录误判成更新数据。

private ResultSet oldResult;

private ResultSet queryDataFromMysql() {
    ResultSet result = null;
    try {
        Class.forName("com.mysql.jdbc.Driver");
        Connection connection = DriverManager.getConnection(
                "jdbc:mysql://MySQL服务器名称:端口号/数据库名称",
                "数据库用户名", "数据库密码");
        String sql = "select * from 数据表名称";
        Statement statement = connection.createStatement();
        result = statement.executeQuery(sql);
        statement.close();
        connection.close();
    } catch (ClassNotFoundException | SQLException e) {
        e.printStackTrace();
        Toast.makeText(getApplicationContext(), "连接数据库失败", Toast.LENGTH_SHORT).show();
    }
    return result;

标签:检索,21,void,private,public,DatabaseChecker,打卡,数据库
From: https://www.cnblogs.com/pinganxile/p/18256773

相关文章

  • 打卡18
    所花时间(包括上课): 2h代码量(行): 150左右搏客量(篇): 1了解到的知识点:安卓备注(其他): packagecom.example.app_02;importandroidx.appcompat.app.AppCompatActivity;importandroid.annotation.SuppressLint;importandroid.content.Con......
  • 打卡20
    所花时间(包括上课): 2h代码量(行): 150左右搏客量(篇): 1了解到的知识点:安卓备注(其他): packagecom.example.app_02;importandroid.annotation.SuppressLint;importandroid.content.Context;importandroid.content.DialogInterface;impo......
  • 2024/4/21
     所学时间:2小时代码行数:127行博客园数:1篇所学知识:编写web作业,完成了大致页面。<%@pageimport="java.util.*"%><%@pageimport="java.text.*"%><%@pagesession="true"%><%@pagelanguage="java"%><%@pagecon......
  • 打卡19
    所花时间(包括上课): 2h代码量(行): 150左右搏客量(篇): 1了解到的知识点:安卓备注(其他): packagecom.example.app_02;importandroid.annotation.SuppressLint;importandroid.app.DatePickerDialog;importandroid.content.Context;import......
  • 打卡11
    所花时间(包括上课): 2h代码量(行): 100左右搏客量(篇): 1了解到的知识点: mybits备注(其他):  packagecom.leap.jixianceshiboot.service.impl;importcom.github.pagehelper.Page;importcom.github.pagehelper.PageHelper;importcom.le......
  • 打卡12
    所花时间(包括上课): 2h代码量(行): 150左右搏客量(篇): 1了解到的知识点:springboot备注(其他): packagecom.leap.jixianceshiboot.controller;importcom.leap.jixianceshiboot.entity.Policy;importcom.leap.jixianceshiboot.entity.Poli......
  • 打卡13
    所花时间(包括上课): 2h代码量(行): 100左右搏客量(篇): 1了解到的知识点:vue备注(其他): <scriptsetup>import{ref}from'vue'import{getPolicyService}from"@/api/getPolicy.js";import{ElMessage}from"element-plus&quo......
  • 打卡信奥刷题(112)用Scratch图形化工具信奥P6181 [普及组][USACO10OPEN] Mountain Watch
    [USACO10OPEN]MountainWatchingS题目描述一天,Bessie望着远处的山脉,在思考:“哪一座山最宽呢?”Bessie设法测量了NNN个位置的高度......
  • CSP历年复赛题-P7911 [CSP-J 2021] 网络连接
    原题链接:https://www.luogu.com.cn/problem/P7911题意解读:服务器server建立连接,客户端client加入连接,建立和加入连接都要指定一个ip地址,对已经建立过连接的ip地址再次建立连接会失败,加入连接没有限制,根据要求进行输出。解题思路:此题有两个关键点:1、验证IP地址的格式是符合规范......
  • Lightroom Classic for mac/win (Lrc2021) 10.3中文直装版
    LightroomClassic是Adobe公司开发的一款专业的照片处理和管理软件,旨在帮助摄影师对其作品进行全方位的后期处理,包括调整画面的明暗、色彩、对比度等,以及进行修图、拼接和摄影作品的管理整理等功能。它是摄影师和摄影爱好者常用的后期处理软件之一,可以在室内外的各种场景中进行......