获得系统时间 并写道数据库

本文介绍了一种获取与数据库日期兼容的SQL Date的方法,通过使用Java的时间戳转换为SQL Date格式,去除不必要的秒和分,确保了与数据库中日期字段的兼容性。

作了好多,又忘了 写下来以后看

long completedTime = System.currentTimeMillis();
   java.sql.Date date=new java.sql.Date(completedTime);
  System.out.print(date);

获得sql.date与数据库日期兼容。省去了那些秒和分

你问的是: > **“怎么模拟写入数据,然后这些数据会自动写到数据库里面?”** 我们来一步步解释这个问题的含义,给出完整的解决方案。 --- ## ✅ 一、问题理解 你的需求可以拆解为: 1. **模拟生成一些测试数据**(比如用户信息、传感器记录等) 2. **自动插入到 SQLite 数据库中** 3. 插入是“自动”的 —— 可能是指定时、循环、或触发式写入 4. 目标:用于测试、压测、演示、开发调试等场景 --- ## ✅ 二、技术选型:使用 SQLite + C/C++ 或 Python 推荐使用 **Python** 实现最简单高效,其次是 C/C++。 下面以 **Python + sqlite3** 为例,完整展示如何: - 创建数据库表 - 模拟生成虚拟数据 - 自动批量写入数据库 --- ## ✅ 三、完整示例代码(Python) ```python import sqlite3 import random import time from datetime import datetime # === 1. 连接数据库(如果不存在会自动创建) conn = sqlite3.connect('sensor.db') cursor = conn.cursor() # === 2. 创建表(如果不存在) cursor.execute(''' CREATE TABLE IF NOT EXISTS tSensorData ( id INTEGER PRIMARY KEY AUTOINCREMENT, device_id TEXT, temperature REAL, humidity REAL, pressure REAL, timestamp INTEGER ) ''') # === 3. 模拟写入函数 def insert_simulated_data(): device_ids = ['DEV001', 'DEV002', 'DEV003'] # 生成一条模拟数据 data = { 'device_id': random.choice(device_ids), 'temperature': round(random.uniform(20.0, 35.0), 2), # 20~35°C 'humidity': round(random.uniform(30.0, 90.0), 2), # 30~90% 'pressure': round(random.uniform(980, 1030), 2), # hPa 'timestamp': int(time.time()) } # 插入数据库 cursor.execute(''' INSERT INTO tSensorData (device_id, temperature, humidity, pressure, timestamp) VALUES (?, ?, ?, ?, ?) ''', (data['device_id'], data['temperature'], data['humidity'], data['pressure'], data['timestamp'])) print(f"✅ 写入数据: {data}") conn.commit() # 提交事务,真正写入磁盘 return data # === 4. 自动循环写入(模拟持续写入) if __name__ == "__main__": try: print("🚀 开始模拟数据写入...") for i in range(10): # 写入 10 条测试数据 insert_simulated_data() time.sleep(1) # 每秒写一条(可调) except KeyboardInterrupt: print("\n⏹️ 用户中断") finally: conn.close() print("💾 数据库连接已关闭") ``` --- ## ✅ 四、代码说明 | 部分 | 功能 | |------|------| | `sqlite3.connect()` | 打开数据库文件,不存在则创建 | | `CREATE TABLE IF NOT EXISTS` | 确保表存在 | | `random.*` | 模拟生成随机数值 | | `time.time()` | 当前时间戳 | | `INSERT INTO ... VALUES` | 写入一行数据 | | `conn.commit()` | **关键!没有这句,数据不会真正写入磁盘!** | 📌 默认情况下,SQLite 在每次 `commit()` 后将数据写入操作系统缓存,随后由 OS 刷入磁盘。 你可以加 `synchronous=FULL` `journal_mode=WAL` 提高可靠性: ```python cursor.execute("PRAGMA synchronous = FULL;") cursor.execute("PRAGMA journal_mode = WAL;") ``` --- ## ✅ 五、进阶:让写入更“自动化” ### 🔹 方案 1:定时任务(每分钟写一次) ```python import schedule def job(): insert_simulated_data() schedule.every(1).minutes.do(job) while True: schedule.run_pending() time.sleep(1) ``` 需要安装:`pip install schedule` --- ### 🔹 方案 2:条件触发写入(如达到 100 条才批量提交) ```python buffer = [] def buffered_insert(data): buffer.append(data) if len(buffer) >= 100: cursor.executemany(''' INSERT INTO tSensorData (device_id, temperature, humidity, pressure, timestamp) VALUES (?, ?, ?, ?, ?) ''', buffer) conn.commit() print(f"📦 批量写入 {len(buffer)} 条数据") buffer.clear() ``` --- ### 🔹 方案 3:开机自启 / 后台运行 Linux 下可以用 `systemd` 或 `nohup` 让脚本后台运行: ```bash nohup python3 simulate.py & ``` --- ## ✅ 六、C/C++ 版本简略示例(供参考) ```c #include <sqlite3.h> #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { sqlite3 *db; char sql[512]; srand(time(NULL)); sqlite3_open("sensor.db", &db); // 建表 sqlite3_exec(db, "CREATE TABLE IF NOT EXISTS tSensorData(" "id INTEGER PRIMARY KEY AUTOINCREMENT," "temp REAL, humi REAL, ts INTEGER);", 0,0,0); // 模拟写入 5 次 for (int i = 0; i < 5; i++) { float temp = 20.0 + (rand() % 15) + (rand() / (float)RAND_MAX); float humi = 30.0 + (rand() % 60); int ts = time(NULL); sprintf(sql, "INSERT INTO tSensorData(temp,humi,ts) VALUES (%.2f,%.2f,%d);", temp, humi, ts); sqlite3_exec(db, sql, 0, 0, 0); printf("写入: temp=%.2f, humi=%.2f\n", temp, humi); sleep(1); } sqlite3_close(db); return 0; } ``` 编译命令: ```bash gcc -o simulate simulate.c -lsqlite3 ``` --- ## ✅ 七、验证数据是否真的写入? ### 方法 1:用 SQLite 命令行查看 ```bash sqlite3 sensor.db "SELECT * FROM tSensorData;" ``` 输出示例: ``` 1|DEV001|25.34|67.89|1712345678 2|DEV002|28.12|54.32|1712345679 ... ``` ### 方法 2:用 `.dump` 查看全部内容 ```bash sqlite3 sensor.db ".dump" ``` --- ## ✅ 八、常见问题与优化建议 | 问题 | 解决方案 | |------|----------| | 数据没写入? | 忘了 `commit()`!必须调用 | | 写得太慢? | 使用 `BEGIN TRANSACTION; ... COMMIT;` 包裹多条插入 | | 多线程冲突? | 设置 `check_same_thread=False` 或加锁 | | 文件权限错误? | 检查路径是否有写权限 | 📌 提高性能技巧: ```python conn.execute("BEGIN TRANSACTION;") for i in range(1000): conn.execute("INSERT INTO ...") conn.execute("COMMIT;") ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值