RUKU v1.0数据库设计与连接

简介: 数据库相关设计

1.使用access数据库
对,你看的没错,我们要用java代码连接access数据库,读取数据进行处理
_
如上图所示的代码就可以。

但是很遗憾,jdk8以后java不再支持jdbc odbc bridge这个功能:
http://www.oracle.com/technetwork/java/javase/8-compatibility-guide-2156366.html
_
_
_
也就是说如果你希望使用jdk自身的jdbcodbc bridge,你就必须使用jdk6之类的老版本,在2017年9月这个时间点,这个要求十分荒谬。
我们的决定是继续使用jdk8但是放弃jdk自身的access访问方式,转而使用第三方软件包。
软件包的名字叫 ucanaccess, sourceforge网站如下所示:
https://sourceforge.net/projects/ucanaccess/
_
很开心看到这个包在2017年8月还在被维护
在这里岔开话题,因为没有在sourceforge上找到ucanaccess的maven信息
假如你看上了一个java项目想要导入自己的eclipse,你绝对不能直接下载这个项目的jar包然后去环境变量或者其他方式引用,因为那样做就是个土鳖。
你必须使用maven。
怎么才能找到这个项目的maven信息呢?
哈哈哈
上强大的www.yahoo.com吧
yahoo一下 "ucanaccess maven"得到的结果如下图:
_
_
_
_
按照上图所示的信息,在你自己的eclipse的maven project上进行配置吧
_
_
_
我们打算使用ucanaccess进行access的数据库访问(*.mdb文件),首先第一个问题:ucanaccess怎么使用?
这个问题其实很傻逼,因为表面看上去确实官方网站没有这方面的文档。
但这只是表面,实际上https://sourceforge.net/projects/ucanaccess/files/
提供了example 告诉了我们怎么使用ucanaccess
_
下载上述文件 UCanAccess-4.0.1-src.zip
打开看看你就明白了
_
看见了吧,傻逼把example藏起来,是何居心啊
复制粘贴ucanaccess的example代码写了一个java文件读取本地mdb文件,效果还不错哦,代码如下:

package com.infotech.access;

import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.io.IOException;

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

import net.ucanaccess.converters.TypesMap.AccessType;
import net.ucanaccess.ext.FunctionType;
import net.ucanaccess.jdbc.UcanaccessConnection;
import net.ucanaccess.jdbc.UcanaccessDriver;


public class AccessTest {

    public Connection ucaConn = null;
    public Statement stmt = null;
    public ResultSet srs = null;
    public ResultSetMetaData rsmd=null;

    public static Connection conn2 = null;
    public static Statement stmt2 = null;
    public static ResultSet srs2 = null;
    public static ResultSetMetaData rsmd2=null;
    

    public AccessTest(String pathNewDB) {
        
        try {
            
            this.ucaConn=getUcanaccessConnection(pathNewDB);
            
        } catch (SQLException e) {
            
            e.printStackTrace();
            
        } catch (IOException e) {
            
            e.printStackTrace();
            
        }
        
    }

    
    private static Connection getUcanaccessConnection(String pathNewDB) throws SQLException,IOException {
        
         String url = UcanaccessDriver.URL_PREFIX + pathNewDB+";newDatabaseVersion=V2003";

         return DriverManager.getConnection(url, "admin", "");
         
    }
    
    /**
     *  一个简易Query查询
     *  
     */
    private void executeQuery() throws SQLException {
        
        Statement st = null;
        
        try {
            
            st = this.ucaConn.createStatement();
            ResultSet rs = st.executeQuery("SELECT * from 花名册");
            dump(rs,"executeQuery");
            
        } finally {
            
            if (st != null)
                st.close();
            
        }
        
    }
    
