java通过Access_JDBC30读取access数据库时无法获取最新插入的记录

时间:2021-04-07 21:44:53

 

1、编写了一个循环程序,每几秒钟读取一次,数据库中最新一行数据

连接access数据库的方法和查询的信息。之后开一个定时去掉用。

 

package javacommon.util;


import java.sql.Connection;

import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import java.sql.SQLException;
import java.sql.Statement;

import com.ybb.DBConnection;
/**
 * 
 * @author ybb
 * 连接Access数据库
 * java通过Access_JDBC30获取access数据库数据,取不到最新的数据
 */
public class AccessDBUtil {
	
	private static  final String DRIVER="com.hxtt.sql.access.AccessDriver";
	private static final String URL="jdbc:Access:///G:/ceshi/ceshi.mdb";
	private static final String USER="";
	private static final String PASSWORD="";
	
	public static Connection getConnection(){
		try {
			Class.forName(DRIVER);
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		
		try {
			Connection connection = DriverManager.getConnection(URL, USER, PASSWORD);
			return connection;
		} catch (SQLException e) {
			return null;
		}
	}
	
	public static void colseConnection(Connection conn){
		try {
			if(conn!=null&&!conn.isClosed()){
				conn.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void myclose(Connection con,PreparedStatement ps){
		try {
			if (con!=null&&!con.isClosed()) {
				con.close();
			}
			if (ps!=null) {
				ps.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public static void myclose(Connection con,PreparedStatement ps,ResultSet rs){
		try {
			if (con!=null&&!con.isClosed()) {
				con.close();
			}
			if (ps!=null) {
				ps.close();
			}
			if (rs!=null) {
				rs.close();
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	/** 
	 * 测试 
	 * */  
	public static void main(String[] args){  
		Connection connnect = null;
		while(true){
			try{  
			    connnect = AccessDBUtil.getConnection();
				if(connnect!=null){  
					System.out.println(connnect+"\n连接成功");  
				}else{  
					System.out.println("连接失败");  
				}  
				 Statement stat = connnect.createStatement();
				 ResultSet rs = stat.executeQuery("select * from CYJ_PD_QTJL");
				 if(rs!=null){  
						while(rs.next()){  
							System.out.println(rs.getString(1)+"\t"+rs.getString(2));    
						}  
				}  
				Thread.sleep(5000);
			}catch(Exception e){  
				e.printStackTrace();  
			}finally{  
				colseConnection(connnect);//关闭链接  
			}  
		}
	}  
	
}

  

 

 

2、当手动向对应的access数据库中CYJ_PD_QTJL表

添加数据时,查询不到刚添加的数据。需要重启此程序才能查询到。

3、为了解决此问题更换驱动。用ODBC连接完美解决。

package com.ybb;
import java.sql.Connection;  
import java.sql.DriverManager;  
import java.sql.PreparedStatement;  
import java.sql.ResultSet;  
import java.util.Properties;  

/**
 * 
 * @author ybb
 * 连接access数据 
 * 获取access数据库数据,可以取到最新的数据
 * 2019年4月16日 下午2:48:33
 */
public class DBConnection { 
	/** 
	 * 该方法用来连接数据库 
	 * @param db:数据源名称 
	 * */  
	public static Connection getDBConnection(){  
		try{  
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//注册驱动  
			//Access中的数据库默认编码为GBK,本地项目为UTF-8,若不转码会出现乱码  
			Properties p = new Properties();  
			p.put("charSet", "GBK");  
			Connection connect= DriverManager.getConnection("jdbc:odbc:ceshi",p); 
			return connect;
		}catch(Exception e){  
			e.printStackTrace();  
			return null;
		}  
	}  

	/** 
	 * 该方法用来执行SQL并返回结果集 
	 * */  
	public static ResultSet selectQuery(String sql){  
		try{  
			PreparedStatement stmt = getDBConnection().prepareStatement(sql);  
			ResultSet rs = stmt.executeQuery();//执行SQL  
			return rs;  
		}catch(Exception e){  
			e.printStackTrace();  
			return null; 
		}  
	}  


	/** 
	 * 测试 
	 * */  
	public static void main(String[] args){  
		while(true){
			try{  
			    Connection connnect = DBConnection.getDBConnection();  
				if(connnect!=null){  
					System.out.println(connnect+"\n连接成功");  
				}else{  
					System.out.println("连接失败");  
				}  
				ResultSet rs1 = selectQuery("select * from CYJ_PD_QTJL");  
				if(rs1!=null){  
					while(rs1.next()){  
						System.out.println(rs1.getString(1)+"\t"+rs1.getString(2));    
					}  
				}  
				Thread.sleep(5000);
			}catch(Exception e){  
				e.printStackTrace();  
			}finally{  
//				closeConn();//关闭链接  
			}  
		}
	}  
}

  4、此时手动向CYJ_PD_QTJL表中添加数据。可以立刻查询到刚添加的数据。