今天的博客內容主要是來自於我今天做的業務。使用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());刪掉。就可以了