db2 数据转json v0.03

Python爬虫---中国大学MOOC爬取数据(文中有数据集) 本文为大二在校学生所做,内容为爬取中国大学Mooc网站的课程分类数据、课程数据、评论数据。数据集大佬们需要拿走。主要是希望大佬们能指正代码问题。 阅读详情
#ifndef DB2_CLI_H_
#define DB2_CLI_H_
#ifdef __cplusplus
extern "C"{
#endif
	struct sql_client_information_tag;
	typedef struct sql_client_information_tag* sql_client_handle;
	/**
	 *  函数:   create_sql_handle
	 *          生成一个sql查询客户端句柄
	 *  参数: 
	 *          const char * const db_name  数据库名称
	 *          const char * const u_name   数据库用户名
	 *          const char * const u_pass   数据库密码	 
	 *  返回值:
	 *          NULL 创建失败
	 *          其他 创建成功
	 *  版本号:1.0
	 */
	sql_client_handle create_sql_handle(const char*const db_name,const char*const u_name,const char*const u_pass);
	/**
	 *  函数:   sql_excute_no_result
	            执行一个没有返回值的sql语句,比如表创建,表插入,表删除等动作
	 *  参数: 
	 *          sql_client_handle h   sql查询客户端句柄
	 *          const char * const sql_statement sql语句 
	 *  返回值:
	 *          0   执行成功
	 *			非0 执行失败
	 *  版本号:1.0
	 */
	int sql_excute_no_result(sql_client_handle h, const char*const sql_statement);
	/**
	 *  函数:   sql_excute_with_result
	 *          执行一个有返回值的sql语句,比如select操作
	 *  参数: 
	 *          sql_client_handle h  sql查询客户端句柄
	 *          const char*const sql_statment  sql查询语句
	 *          char * const result  sql查询结果缓存
	 *          int *len			 [in]sql查询结果缓存大小
	 *								 [out]查询结果的json字符流大小
	 *  返回值:
	 *         0  执行成功
	 *		   非0 执行失败
	 *  版本号:1.0
	 *
	 */
	int sql_excute_with_result(sql_client_handle h ,const char*const sql_statment,char*const result,int *len);
	/**
	 *  函数:   destroy_sql_handle
	 *          关闭sql查询句柄
	 *  参数: 
	 *          sql_client_handle h sql查询句柄 
	 *  返回值:
	 *          无
	 *  版本号:1.0
	 *
	 */
	void destroy_sql_handle(sql_client_handle h);
#ifdef __cplusplus
};
#endif
#endif //DB2_CLI_H_
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>
#include <sqlcli1.h>
#include <db2_cli.h>
#ifndef _countof
#define _countof(x) (sizeof(x)/sizeof(x[0]))
#endif
#define hints printf
#define errors printf
#define SQL_STATE_LEN 256
#define SQL_ERROR_MSG 256
#define SQL_DBNAME_LEN 256 
#define SQL_USER_NAME_LEN 64
#define SQL_USER_PASS_LEN 64
#define SQL_STATEMENT_LEN 1024


typedef struct  sql_client_information_tag
{
	SQLHENV env_handle;
	SQLHDBC dbc_handle;
}sql_client_information;

typedef int (*fetch_row)(sql_client_handle h,SQLHSTMT stmt,char* buffer,int* len);
typedef struct sql_fetch_row_info_tag
{
	char* buffer;
	int*  length;
	fetch_row fetch;
}sql_fetch_row_info,*sql_fetch_row_handle;

static int fetch_sql(sql_client_handle h,SQLHSTMT stmt,char* buffer,int *len);
static void sql_error(sql_client_handle h,SQLHSTMT stm_handle);
static int clean_statement(sql_client_handle h,SQLHSTMT stmt,SQLRETURN frc);
static int sql_excute(sql_client_handle h,const char*const sql,sql_fetch_row_handle fh);
void destroy_sql_handle(sql_client_handle h);



