今天的博客内容主要是来自于我今天做的业务。使用JDBC链接远程数据,并存储到本地数据库的操作。
我的代码之前是这样的
@SuppressWarnings("static-access")
public static void main(String[] args) throws Exception {
Connection connK3 = null;
Statement stmtK3 = null;
ResultSet rsK3 = null;
ErpAxConfig2 e =new ErpAxConfig2();
e.setDriverClassName("com.mysql.jdbc.Driver");
e.setUrl("jdbc:mysql://xxx.xxx.xxx.xx:3306/xxxxxxxxt?useUnicode=true&characterEncoding=utf8");//自己的url地址
e.setUsername("abc");
e.setPassword("123456");
e.setInitialSize("1");
e.setMaxActive("20");
e.setMaxWait("60000");
e.setTimeBetweenEvictionRunsMillis("60000");
e.setMinEvictableIdleTimeMillis("30000");
e.setTestOnBorrow("false");
e.setValidationQuery("select 'x'");
e.setTestWhileIdle("true");
e.setTestOnReturn("true");
connK3= DbPoolConnection.setddsreadAndddsWrite(e).getInstance().getReadConnection();
stmtK3 = connK3.createStatement();
List<DataInfo> list = new ArrayList<>();
String strSQL ="select wlmc name,wlbm code ,setofbook zt from t_midc_production;"
+ "select * from t_midc_data_info";
for(String sql :strSQL.split(";")){
System.out.println(sql);
rsK3 = stmtK3.executeQuery(sql);
System.out.println(rsK3.next());
while (rsK3.next()) {
DataInfo obj = new DataInfo();
obj.setId(UUID.getId());
obj.setCode(rsK3.getString("code"));
obj.setName(rsK3.getString("name"));
obj.setZt(rsK3.getString("zt"));
if("t_midc_data_info".equals(sql.substring(sql.indexOf("from")+5))){
obj.setSite_code(rsK3.getString("site_code"));
}
obj.setStatus(StatusUtil.EFFECT);
int indexOf = sql.indexOf("from");
String substring = sql.substring(indexOf+5);
obj.setType(substring);
list.add(obj);
}
}
System.out.println(list.size());
for(DataInfo info :list){
System.out.println(info.getType()+" "+info.getName());
}
}
这样老是取不到第一条数据。输出是这样的

数据库中的数据是这样的。

错误的原因就在于我们这里已经取过一次next()的值就是第一条记录,next的指针指向第二条记录,while里面就开始取第二条后面的记录了。

把输出打印的System.out.println(rsK3.next());删掉。就可以了
