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