    /**
     *   显示ResultSet中的内容
     */
    private static void dump(ResultSet rs,String exName)
            throws SQLException {
        
        System.out.println("-------------------------------------------------");
        System.out.println();
        System.out.println(exName+" result:");
        System.out.println();
        while (rs.next()) {
            System.out.print("| ");
            int j=rs.getMetaData().getColumnCount();
            for (int i = 1; i <=j ; ++i) {
                Object o = rs.getObject(i);
                System.out.print(o + " | ");
            }
            System.out.println();
            System.out.println();
        }
        
    }
    
    
    public static void main(String[] args) throws ClassNotFoundException, SQLException{
        
        Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
        
        try {
            
            AccessTest ex=new AccessTest("\\\\172.16.90.170\\share\\cardtemp_be.mdb");
            
            ex.executeQuery();

/*            ex.createTablesExample();
            ex.insertData();
            ex.executeQuery();
            ex.executeQueryWithFunctions();
            ex.executeQueryWithCustomFunction();
            ex.executeLikeExample();
            ex.showExtensions();
            ex.transaction();*/
            
        } catch (Exception e) {
            
            e.printStackTrace();
            
        }
        
    
        System.out.println("access db testing...");

    }

}

上述代码运行一下看看哦:

screenshot
运行结果:

screenshot
补充一点,eclipse和mdb文件位于同一台电脑上,ip地址是172.16.90.170的虚拟机。
screenshot

经过上述操作,我们已经在jdk8的环境中部署了ucanaccess,这样就可以使用java代码直接访问access数据库中的数据

下面我们在此基础上,引入之前自己编写的java方法代码如下,看看运行的效果:

package com.infotech.access;

import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.io.IOException;

import java.sql.SQLException;
import java.util.*;

import java.sql.*;
import java.math.*;

import net.ucanaccess.converters.TypesMap.AccessType;
import net.ucanaccess.ext.FunctionType;
import net.ucanaccess.jdbc.UcanaccessConnection;
import net.ucanaccess.jdbc.UcanaccessDriver;


public class AccessTest {

    public Connection ucaConn = null;
    public Statement stmt = null;
    public ResultSet srs = null;
    public ResultSetMetaData rsmd=null;

    public static Connection conn2 = null;
    public static Statement stmt2 = null;
    public static ResultSet srs2 = null;
    public static ResultSetMetaData rsmd2=null;
    

    /**
     * example 中提供的构造函数
     * 
     */
    public AccessTest(String pathNewDB) {
        
        try {
            
            this.ucaConn=getUcanaccessConnection(pathNewDB);
            
        } catch (SQLException e) {
            
            e.printStackTrace();
            
        } catch (IOException e) {
            
            e.printStackTrace();
            
        }
        
    }
    
    /**
     *  自己写的构造函数
     */
    public AccessTest(){
        
        
    }
    
    private static Connection getUcanaccessConnection(String pathNewDB) throws SQLException,IOException {
        
         String url = UcanaccessDriver.URL_PREFIX + pathNewDB+";newDatabaseVersion=V2003";

         return DriverManager.getConnection(url, "admin", "");
         
    }
    
    /**
     *  一个简易Query查询
     *  
     */
    private void executeQuery() throws SQLException {
        
        Statement st = null;
        
        try {
            
            st = this.ucaConn.createStatement();
            ResultSet rs = st.executeQuery("SELECT * from RoHS");
            //ResultSet rs = st.executeQuery("SELECT * from 花名册");
            dump(rs,"executeQuery");
            
        } finally {
            
            if (st != null)
                System.out.println("------finally------");
                st.close();
            
        }
        
    }
    
    /**
     *   显示ResultSet中的内容
     */
    private static void dump(ResultSet rs,String exName)
            throws SQLException {
        
        System.out.println("-------------------------------------------------");
        System.out.println();
        System.out.println(exName+" result:");
        System.out.println();
        while (rs.next()) {
            
            System.out.print("| ");
            int j=rs.getMetaData().getColumnCount();
            for (int i = 1; i <=j ; ++i) {
                Object o = rs.getObject(i);
                System.out.print(o + " | ");
            }
            System.out.println();
            System.out.println();
            
        }
        
    }
    
    
    /**
     * 连接access数据库的方法(测试可用)
     */
    public void OpenConnAC()throws Exception{
        
        try{
            
            Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
        
            ucaConn=DriverManager.getConnection(UcanaccessDriver.URL_PREFIX + "\\\\172.16.30.106\\share\\入库检验_be.mdb" + ";newDatabaseVersion=V2003", "admin", "" );
        
            ucaConn.setAutoCommit(false);
        
        }
        catch(Exception e){ 
        
            System.err.println("OpenConnAC:exception"+e.getMessage());
            
        }

}
    
    
    