sql_client_handle create_sql_handle(const char*const db_name,const char*const u_name,const char*const u_pass){
	SQLCHAR DBName[SQL_MAX_DSN_LENGTH + 1] = {0};
	SQLCHAR USRName[SQL_USER_NAME_LEN] = {0};
	SQLCHAR USRPass[SQL_USER_PASS_LEN] = {0};
	sql_client_handle ret = malloc(sizeof(sql_client_information));
	if(NULL == ret){
		return NULL;
	}
	memset(ret , 0 , sizeof(sql_client_information));
	do {
		SQLRETURN  rc = SQLAllocEnv(&ret->env_handle);
		if(rc != SQL_SUCCESS) break;
		rc = SQLAllocConnect(ret->env_handle,&ret->dbc_handle);
		if(rc != SQL_SUCCESS) break;
		strncpy((char*)DBName,db_name,sizeof(DBName) - 1);
		strncpy((char*)USRName,u_name,sizeof(USRName) - 1);
		strncpy((char*)USRPass,u_pass,sizeof(USRPass) - 1);
		rc = SQLConnect(ret->dbc_handle,DBName,SQL_NTS,USRName,SQL_NTS,USRPass,SQL_NTS);
		if(rc != SQL_SUCCESS) break;
		return ret;
	} while (0);
	sql_error(ret,SQL_NULL_HSTMT);
	destroy_sql_handle(ret);
	return NULL;	
}

void destroy_sql_handle(sql_client_handle h){
	do 
	{
		if(SQL_NULL_HDBC != h->dbc_handle){
			if(SQL_SUCCESS != SQLDisconnect(h->dbc_handle)) break;
			if(SQL_SUCCESS != SQLFreeConnect(h->dbc_handle)) break;
			h->dbc_handle = SQL_NULL_HDBC;
		}
		if (SQL_NULL_HENV != h->env_handle)
		{
			if(SQL_SUCCESS != SQLFreeEnv(h->env_handle)) break;
			h->env_handle = SQL_NULL_HENV;
		}
		free(h);
		return;
	} while (0);
	sql_error(h,SQL_NULL_HSTMT);
	free(h);
}

int sql_excute_no_result(sql_client_handle h, const char*const sql_statement){
	return sql_excute(h,sql_statement,NULL);
}


int sql_excute_with_result(sql_client_handle h ,const char*const sql_statment,char*const result,int *len){
	sql_fetch_row_info fetch_row = {result,len,fetch_sql};
	return sql_excute(h,sql_statment,&fetch_row);
}

static void sql_error(sql_client_handle h,SQLHSTMT stm_handle){
	SQLCHAR  sql_state[SQL_SQLSTATE_SIZE + 1] = {0};
	SQLCHAR  sql_error[SQL_MAX_MESSAGE_LENGTH + 1] = {0};
	SQLINTEGER native_error = 0;
	SQLSMALLINT pcb_error = 0;
	SQLRETURN  rc = SQLError(h->env_handle,h->dbc_handle,stm_handle,
		sql_state,&native_error,sql_error,sizeof(sql_error),&pcb_error);
	if(rc == SQL_NO_DATA_FOUND){
		return;
	}
	errors("sql state : %s\n",sql_state);
	errors("sql error : %s\n",sql_error);
}

static int clean_statement(sql_client_handle h,SQLHSTMT stmt,SQLRETURN frc){
	sql_error(h,stmt);
	switch(frc){
	case SQL_SUCCESS: 
	case SQL_SUCCESS_WITH_INFO:break;
	case SQL_ERROR:
	case SQL_INVALID_HANDLE:
	default:
		SQLTransact(h->env_handle,h->dbc_handle,SQL_ROLLBACK);
		return frc;
	}
	return SQL_SUCCESS; 
}


