zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

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

数据库连接 设计 v1.0
2023-09-27 14:23:55 时间

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;


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 ++i) { Object o = rs.getObject(i); System.out.print(o + " | "); System.out.println(); System.out.println();

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

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;


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 ++i) { Object o = rs.getObject(i); System.out.print(o + " | "); System.out.println(); System.out.println();
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());
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;
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());
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;
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 { 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{
数据库设计的步骤 数据库设计是指:根据用户的需求,在数据库管理系统上(比如:MySQL、Oracle),设计数据库的结构和建立数据库的过程。 数据库设计的设计内容包括:需求分析、概念结构设计、逻辑结构设计、物理结构设计、数据库的实施和数据库的运行和维护。
一文带你了解数据库设计基础 什么是数据库设计? 数据库设计(Database Design)是指对于一个给定的应用环境,构造最优的数据库模式,建立数据库及其应用系统,使之能够有效地存储数据,满足各种用户的应用需求(信息要求和处理要求)。在数据库领域内,常常把使用数据库的各类系统统称为数据库应用系统。
一文搞定关系数据库设计要领,值得收藏! 本文讨论关系数据库设计相关的一些内容,涉及关系模型,表结构设计等内容,以学生选修课程讲述设计过程,在尽量讲清楚设计要领的前提下,简化设计内容。
数据库设计中的14个技巧 . 原始单据与实体之间的关系 可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对 应且只对应一个实体。在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实 体,或多张原始单证对应一个实体。这里的实体可以理解为基本表。明确这种对应关系后,对我们设计 录入界面大有好处。