今天的博客内容主要是来自于我今天做的业务。使用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());删掉。就可以了