static int sql_excute(sql_client_handle h,const char*const sql,sql_fetch_row_handle fh){
	SQLCHAR SQLState[SQL_STATEMENT_LEN] = {0};
	SQLHSTMT stmt = SQL_NULL_HSTMT;
	SQLRETURN rc = SQLAllocStmt(h->dbc_handle,&stmt);
	do 
	{
		if(SQL_SUCCESS != rc) break;
		strncpy((char*)SQLState,sql,sizeof(SQLState) - 1);
		rc = SQLExecDirect(stmt,SQLState,SQL_NTS);
		if(SQL_SUCCESS != rc) break;
		if(NULL != fh){
			if(SQL_SUCCESS != fh->fetch(h,stmt,fh->buffer,fh->length)) break;
		}
		rc = SQLTransact(h->env_handle,h->dbc_handle,SQL_COMMIT);
		if(SQL_SUCCESS != rc) break;
		SQLFreeStmt(stmt,SQL_DROP);
		return 0;
	} while (0);
	if(SQL_NULL_HSTMT != stmt){
		SQLFreeStmt(stmt,SQL_DROP);
		stmt = SQL_NULL_HSTMT;
	}
	return clean_statement(h,stmt,rc);
}



typedef struct record_set_header_tag{
	SQLCHAR Name[SQL_MAX_COLUMN_NAME_LEN];
	SQLUINTEGER Define;
	SQLSMALLINT Type;
	SQLSMALLINT Scale;
	SQLSMALLINT IsNUll;
}record_set_header,*record_set_header_handle;


typedef struct record_set_tag{
	record_set_header headers[SQL_MAX_COLUMNS_IN_TABLE];
	int  col_counts;
	int  row_counts;
	int  buffer_length;
	int  data_size;
	char data_buffer[];
}record_set,*record_set_handle;

#define record_data_buffer(h) (&h->data_buffer[h->data_size])
#define record_data_space(h) (h->buffer_length - h->data_size)


static int fetch_record_set_header(record_set_handle h,SQLHSTMT stmt){
	record_set_header* rs_header = h->headers;
	SQLSMALLINT SQLColCount = 0,NameLen = 0, i = 0;
	SQLRETURN rc = SQLNumResultCols(stmt,&SQLColCount);
	if (SQL_SUCCESS != rc){
		errors("%s: SQLNumResultCols = %d\n",__FUNCTION__,rc);
		return rc;
	}
	for (i = 0 ; i < SQLColCount && i < SQL_MAX_COLUMNS_IN_TABLE; ++i,++rs_header)
	{
		rc = SQLDescribeCol(stmt,i + 1,rs_header->Name,sizeof(rs_header->Name),&NameLen,
			&rs_header->Type,&rs_header->Define,&rs_header->Scale,&rs_header->IsNUll);
		if(SQL_SUCCESS != rc){
			errors("%s : SQLDescribeCol = %d\n",__FUNCTION__,rc);
			return rc;
		}
	}
	h->col_counts = i;
	return SQL_SUCCESS;
}


static int fetch_row_data(record_set_handle h, SQLHSTMT stmt){
	SQLCHAR char_buffer[SQL_MAX_MESSAGE_LENGTH] = {0};
	SQLINTEGER buffer_len = 0;
	int i = 0;
	for(i = 0; i < h->col_counts; ++i){
		SQLRETURN rc = SQLGetData(stmt,i + 1,SQL_CHAR,char_buffer,sizeof(char_buffer),&buffer_len);
		if(SQL_SUCCESS != rc){
			errors("%s : SQLGetData = %d\n",__FUNCTION__,rc);
			return rc;
		}
		if((buffer_len + 4) > record_data_space(h)){
			errors("%s : buffer_len = %d, free_len = %d\n",buffer_len,h->buffer_length);
			break;
		}
		h->data_size += snprintf(record_data_buffer(h),record_data_space(h),"%4d",buffer_len);
		memcpy(record_data_buffer(h),char_buffer,buffer_len);
		h->data_size += buffer_len;
	}
	return SQL_SUCCESS;
}

