java读取Access数据

连接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 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 "导入完成";
    }

问题

  1. 如果Access数据库设置了密码,获取连接的时候也加了密码参数,还是出现错误,找不到原因,最后就把Access数据库密码去掉了。
  2. Access的分页问题,一次只能查询出1000条数据,其实Access本身是有分页查询的,只是看起很繁琐我并没有用,而且在数据量大的时候性能并不是很好。所以我是采用循环的形式,简单。
  3. 用的是Access_JDBC30.jar,java1.8竟然不支持Access了。网上好像有破解好的驱动,说是破了分页查询的限制

你可能感兴趣的:(java)