|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
|
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <sqlite3.h>
int database_init();
int write_motor_info_to_database(sqlite3 *db, int motor_id, double target_pos, double real_pos, double real_speed, double real_current);
int write_camera_info_to_database(sqlite3 *db, char action, int x, int y, int z, int vx, int vy, int vz, int time);
long long get_current_timestamp_ms(void);
int main(void)
{
printf("sqlite3 database test!\n");
database_init();
return 0;
}
/**
* @brief 数据库初始化
* @param NONE
* @retval 成功返回0, 失败返回-1
*/
int database_init(void)
{
int ret = -1;
sqlite3 *db;
char *err_msg = NULL;
char database_name[128] = {0};
//获取当前时间
struct tm t;
time_t now;
time(&now);
localtime_s(&t, &now);
snprintf(database_name, sizeof(database_name),"%02d%02d%02d.db", t.tm_year + 1900, t.tm_mon + 1, t.tm_mday);
printf("date:%s\n", database_name);
//打开数据库
ret = sqlite3_open(database_name, &db);
if( ret )
{
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
return -1;
}
fprintf(stderr, "Opened database successfully\n");
char table_name[200] = {0};
//时间戳 目标位置 实际位置 实际速度 实际电流
//create table if not exists motor0 (time_stamp integer primary key, target_pos real, real_pos real, real_speed real, real_current, real);
for(int motor_id = 0; motor_id < 6; motor_id++)
{
snprintf(table_name, sizeof(table_name),"create table if not exists motor%d (time_stamp integer primary key, target_pos real, real_pos real, real_speed real, real_current real);", motor_id);
ret = sqlite3_exec(db, table_name, NULL, NULL, &err_msg);
if(ret)
{
fprintf(stderr, "create table err:%s\n", err_msg);
return -1;
}
fprintf(stderr, "create table successfully\n");
}
memset(table_name, 0, sizeof(table_name));
snprintf(table_name, sizeof(table_name), "create table if not exists camera(time_stamp integer primary key, action text, x integer, y integer, z integer, vx integer, vy integer, vz integer, time integer);");
ret = sqlite3_exec(db, table_name, NULL, NULL, &err_msg);
if(ret)
{
fprintf(stderr, "create table err:%s\n", err_msg);
return -1;
}
fprintf(stderr, "create table successfully\n");
write_motor_info_to_database(db, 0, 90.0, 87.2, 5.0, 0.85);
write_motor_info_to_database(db, 1, 90.0, 87.2, 5.0, 0.85);
write_motor_info_to_database(db, 2, 90.0, 87.2, 5.0, 0.85);
write_motor_info_to_database(db, 3, 90.0, 87.2, 5.0, 0.85);
write_motor_info_to_database(db, 4, 90.0, 87.2, 5.0, 0.85);
write_motor_info_to_database(db, 5, 90.0, 87.2, 5.0, 0.85);
write_camera_info_to_database(db, 't', 100,200,150,160,130,110,1000);
return 0;
}
/**
* @brief 写入电机数据到数据库中
* @param db:数据库文件描述符
* @param target_pos:目标位置
* @param real_pos:实际位置
* @param real_speed:实际速度
* @param real_current:实际电流
* @retval 写入成功返回0,失败-1
*/
int write_motor_info_to_database(sqlite3 *db, int motor_id, double target_pos, double real_pos, double real_speed, double real_current)
{
char table_value[200] = {0};
int ret = 0;
char *err_msg = NULL;
//insert into motor0 values(1798345, 90.0, 88.66, 45.1, 0.97);
snprintf(table_value, sizeof(table_value),"insert into motor%d values(%lld, %.2f, %.2f, %.2f, %.2f);", motor_id, get_current_timestamp_ms(), target_pos, real_pos, real_speed, real_current);
ret = sqlite3_exec(db, table_value, NULL, NULL, &err_msg);
if(ret)
{
fprintf(stderr, "insert value to table err:%s\n", err_msg);
return -1;
}
fprintf(stderr, "insert value to table successfully\n");
return 0;
}
/**
* @brief 写入相机数据到数据库中
* @param db:数据库文件描述符
* @param action:动作
* @param x:
* @param y:
* @param z:
* @param vx:
* @param vy:
* @param vz:
* @retval 写入成功返回0,失败-1
*/
int write_camera_info_to_database(sqlite3 *db, char action, int x, int y, int z, int vx, int vy, int vz, int time)
{
char table_value[200] = {0};
int ret = 0;
char *err_msg = NULL;
//insert into motor0 values(1798345, 90.0, 88.66, 45.1, 0.97);
snprintf(table_value, sizeof(table_value),"insert into camera values(%lld, '%c', %d, %d, %d, %d, %d, %d, %d);", get_current_timestamp_ms(), action, x, y, z, vx, vy, vz, time);
ret = sqlite3_exec(db, table_value, NULL, NULL, &err_msg);
if(ret)
{
fprintf(stderr, "insert value to table err:%s\n", err_msg);
return -1;
}
fprintf(stderr, "insert value to table successfully\n");
return 0;
}
/**
* @brief 获取毫秒级时间戳
* @param NONE
* @retval 成功返回时间戳值,失败返回-1
*/
long long get_current_timestamp_ms(void)
{
#if defined(_WIN32) || defined(_WIN64)
struct _timeb timebuffer;
_ftime64_s(&timebuffer);
return (long long)timebuffer.time * 1000 + timebuffer.millitm;
#elif defined(__unix__) || defined(__unix) || defined(unix)
struct timeval tv;
gettimeofday(&tv, NULL);
return (long long)tv.tv_sec * 1000 + tv.tv_usec / 1000;
#endif
}
|