static int fetch_sql_data(record_set_handle h, SQLHSTMT stmt){
	int ret = 0;
	for (h->row_counts = 0;h->data_size < h->buffer_length;++h->row_counts){
		if(SQL_NO_DATA == SQLFetch(stmt)){
			break;
		}
		ret = fetch_row_data(h,stmt);
		if(ret < 0){
			errors("%s : ret = %d",__FUNCTION__,ret);
			return ret;
		}
	}
	return SQL_SUCCESS;
}

void destroy_record_set(record_set_handle h){
	free(h);
}

record_set_handle create_record_set(SQLHSTMT stmt,int buffer_size){
	record_set_handle ret = malloc(sizeof(record_set) + buffer_size);
	if (NULL == ret || SQL_NULL_HSTMT == stmt){
		return NULL;
	}
	memset(ret , 0 , sizeof(record_set) + buffer_size);
	ret->buffer_length = buffer_size;
	do 
	{
		if (SQL_SUCCESS != fetch_record_set_header(ret,stmt)) break;
		if (SQL_SUCCESS != fetch_sql_data(ret,stmt)) break;
		return ret;
	}while(0);
	destroy_record_set(ret);
	return NULL;
}



typedef struct json_convertor_tag{
	const char* data_buffer;
	char* json_buffer;
	int buffer_length;
	int json_size;
	int data_offset;
}json_convertor,*json_convertor_handle;

#define item_len_lable 4
#define header_size (SQL_MAX_COLUMN_NAME_LEN + 4)
#define data_sapce(h) (h->data_buffer + h->data_offset)
#define json_space(h) (h->json_buffer + h->json_size)
#define space_leng(h) ((h->buffer_length  > h->json_size) ? (h->buffer_length - h->json_size) : 0)

static int get_item_length(json_convertor_handle h){
	char str_len[item_len_lable + 1] = {0};
	int offset = 0;
	strncpy(str_len,data_sapce(h),item_len_lable);
	offset = atoi(str_len);
	if ((offset + h->json_size + header_size) > h->buffer_length){
		errors("json buffer not space : offset = %d,buffer_length = %d,json_size = %d\n",
			offset,h->buffer_length,h->json_size);
		return -1;
	}
	h->data_offset += item_len_lable;
	return offset;
}

static int set_json_number(json_convertor_handle h, const char* item_name){
	int  offset = get_item_length(h);
	if(offset < 0){
		return offset;
	}
	h->json_size += snprintf(json_space(h),space_leng(h),"\"%s\":",item_name);
	if(0 == offset){
		const char*const null_str = "null";
		offset = strlen(null_str);
		strncpy(json_space(h),null_str,offset);
	}else{
		strncpy(json_space(h),data_sapce(h),offset);
		h->data_offset += offset;
	}
	h->json_size += offset;
	h->json_size += snprintf(json_space(h),space_leng(h),",");
	return offset;
}

static int convert_json_string(const char*const src,char* dst,int len){
	const char*const head = dst;
	int i = 0;
	for (i = 0; i < len ; ++i)
	{
		switch(src[i]){
		case '\\':
			{
				*dst++ = '\\';
				*dst++ = '\\';
				break;
			}
		case '"':
			{
				*dst++ = '\\';
				*dst++ = '"';
				break;
			}
		default:
			{
				*dst++ = src[i];
				break;
			}
		}
	}
	return (int)(dst - head);
}

static int set_json_string(json_convertor_handle h,const char* item_name){
	int offset = get_item_length(h);
	if (offset < 0){
		return offset;
	}
	if( 0 == offset){
		h->json_size += snprintf(json_space(h),space_leng(h),"\"%s\":null,",item_name);
		h->data_offset += offset;
		return offset;
	}
	h->json_size += snprintf(json_space(h),space_leng(h),"\"%s\":\"",item_name);
	h->json_size += convert_json_string(data_sapce(h),json_space(h),offset);
	h->json_size += snprintf(json_space(h),space_leng(h),"\",");
	h->data_offset += offset;
	return offset;

}

