具体步骤如下:
一、连接access数据库
创建AccessDbUtil类,连接数据库
import java.sql.Connection;import java.sql.DriverManager;/** * 获取Access连接 * * @author dofun * */public class AccessDbUtil{ public static Connection getDbConnection() { // 数据库url String url = "jdbc:Access:///E:ICD10.mdb"; Connection conn = null; try { // 驱动加载 Class.forName("com.hxtt.sql.access.AccessDriver").newInstance(); conn = DriverManager.getConnection(url); return conn; } catch (Exception e) { System.out.println("Access连接失败"); } return conn; }}
二、读取Access数据并保存在mysql数据库
1、获取access数据库连接
2、查询表数据,并保存
3、关闭连接资源
/** * 同步疾病,手术 * * @return */ @RequestMapping(value = "importJbbm") @ResponseBody public String importJbbm() { // 获取数据库连接 Connection conn = AccessDbUtil.getDbConnection(); PreparedStatement pst = null; ResultSet rs = null; Boolean a = true; int id = 30000; try { for (int i = 1; i > 0; i++) { // 手术 pst = conn.prepareStatement("select * from sJBBMML where id > " + id + " and LB = 'S' "); List<IcdSsbm> jbs = new ArrayList<>(); rs = pst.executeQuery(); while (a == rs.next()) { if (StringUtils.isNotBlank(rs.getString(2))) { IcdSsbm jb = new IcdSsbm(); jb.setCode(rs.getString(2)); jb.setName(rs.getString(5)); jb.setType(rs.getString(11)); jbs.add(jb); } else { a = false; i = 0; } // System.out.println(rs.getString(2)); // System.out.println(rs.getString(5)); // System.out.println(rs.getString(11)); } if (ListUtils.isNotEmpty(jbs)) { // 批量保存 icdSsbmService.saveBatch(jbs); } id += 1000; } } catch (SQLException e) { } finally { try { // 关闭资源 rs.close(); pst.close(); conn.close(); } catch (SQLException e) { } } return "导入完成"; }
问题:
如果Access数据库设置了密码,获取连接的时候也加了密码参数,还是出现错误,找不到原因,最后就把Access数据库密码去掉了。
Access的分页问题,一次只能查询出1000条数据,其实Access本身是有分页查询的,只是看起很繁琐我并没有用,而且在数据量大的时候性能并不是很好。所以我是采用循环的形式,简单。
用的是Access_JDBC30.jar,java1.8竟然不支持Access了。网上好像有破解好的驱动,说是破了分页查询的限制。
推荐教程:access数据库教程