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;
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();上述代码运行一下看看哦:
运行结果:
补充一点,eclipse和mdb文件位于同一台电脑上,ip地址是172.16.90.170的虚拟机。经过上述操作,我们已经在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个技巧 . 原始单据与实体之间的关系 可以是一对一、一对多、多对多的关系。在一般情况下,它们是一对一的关系:即一张原始单据对 应且只对应一个实体。在特殊情况下,它们可能是一对多或多对一的关系,即一张原始单证对应多个实 体,或多张原始单证对应一个实体。这里的实体可以理解为基本表。明确这种对应关系后,对我们设计 录入界面大有好处。
相关文章
- 数据库管理工具 Navicat 和 DBeaver
- Django中的模型(操作数据库)
- PHP数据库连接失败--could not find driver 解决办法
- 第七节:语法总结(1)(自动属性、out参数、对象初始化器、var和dynamic等) 图片放大镜 JavaScript-基础 用javascript写原生ajax(笔记) 初遇 Asp.net MVC 数据库依赖缓存那些事儿 前端JS 与 后台C# 之间JSON序列化与反序列化(笔记)
- Oracle可插拔数据库的jdbc连接串写法
- 实操演练 | 探索数据库中的枚举ENUM(存储、验证、插入和检索)
- 通过SSH隧道连接MySql或者MariaDB报错,SSH能连通,数据库不行(navicat报1002,DBeaver报返回数据包大小为0)
- C#数据库教程6-ADO.NET用户数据导入数据库的几种类型
- C#增删改查操作Access数据库之二(数据库的增加)
- JDBC连接数据库详细教程指南
- 端口映射+物理机、虚拟机互访+Pyqt5、Gui图形化界面+Mysql数据库
- JPA整合达梦数据库
- Android-用webservice连接sqlserver数据库
- 用Java连接SQL Server2000数据库的两种方法与jDTS
- Python与数据库 sqlalchemy 建立声明层表对象的两种方式
- App升级时数据库的迁移更新
- Java学习-006-三种数据库连接 MySQL、Oracle、sqlserver
- 一、数据库层搭建
- node.js的(express)连接数据库版本8出现连接失败的解决办法,亲测有效
- Java_jdbc 基础笔记之七 数据库连接(方法升级)
- 关于安卓通过webservice访问数据库问题
- ASMB的BUG(ORA-04030 kfmditer)导致数据库宕机
- Java七步创建以JDBC连接数据库的程序
- springMVC 配置jdbcTemplate连接Oracle数据库出错
- Mysql学习之十二:JDBC连接数据库之DriverManager方法
- 关于SQL Server服务占用内存过大---限制数据库内存使用