   /**
    * 带有输入参数的executeQuery()
    * @return
    */
    public ResultSet executeQuery(String sql) {

        try {
            stmt = ucaConn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            srs = stmt.executeQuery(sql);

        } catch (SQLException e) {
            System.err.println("executeQuery:" + e.getMessage());
        }
        return srs;
    }
    
    
    /**
     * 执行更新
     */
    public void executeUpdate(String sql) {

        try {

            stmt = ucaConn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            stmt.executeUpdate(sql);
            ucaConn.commit();
            
        } catch (SQLException e) {
            System.err.println("executeUpdate:" + e.getMessage());
        }
    }

    
    /**
     * 关闭资源
     */
    public void close() {
        
        try {
            if (srs != null) {
                srs.close();
            }
            if (stmt != null) {
                stmt.close();
            }
            if (ucaConn != null) {
                ucaConn.close();
            }
        } catch (Exception e) {
            e.printStackTrace(System.err);
        }
        
    }
    
    /**
     * used to return the num of the resultset
     * @param     输入参数 sql语句 
     * @return    返回值 语句执行结果集的元素数目
     */
    public int iRSNum(String sql) {

        String sRsnum = "";
        int iRsnum = 0;
        try {
            stmt = ucaConn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            srs = stmt.executeQuery(sql);
            //System.out.println("----iRSNum()----");
        } catch (SQLException e) {
            System.err.println("executeQuery:" + e.getMessage());
        }

        try {
            srs.last();
            sRsnum = srs.getString(1);
            iRsnum = Integer.parseInt(sRsnum);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return iRsnum;

    }
    
    
    /**
     * @param sTname 输入参数 表 名
     * @return       返回值 表 中记录数目
     */
    public int iRSNum2(String sTname){

        String sRsnum = "";
        int iRsnum = 0;
        try {
            stmt = ucaConn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

            System.out.println("Query OK");

            srs = stmt.executeQuery("select count(*) from " + sTname);

        } catch (SQLException e) {
            System.err.println("executeQuery:" + e.getMessage());
        }
            
                
        try {
            srs.last();
            sRsnum = srs.getString(1);
            iRsnum = Integer.parseInt(sRsnum);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        System.out.println("-------iRSNum2()--------");
        return iRsnum;
    }
    
    
    /**
     * 执行sql查询,
     * @param sql
     * @return
     */
    public Vector testF(String sql) {

        int numCols = 0;
        //int rowCount = 0;
        String st = null;
        Vector vo = new Vector();

        try {
            stmt = ucaConn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            srs = stmt.executeQuery(sql);
            rsmd = srs.getMetaData();
            numCols = rsmd.getColumnCount(); // 属性数目
            srs.last(); // 移到最后一行
            //rowCount = srs.getRow(); // 得到当前行号,也就是记录数
            srs.beforeFirst();

            while (srs.next()) {
                Vector v = new Vector();
                for (int j = 0; j < numCols; j++) {
                    st = srs.getString(j + 1) == null ? "" : srs.getString(j + 1);
                    v.addElement(st);
                    v.trimToSize();
                }
                vo.addElement(v);
                vo.trimToSize();
            }

        } catch (NullPointerException ex1) {
            ex1.printStackTrace();
            System.out.println("fucking you" + ex1.getMessage());
        } catch (SQLException sqle) {
            sqle.printStackTrace();
        } finally {

            try {
                
                  if (srs != null) {
                    srs.close();
                  }
                  if (stmt != null) {
                    stmt.close();
                  }
                  if (ucaConn != null) {
                    // ucaConn.close();
                    // 因为执行了ucaConn.close()之后,会造成 抛出SQL的异常,于是暂时屏蔽这句话
                  }

                } catch (SQLException sqle) {
                  sqle.printStackTrace();
                  System.out.println(sqle.getMessage());
            }

        }
        
        return vo;
    }
    
    
    /**
     *  
     */
    public static void main(String[] args) throws ClassNotFoundException, SQLException{
        
        /*  测试1 example 中的测试代码
         * 
         * 
         * Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
        
        try {
            
            AccessTest ex=new AccessTest("\\\\172.16.30.106\\share\\入库检验_be.mdb");

            ex.executeQuery();
            
        } catch (Exception e) {
            
            e.printStackTrace();
            
        }
        测试1 结束
        
        */
        
        try{
            
            AccessTest ex = new AccessTest();
            
            ex.OpenConnAC();
            
            Vector v=ex.testF("select * from 检验表");
            
            //int irn = ex.iRSNum("SELECT * from RoHS");
            
            //int irn = ex.iRSNum2("检测表");
            
            //System.out.println("total number the resultset is: "+irn);
            
            for(int i=0;i<v.size();i++){
                
                  Vector v2=(Vector)v.elementAt(i);
                
                    for(int j=0;j<v2.size();j++){
                
                       String sId=(String)v2.elementAt(j);
                       System.out.println("the name is:"+sId);
                
                    }
                }
            
            //释放资源
            ex.close();
            
        } catch(Exception e){
            
            e.printStackTrace();
            
        } finally{
            
            
            
            
        }
        
    
        System.out.println("access db test ending...");

    }

}

上述代码中,testF()方法

目录
相关文章
|
3月前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:详细步骤与最佳实践指南ali01n.xinmi1009fan.com
随着Web开发技术的不断进步,ASP.NET已成为一种非常流行的Web应用程序开发框架。在ASP.NET项目中,我们经常需要与数据库进行交互,特别是SQL数据库。本文将详细介绍如何在ASP.NET项目中连接SQL数据库,并提供最佳实践指南以确保开发过程的稳定性和效率。一、准备工作在开始之前,请确保您
345 3
|
2月前
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
139 68
|
2月前
|
数据库 C# 开发者
ADO.NET连接到南大通用GBase 8s数据库
ADO.NET连接到南大通用GBase 8s数据库
|
2月前
|
数据库连接 Linux Shell
Linux下ODBC与 南大通用GBase 8s数据库的无缝连接配置指南
本文详细介绍在Linux系统下配置GBase 8s数据库ODBC的过程,涵盖环境变量设置、ODBC配置文件编辑及连接测试等步骤。首先配置数据库环境变量如GBASEDBTDIR、PATH等,接着修改odbcinst.ini和odbc.ini文件,指定驱动路径、数据库名称等信息,最后通过catalog.c工具或isql命令验证ODBC连接是否成功。
|
2月前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
69 3
|
3月前
|
关系型数据库 MySQL 数据库连接
DBeaver如何连接一个数据库
【10月更文挑战第27天】DBeaver 是一款功能强大的通用数据库管理工具,支持多种主流数据库。本文介绍了使用 DBeaver 连接数据库的基本步骤,包括下载安装、创建新连接、选择数据库类型、配置连接参数、测试连接以及最终连接到数据库。详细的操作指南帮助用户轻松管理和操作数据库。
708 9
|
2月前
|
JSON JavaScript 关系型数据库
node.js连接GBase 8a 数据库 并进行查询代码示例
node.js连接GBase 8a 数据库 并进行查询代码示例
|
2月前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
55 1
|
2月前
|
Java 数据库连接 数据库
Java连接池在数据库性能优化中的重要作用。连接池通过预先创建和管理数据库连接,避免了频繁创建和关闭连接的开销
本文深入探讨了Java连接池在数据库性能优化中的重要作用。连接池通过预先创建和管理数据库连接,避免了频繁创建和关闭连接的开销,显著提升了系统的响应速度和吞吐量。文章介绍了连接池的工作原理,并以HikariCP为例,展示了如何在Java应用中使用连接池。通过合理配置和优化,连接池技术能够有效提升应用性能。
68 1
|
2月前
|
数据库连接 数据库 C#
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)
Windows下C# 通过ADO.NET方式连接南大通用GBase 8s数据库(上)