static int format_row_2_json(json_convertor_handle h,record_set_handle rs){
	int i = 0;
	for(i = 0; i < rs->col_counts; ++i){
		switch(rs->headers[i].Type){
		case SQL_NUMERIC:
		case SQL_DECIMAL:
		case SQL_INTEGER:
		case SQL_SMALLINT:
		case SQL_FLOAT:
		case SQL_REAL:
		case SQL_DOUBLE:
		case SQL_DATETIME:
			{
				set_json_number(h,(const char*)rs->headers[i].Name);
				break;
			}
		default:
			{
				 set_json_string(h,(const char*)rs->headers[i].Name);
				 break;
			}
		}
	}
	return i;
}

static int format_2_json(json_convertor_handle h,const record_set_handle rs){
	int i = 0;
	if( 0 == rs->row_counts){
		h->json_size += snprintf(json_space(h),space_leng(h),"[]");
		return h->json_size;
	}
	h->json_size += snprintf(json_space(h),space_leng(h),"[\n");
	for (i = 0; i < rs->row_counts; ++i){
		h->json_size += snprintf(json_space(h),space_leng(h),"{");
		format_row_2_json(h,rs);
		h->json_size += snprintf(json_space(h) - 1,space_leng(h) + 1,"},\n") - 1;
	}
	h->json_size += snprintf(json_space(h) - 2,space_leng(h) + 2,"\n]") - 2;
	return h->json_size;
}

static int fetch_sql(sql_client_handle h,SQLHSTMT stmt,char* buffer,int *len){
	json_convertor json = {0};
	record_set_handle rsh = create_record_set(stmt,*len);
	if (NULL == rsh){
		return SQL_ERROR;
	}
	json.data_buffer = rsh->data_buffer;
	json.json_buffer = buffer;
	json.buffer_length = *len;
	*len = format_2_json(&json,rsh);
	destroy_record_set(rsh);
	return (*len >= 0) ? SQL_SUCCESS : SQL_ERROR;
}

#ifdef db2_json_test
static char result[1024 * 1024 * 4];
int main(int argc, char* argv[])
{
	char cmd[1024];
	if(argc < 4){
		hints("usage : %s db_name db_user db_pass\n",argv[0]);
		return -1;
	}
	sql_client_handle h = create_sql_handle(argv[1],argv[2],argv[3]);
	if (NULL == h){
		return -1;
	}
	for (gets(cmd);strcmp(cmd,"q") != 0;gets(cmd)){
		int len = sizeof(result);
		int ret = 0;
		memset(result , 0 , sizeof(result));
		hints("cmd = %s\n",cmd);
		ret = sql_excute_with_result(h,cmd,result,&len);
		if(ret < 0) {
			errors("sql_excute_with_result = %d\n",ret);
			break;
		}
		hints("%s : %d\n",result,len);
		hints("next command\n");
	}
	destroy_sql_handle(h);
	return 0;
}
#endif


豆包2.0推理成本降十倍:稀疏KV与弹性MLP实战解析 大模型推理成本优化是AI工程落地的核心瓶颈,其本质涉及显存带宽利用、计算冗余消除与调度粒度重构三大技术命题。基于FlashAttention-3定制、KV缓存稀疏化与动态维度FFN等关键技术,现代推理引擎正从‘整序列批处理’迈向‘token级自适应计算’。这类优化显著降低单位token能耗(如降至0.082焦耳)和显存占用(降幅超90%),在128K长上下文、P95<380ms严苛SLA下仍保持高准确率,广泛适用于客服对话、金融摘要、多模态分析等高并发低延迟场景。本文深入拆解豆包2.0中SparseKV C 阅读详情

相关推荐

大华MVP全局通信实战:打通视觉与PLC/机器人的数据链路

本文探讨了大华MVP全局通信在工业自动化中的应用,重点介绍了如何通过MVP V5.2的全局通信功能实现视觉系统与PLC/机器人之间的高效数据交互。文章通过实际案例展示了该技术如何显著降低响应延迟、缩短开发周期,并提升协议兼容性和故障恢复能力,为工业4.0时代的设备协同提供了可靠解决方案。

