1. 程式人生 > >java通過Access_JDBC30讀取access數據庫時無法獲取最新插入的記錄

java通過Access_JDBC30讀取access數據庫時無法獲取最新插入的記錄

resultset statement n) query get 成功 acc 無法 sql

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表中添加數據。可以立刻查詢到剛添加的數據。

java通過Access_JDBC30讀取access數據庫時無法獲取最新插入的記錄