Collect data base meta data by JDBC

本文介绍如何使用Java从SQL Server中收集存储过程(Sproc)的元数据,并列出所需的依赖库,包括Apache Commons DBCP2、Microsoft SQL JDBC驱动等。文章还提到XStream在XML支持方面的应用,并推荐了Freemarker等模型生成工具。

I have not to update the blog for a long time, it seems hard to hold every day敲打

I will introduce how to collect data base meta data for Sproc based on SQL Server


The dependent jar libs as below:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-dbcp2</artifactId>
</dependency>
<dependency>
    <groupId>com.microsoft</groupId>
    <artifactId>sqljdbc</artifactId>
</dependency>
<dependency>
    <groupId>com.thoughtworks.xstream</groupId>
    <artifactId>xstream</artifactId>
    <version>RELEASE</version>
</dependency>
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>19.0</version>
</dependency>

BTW, the XStream is good for XML support.

1), Initialized sproc setting for sproc XML(custom)

2), Create connection for SQL Server.

3), Use DatabaseMetaData object to get sproc meta data

4), Parse data list to your object.



and we can use third plugin(model tool) to auto generate Object of my expected, such as

<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.23</version>
</dependency>	

The referenced link:

For XStream: http://x-stream.github.io/javadoc/index.html

For DataBaseMetaData API: https://docs.oracle.com/javase/7/docs/api/java/sql/DatabaseMetaData.html 

For Sql Type convertion: https://docs.oracle.com/javase/7/docs/api/constant-values.html, we can use ENUM type to convert


优化这个方法:public void createBgmByData(Long expId,String vol, List<String> bgms, List<JSONObject> meta) { if(CollUtil.isEmpty(bgms) || CollUtil.isEmpty(meta)){ return; } GisExpRecord exp = expRecordMapper.selectById(expId); String rootDir = configService.selectConfigByKey("gis.file.basePath"); final String filePath = BASE_PATH + expId + "/"; List<GisBasicBgm> bgmList = basicBgmMapper.selectList(Wrappers.<GisBasicBgm>lambdaQuery().in(GisBasicBgm::getName, bgms)); for (GisBasicBgm bgm : bgmList){ List<List<String>> data = new ArrayList<>(); data.add(Arrays.asList("相对时间","绝对时间","指标值")); for(JSONObject m : meta){ data.add(Arrays.asList("",m.getStr("time"),m.getStr("血糖值("+bgm.getName()+")"))); } // 添加记录 String newName = IdUtil.fastSimpleUUID() + ".xlsx"; IndicatorUploadBo dbo = new IndicatorUploadBo(); dbo.setIndicator("血糖"); dbo.setCollectType("FB"); dbo.setCategory("原始"); dbo.setExpId(expId); dbo.setPosition("左侧"); dbo.setBgmId(bgm.getId()); String name = StrUtil.format("{}_{}_BGM数据.xlsx", DateUtil.formatDate(exp.getExpTime()).replaceAll("-",""), vol ); addByPath(dbo,rootDir,filePath,name,newName); // 生成文件 ExcelWriter writer = ExcelUtil.getWriter(rootDir + filePath + newName); writer.write(data); writer.flush(); writer.flush(); } if(StrUtil.isNotEmpty(meta.get(0).getStr("糖化血糖蛋白"))){ List<List<String>> data = new ArrayList<>(); data.add(Arrays.asList("相对时间","绝对时间","指标值")); data.add(Arrays.asList("",meta.get(0).getStr("time"),meta.get(0).getStr("糖化血糖蛋白"))); // 添加记录 String newName = IdUtil.fastSimpleUUID() + ".xlsx"; IndicatorUploadBo dbo = new IndicatorUploadBo(); dbo.setIndicator("糖化血红蛋白"); dbo.setCollectType("VB"); dbo.setCategory("原始"); dbo.setExpId(expId); dbo.setPosition("左侧"); String name = StrUtil.format("{}_{}_糖化血红蛋白.xlsx", DateUtil.formatDate(exp.getExpTime()).replaceAll("-",""), vol ); addByPath(dbo,rootDir,filePath,name,newName); // 生成文件 ExcelWriter writer = ExcelUtil.getWriter(rootDir + filePath + newName); writer.write(data); writer.flush(); writer.flush(); } // 更新实验数量 refreshExpCount(expId); // 更新空腹血糖 syncEsConc(expId); }
10-30
### DataCollectProbe.collectData() 方法的概述 `DataCollectProbe.collectData()` 是一种用于数据收集的方法,通常在数据分析或监控系统中使用。该方法的主要功能是从指定的数据源中提取信息并将其存储到一个可处理的格式中[^1]。此方法的具体实现可能因不同的框架或库而有所不同,但其核心逻辑通常包括以下几个方面: - **数据源初始化**:确定需要从哪个数据源(例如数据库、文件、API 或实时流)获取数据。 - **数据提取**:通过适当的协议或接口提取数据。 - **数据转换**:将原始数据转换为适合进一步处理的结构化形式。 - **数据存储**:将处理后的数据保存到目标位置,如内存缓冲区、数据库或文件。 以下是一个通用的伪代码示例,展示了 `collectData()` 方法的基本实现逻辑: ```python class DataCollectProbe: def __init__(self, source, target): self.source = source # 数据源配置 self.target = target # 数据目标配置 def collectData(self): try: raw_data = self._fetchDataFromSource() # 从数据源提取数据 processed_data = self._processRawData(raw_data) # 处理原始数据 self._storeData(processed_data) # 将处理后的数据存储到目标位置 except Exception as e: print(f"Error during data collection: {e}") def _fetchDataFromSource(self): # 实现从数据源获取数据的逻辑 return "raw_data" def _processRawData(self, raw_data): # 实现对原始数据进行处理的逻辑 return "processed_data" def _storeData(self, processed_data): # 实现将处理后的数据存储到目标位置的逻辑 pass ``` 上述代码定义了一个基本的 `DataCollectProbe` 类,并实现了 `collectData()` 方法。此方法调用了三个私有方法来完成数据提取、处理和存储的任务[^2]。 ### 方法的参数与返回值 `collectData()` 方法通常不接受任何参数,因为它依赖于类的初始化配置(如数据源和目标)。然而,在某些实现中,可能会支持动态传递参数以调整数据收集的行为。例如,可以传递过滤条件或时间范围等参数[^3]。 返回值方面,`collectData()` 方法本身通常不会直接返回数据,而是将结果存储到指定的目标位置。如果需要返回数据,则可以通过额外的属性或方法访问。 ### 使用示例 以下是一个具体的使用示例,展示如何使用 `DataCollectProbe` 类来收集数据: ```python # 假设我们有一个数据库作为数据源 db_source = { "host": "localhost", "port": 5432, "database": "example_db" } # 配置目标存储位置 file_target = { "path": "/path/to/output/file.csv" } # 初始化 DataCollectProbe 对象 probe = DataCollectProbe(source=db_source, target=file_target) # 调用 collectData 方法 probe.collectData() ``` 在这个例子中,`DataCollectProbe` 被初始化为从数据库中提取数据,并将结果保存到 CSV 文件中。 ### 注意事项 在实际使用中,需要注意以下几点: - 确保数据源和目标配置正确无误。 - 处理可能的异常情况,例如网络中断或权限不足。 - 根据具体需求调整数据处理逻辑。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值