weixin_34279579的博客 315

x$表的解释!

oracle的x$表非常重要,记录一下,备查![@more@][K]ernel Layer[2]-Phase Commit [G]lobal [T]ransaction [E]ntryX$K2GTE - Current 2P...

clt3617的博客 883

powerdesigner导出sql将name放到comment注释上

【代码】powerdesigner导出sql将name放到comment注释上。

weixin_45947759的博客 1352

玩转DB2之SQL篇:从json格式字段中提取long型日期

从json格式字段中提取long型日期因数据统计的需求,笔者需要编写一条sql,用于在tbl_user_info表中某个json数据格式字段中提取姓名、时间等信息,该字段名为data_json,json数据格式如下: id-自增编号 name-字符串 createdate-long型时间戳 数据示例:{“id”:12859701,”name”:”小编”,”createdate”:132014009

3382

实战经验:Sensor Bringup中那些坑我都帮你踩过了(避坑指南)

本文是一份详尽的Sensor Bringup实战避坑指南,总结了从I2C通信、MCLK时钟、电源管理到图像异常等关键环节的常见问题与排查方法。文章提供了系统化的调试工作流,强调先硬件后软件的排查原则,旨在帮助硬件工程师快速定位并解决Sensor启动过程中的难题,提升开发效率。

weixin_29212429的博客 574

R语言实战:5分钟搞定NHANES数据库的加权分析与可视化(附完整代码)

本文提供了一份R语言实战指南,帮助研究者在5分钟内完成NHANES数据库的加权分析与可视化。通过详细的代码示例,涵盖数据获取、清洗、加权分析和可视化全流程,特别适合公共卫生和流行病学研究者快速掌握复杂抽样数据的处理方法。

www00的博客 253

DB2查询结果表拼接JSON字符串

DB2查询结果表拼接JSON字符串

jiahao_1996的博客 2066

告别机载网络通信混乱:利用ARINC825的LCC与带宽管理机制构建高可靠CAN总线

本文深入探讨了ARINC825规范如何通过逻辑通信通道(LCC)和带宽管理机制解决机载CAN总线通信的混乱问题。文章详细解析了ARINC825的核心架构设计、LCC工程实现、时间触发带宽管理等关键技术,展示了其在提升航空电子系统可靠性和实时性方面的显著效果,为现代飞机通信系统提供了高可靠解决方案。

weixin_26878995的博客 241

java解析json字符串

java解析json数组:需要添加一个jar包,自己搜索即可 import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; public static void main(String[] args) th

passport_daizi的博客 5586

保姆级教程:用rosbag录制和回放你的第一个ROS机器人数据(附C++/Python代码)

本文提供了一份详细的ROS机器人数据录制与回放教程,涵盖从命令行操作到C++/Python编程实现的全流程。通过rosbag工具,开发者可以高效记录和回放机器人运行时的传感器数据和控制指令,适用于故障复现、算法调试等多种场景。教程还包含高级技巧如时间同步和大文件处理,帮助用户快速掌握ROS数据管理核心技能。

weixin_29313239的博客 283

你需要这样一个Ros软路由—— 路由器+外网+一号通ip线路=动态ip的WiFi信号

功能强大 管理便捷—给您全新的路由体验 一键更换指定线路or批量更换所有IP/MAC/SSID 自定义走本地网络策略的分流功能 设备批发价、不限制拨号账号服务商 强大的单设备/多设备IP去重功能 批量导入、管理一号通线路 一键任意切换5G_WiFi(推荐)/2.4G_WiFi(建议不用) 设备支持PPTP/L2TP/SSTP/openVP.N等协议 独家支持openVPN,适用于网络受限用户 支持自行接入AP和交换机扩容 一键打开/关闭所有虚拟WiFi 一键隐藏/显示设备WiFi...

米粒儿 4253

DB2数据库自定义json_value函数,获取json字符串中指定字段的值

因DB2数据库版本的关系,目前的SQL语句以存储过程中,均不能使用DB2自带的json_value函数,因此写了一个自定义函数,用来获取json字符串中指定字段的值。

weixin_51858505的博客 571

从零到千兆:KSZ9031 PHY芯片在Zynq PS端的驱动移植心路历程

本文详细记录了在Xilinx Zynq-7000平台(基于XC7Z020芯片)上,为KSZ9031千兆以太网PHY芯片移植LwIP协议栈驱动的完整过程。从硬件连接配置、Vivado工程设置到LwIP库的深度修改与调试,分享了解决PHY识别、自协商及性能优化等关键问题的实战经验,助力开发者实现稳定的千兆网络连接。

honey的博客 1104

JMeter集成Python操作DB2数据库:提升性能测试脚本灵活性与数据处理能力

在性能测试与接口自动化领域,数据库操作是核心环节。关系型数据库如DB2,其连接与操作通常依赖JDBC等标准接口,但面对复杂的数据生成、JSON/XML解析或特定SQL逻辑时,脚本的灵活性与可维护性面临挑战。此时,引入Python这一具备丰富生态的脚本语言,通过其pandas、sqlalchemy等库,可以高效处理数据构造与比对等复杂任务。其技术价值在于,将JMeter的负载模拟调度能力与Python强大的数据处理能力相结合,形成优势互补的工程实践方案。这一模式特别适用于需要在压测前后进行自动化数据准备、校验

weixin_33681778的博客 368

SOME/IP协议详解「1.1·面向服务与面向信号」

面向信号和面向服务的区别,和举例子

雪云飞星的博客 5654

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

工作中使用到的单词(软件开发)_第三版

====

sun0322 1万+

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

docker之数据卷和数据卷容器

前言 Docker 数据管理 在生产环境中使用 Docker ,往往需要对数据进行持久化,或者需要在多个容器之间进行 数据共享,这必然涉及容器的数据管理操作 那么数据管理策略的方式有三种: 数据卷 Data Volumes 容器内数据直接映射到本地主机环境; 数据卷容器(Data Volume Containers 使用特定容器维护数据卷 当然还有最原始的copy方式,这个也是管理数据的方式,但...

Make Excellence a Habit 354

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

终极指南:5分钟掌握Python CAN数据库转换工具canmatrix

在汽车电子开发领域,**CAN数据库转换**是每个工程师都会遇到的挑战。不同供应商使用不同格式,主机厂要求ARXML,零部件供应商提供DBC,测试团队需要Excel表格。canmatrix正是解决这一痛点的Python工具包,它支持超过10种主流CAN数据库格式的互转,让**汽车电子开发**中的格式转换工作变得简单高效。 ## 🔍 汽车电子开发中的格式转换难题 ### 行业现状与挑战 在复

gitblog_00117的博客 737

数据卷(Data Volumes)

1、Docker宿主机和容器之间文件拷贝 Docker宿主机和容器之间文件拷贝docker copy 前言: Docker 数据管理 在生产环境中使用 Docker ,往往需要对数据进行持久化,或者需要在多个容器之间进行 数据共享,这必然涉及容器的数据管理操作 容器中的管理数据主要有两种方式: 数据卷 Data Volumes 容器内数据直接映射到本地主机环境; 数据卷容器(Data Volume...

qq_45177371的博客 229

汽车电子开发必备:5分钟掌握Canmatrix CAN数据库转换工具

在汽车电子开发领域,CAN数据库格式转换是每个工程师都会遇到的挑战。不同供应商使用不同格式,主机厂要求ARXML,零部件供应商提供DBC,测试团队需要Excel表格。canmatrix正是解决这一痛点的Python工具包,它支持超过10种主流CAN数据库格式的互转,让汽车电子开发中的格式转换工作变得简单高效。 ## 🔍 汽车电子开发中的格式转换难题 ### 行业现状与挑战 在复杂的汽车电子

gitblog_00318的博客 575
上一篇: db2 数据转json v0.02
下一篇: ini文件读取
FlyAnyWhere
博客等级 码龄24年 5粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值