SSH增加sqlserver数据库中datetime类型时间的值

本文介绍如何在SQLServer数据库中的DateTime类型与Java中的Timestamp类型之间进行转换的方法。包括了如何获取当前时间并将其推迟一定时间,以及如何将Timestamp类型的EndTime字段更新到数据库。

首先我的数据库中有EndTime字段,它在sqlserver中的类型是DateTIme类型

在类中,其类型为

private Timestamp EndTime;

然后再对应的xml中,其类型为

<property name="EndTime" type="timestamp">
	<column name="EndTime"></column>
</property>

在action中进行的代码为

<span style="white-space:pre">		</span>TestPaperIDList tpidl=testPaperIDListService.findbytestpaperid(testpaperid);
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置时间格式,注意HH与hh的区别,hh为12小时制,HH为24小时制,这里我们用HH
		long time=tpidl.getEndTime().getTime()+delaytime*60000;//每分钟60000毫秒,delaytime为推迟多少分钟
		String newtime=sdf.format(new Date(time));//将long类型的时间转化为string型,由于date不能直接转化为timestamp,所以要通过string类型来转换
		tpidl.setEndTime(Timestamp.valueOf(newtime));//将string类型转化为timestamp类型
		testPaperIDListService.update(tpidl);

这里需要注意的是sqlserver中的datetime类型对应java中的timestamp类型。
要将数据库中的数据读取到前端使用,需要一个完整的 **“后端 API + 前端请求” 流程**。以下是详细、可落地的解决方案。 --- ## ✅ 总体架构 ```text [MySQL 数据库] ↓ (SSH + pymysql 读取) [Flask 后端] → 提供 RESTful API 接口 ↓ (HTTP 请求 / fetch) [前端 HTML + JavaScript] → 获取并展示数据(如图表) ``` 我们将一步步实现这个流程。 --- ## 🔧 第一步:后端(Python Flask)从数据库读取数据并提供 API ### 文件:`app.py` ```python from flask import Flask, jsonify import paramiko from sshtunnel import SSHTunnelForwarder import pymysql import pandas as pd import warnings # 忽略加密警告 warnings.filterwarnings("ignore", category=paramiko.util.CryptographyDeprecationWarning) app = Flask(__name__) @app.route('/api/voltage-diff', methods=['GET']) def get_voltage_diff(): try: # SSH 隧道配置(请根据实际情况修改) with SSHTunnelForwarder( ('your_server_ip', 22), # 替换为你的服务器公网 IP ssh_username='root', ssh_pkey=r'C:\path\to\your\private_key.pem', # 私钥路径(Windows 注意反斜杠) remote_bind_address=('127.0.0.1', 3306) ) as tunnel: # 连接 MySQL conn = pymysql.connect( host='127.0.0.1', port=tunnel.local_bind_port, user='root', password='your_mysql_password', # MySQL 密码 database='batterysystem' # 数据库名 ) # 查询压差数据 query = """ SELECT create_at, pack_voltage_max, pack_voltage_min FROM Data_Grabber_v1 ORDER BY create_at ASC """ df = pd.read_sql(query, conn) conn.close() # 计算压差 = 最大电压 - 最小电压 df['voltage_diff'] = df['pack_voltage_max'] - df['pack_voltage_min'] # 转换时间为字符串格式(便于前端显示) df['create_at'] = pd.to_datetime(df['create_at']).dt.strftime('%Y-%m-%d %H:%M') # 构造返回数据:[[时间, 压差], ...] result = df[['create_at', 'voltage_diff']].values.tolist() return jsonify({ "success": True, "data": result, "count": len(result) }) except Exception as e: print(f"❌ 错误: {str(e)}") return jsonify({ "success": False, "message": str(e) }), 500 if __name__ == '__main__': print("🚀 启动 Flask 服务器 http://localhost:5000/api/voltage-diff") app.run(debug=True, port=5000) ``` > 📌 你需要替换: - `'your_server_ip'` - `'C:\path\to\your\private_key.pem'` - `'your_mysql_password'` - `'batterysystem'` 和表名 `Data_Grabber_v1` 启动命令: ```bash python app.py ``` ✅ 成功后访问:[http://localhost:5000/api/voltage-diff](http://localhost:5000/api/voltage-diff) 你应该看到 JSON 格式的数据。 --- ## 🖥️ 第二步:前端 HTML 页面请求数据并展示(例如用 Chart.js) ### 文件:`index.html` ```html <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8" /> <title>电池压差趋势图</title> <script src="https://cdn.jsdelivr.net/npm/chart.js"></script> <style> body { font-family: Arial, sans-serif; text-align: center; margin-top: 40px; } canvas { max-width: 800px; margin: 0 auto; } </style> </head> <body> <h2>📊 电池包最大-最小电压差趋势图</h2> <canvas id="voltageChart"></canvas> <script> // 初始化图表 const ctx = document.getElementById('voltageChart').getContext('2d'); let chart; async function loadVoltageData() { try { const response = await fetch('http://localhost:5000/api/voltage-diff'); const data = await response.json(); if (data.success && data.data.length > 0) { // 提取时间和压差 const labels = data.data.map(row => row[0]); // 时间 const values = data.data.map(row => row[1]); // 压差 // 创建或更新图表 if (chart) chart.destroy(); chart = new Chart(ctx, { type: 'line', data: { labels: labels, datasets: [{ label: '电压差 (V)', data: values, borderColor: 'rgba(75, 192, 192, 1)', backgroundColor: 'rgba(75, 192, 192, 0.2)', tension: 0.1, pointRadius: 2 }] }, options: { responsive: true, plugins: { legend: { display: true }, tooltip: { mode: 'index' } }, scales: { y: { beginAtZero: false } } } }); console.log(`✅ 加载成功,共 ${data.count} 条记录`); } else { alert('⚠️ 没有获取到有效数据:' + data.message); } } catch (error) { console.error('🚨 获取数据失败:', error); alert('无法连接到后端服务,请确认 Flask 已运行!'); } } // 页面加载完成后自动获取数据 window.onload = loadVoltageData; </script> </body> </html> ``` --- ## ▶️ 第三步:运行步骤(关键!) ### ✅ 步骤 1:启动后端服务(保持运行) 打开终端: ```bash python app.py ``` 你应看到: ``` 🚀 启动 Flask 服务器 http://localhost:5000/api/voltage-diff * Running on http://127.0.0.1:5000 ``` --- ### ✅ 步骤 2:用 HTTP 服务器启动前端(不能双击打开!) 在 `index.html` 所在目录打开新终端: ```bash python -m http.server 8000 ``` 然后浏览器访问: 👉 [http://localhost:8000](http://localhost:8000) ✅ 不要再双击 `index.html` 打开(会因 `file://` 协议导致跨域问题)! --- ## ✅ 最终效果 你现在应该能看到: - 一个漂亮的折线图 - X 轴是时间 - Y 轴是电压差(单位 V) - 数据来自远程 MySQL 数据库 --- ## 🔐 补充说明 | 问题 | 解决方案 | |------|----------| | CORS 跨域问题 | 使用 `fetch('http://localhost:5000')` 并通过 `http.server` 加载前端 | | SSH 连接失败 | 检查私钥权限、服务器防火墙是否开放 22 端口 | | 数据为空 | 检查 SQL 查询语句和表中是否有数据 | | 字段名错误 | 确认 `pack_voltage_max`, `pack_voltage_min` 是否存在 | --- ## ✅ 如何验证每一步? | 步骤 | 验证方式 | |------|----------| | 后端是否正常? | 浏览器访问 `http://localhost:5000/api/voltage-diff` 看是否返回 JSON | | 前端能否请求? | F12 → Network → 查看 `/api/voltage-diff` 请求状态码是否为 200 | | 图表是否渲染? | Console 是否报错?`chart` 对象是否创建成功? | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值