W3Schools Learner's Blog

W3Schools Programming knowledge summary website

div

7/06/2019

jdbc连接Access数据库的方法学习(ucanaccess驱动)

我们如何使用java jdbc连接Access数据库并进行读写呢?这个只需要使用UcanaccessDriver这样的驱动就可以了,首先java连接Access数据库需要引入net相关的jar包,Access数据库一般是用于windows系统中,数据库格式为“xxx.db”后缀。
步骤一:我们在maven中引入Access驱动相关的jar包,这是至关重要的,代码如下:
<dependency>
   <groupId>net.sf.ucanaccess</groupId>
   <artifactId>ucanaccess</artifactId>
   <version>4.0.2</version>
</dependency>
步骤二:开发DButil工具类,用于开启Access数据库的Connection连接池,后面会使用这个Connection对象读写Access数据库,传入的dbpath参数为“xxx.db”的Access数据库文件路径:
package cn.com.tpyyes.utils;

import java.io.File;
import java.sql.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class DButil {
 private static final Logger log = LoggerFactory.getLogger(DButil.class);
 
 public static Connection ConnectAccessFile(String dbpath) throws Exception{
  File dbFile = new File(dbpath);
  if(!dbFile.exists()){
   log.error("db数据库文件不存在,请确认路径是否正确:{}", dbpath);
   return null;
  }else{
   log.info("读取数据库文件,路径:{}", dbpath);
  }
  
  Connection conn = null;
  Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");//这个驱动的地址不要改
  String dbur1 = "jdbc:ucanaccess:///"+dbpath;
     conn = DriverManager.getConnection(dbur1, "","");
  return conn;
 }
 
 public static void close(Connection con) {
  try {
   if(con!=null) con.close();
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }
 
 public static void close(PreparedStatement ps) {
  try {
   if(ps!=null) ps.close();
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }
 
 public static void close(ResultSet rs) {
  try {
   if(rs!=null) rs.close();
  } catch (SQLException e) {
   e.printStackTrace();
  }
 }
}
步骤三:本步骤介绍如何使用使用Connection来连接Access数据库,并查询一条数据,代码如下:
@Override
public void queryData(String dbpath,String startTime,String endTime) {
 Connection conn =null;
 PreparedStatement ps =null;
 ResultSet rs =null;
 try {
  conn = DButil.ConnectAccessFile(dbpath);
  if(conn==null){
   return;
  }
  ps = conn.prepareStatement("select "
   + "count(*),macid from normalimg where createtime >=? and createtime <=? "
   + "GROUP BY macid");
  //设置查询参数 
  ps.setString(1, startTime);
  ps.setString(2, endTime);
  //执行sql语句
  rs = ps.executeQuery();
  while (rs.next()) {
   //输出查询结果
   System.out.println("结果一:"+rs.getInt(1)+"===结果二:"+rs.getInt(2));
  }
 } catch (SQLException e) {
  e.printStackTrace();
 } catch (Exception e) {
  e.printStackTrace();
 }finally{
  //关闭相关的连接
  DButil.close(conn);
  DButil.close(ps);
  DButil.close(rs);
 }
}
java连接Access数据库主要用到的就是ucanaccess驱动,其它地方和连接mysql,oracle都差不多,jdbc是效率非常高的,PrepareStatement为预处理对象,在jdbc中建议使用此对象执行sql语句会安全很多。

No comments:

Post a Comment

Note: only a member of this blog may post a comment.