zoukankan      html  css  js  c++  java
  • java通过Access_JDBC30读取access数据库时无法获取最新插入的记录

    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+"
    连接成功");  
    				}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)+"	"+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+"
    连接成功");  
    				}else{  
    					System.out.println("连接失败");  
    				}  
    				ResultSet rs1 = selectQuery("select * from CYJ_PD_QTJL");  
    				if(rs1!=null){  
    					while(rs1.next()){  
    						System.out.println(rs1.getString(1)+"	"+rs1.getString(2));    
    					}  
    				}  
    				Thread.sleep(5000);
    			}catch(Exception e){  
    				e.printStackTrace();  
    			}finally{  
    //				closeConn();//关闭链接  
    			}  
    		}
    	}  
    }
    

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

  • 相关阅读:
    MyCat简介+Mybatis实现多租户(链接)
    mybatis的sql执行过程底层源码分析和缓存原理分析
    推荐算法数据集
    CentOS系统初始化
    NAT
    VRRP
    BGP协议的原理及应用
    ospf协议的重分发
    静态路由的原理与配置、动态路由
    OSPF (企业内部使用的动态路由协议)
  • 原文地址:https://www.cnblogs.com/ywx2/p/10724411.html
Copyright © 2011-2022 走看看