公司有天有个业务:客户有个古老的SQLServer2000数据库, 我需要链接上对方的数据库,并做一些数据查询操作。
方式如下: 修改pom.xml文件
<dependency>
<groupId>net.sourceforge.jtds</groupId>
<artifactId>jtds</artifactId>
<version>1.3.1</version>
</dependency>
public class SQLServerConnection {
public static final String url = "jdbc:jtds:sqlserver://192.168.1.10:1433;DatabaseName=weight20";
public static final String username = "sa119111";
public static final String password = "Ac123";
}
public Map<String, Object> sqlServerMateriaWeight(String vehicleNumber, Date outTime) {
log.info("SQLServer2000数据库对接计量系统的方式开始===============================================================");
List<Map<String, Object>> dataList = new ArrayList<>();
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver");
Connection connection = DriverManager.getConnection(SQLServerConnection.url, SQLServerConnection.username, SQLServerConnection.password);
if (connection != null) {
log.info("SQLServer2000数据库对接计量系统的方式:Successfully connected to the database.");
} else {
log.info("SQLServer2000数据库对接计量系统的方式:Failed to make connection!");
}
String sql = "SELECT 车号, 货名, 净重, 毛重时间, 皮重时间 FROM 称重信息 WHERE (毛重时间 IS NOT NULL OR 毛重时间 <> '') " +
"AND (皮重时间 IS NOT NULL OR 皮重时间 <> '') and 车号= ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setString(1, vehicleNumber);
ResultSet resultSet = statement.executeQuery();
log.info("数据库方式计量信息查询结果========{}", resultSet);
if (!resultSet.next()) {
log.info("ResultSet中没有数据");
}
while (resultSet.next()) {
String materiaName = resultSet.getString("货名");
Double netWeight = resultSet.getDouble("净重");
Date grossWeightTime = DateUtil.parseDateTime(resultSet.getString("毛重时间"));
Date tareWeightTime = DateUtil.parseDateTime(resultSet.getString("皮重时间"));
log.info("SQLServer2000数据库对接计量系统的方式查询结果:货名:{}, 净重:{},毛重时间:{},皮重时间:{}",materiaName,netWeight,grossWeightTime,tareWeightTime);
// 毛重时间和皮重时间哪个值大,就保留哪个
// 如果date1 < date2,返回数小于0,date1==date2返回0,date1 > date2 大于0
int compare = DateUtil.compare(grossWeightTime, tareWeightTime);
Date time = null;
if (compare <= 0) {
time = tareWeightTime;
} else {
time = grossWeightTime;
}
log.info("比较后的time:{}",time);
//只要距离出厂时间1小时内的称重数据
Date czDate = Convert.toDate(time);
double betweenHour = (double) DateUtil.between(czDate, outTime, DateUnit.SECOND, true) / 3600;
log.info("是否1小时内的数据:betweenHour:{}",betweenHour);
if (betweenHour <= 1) {
Map<String, Object> dataMap = new HashMap<>(16);
dataMap.put("materiaName", materiaName);
dataMap.put("materiaWeight", netWeight);
dataMap.put("cargoState", 0);
dataMap.put("time", time);
dataList.add(dataMap);
}
}
resultSet.close();
statement.close();
connection.close();
} catch (ClassNotFoundException | SQLException e) {
log.error(e.getMessage(),e);
} finally {
Optional<Map<String, Object>> maxTimeDataMap = dataList.stream().max(Comparator.comparing(data -> (Date) data.get("time")));
Map<String, Object> resultMap = maxTimeDataMap.orElseGet(HashMap::new);
log.info("SQLServer2000数据库对接计量系统的方式结束,resultMap================{}",resultMap);
return resultMap;
}
}
//延迟更新货物重量(吨)、货物状态
scheduler.schedule(() -> setMaterialWeight(dto, vehicleNumber, outTime, standingBook), 20, TimeUnit.MINUTES);