JAVA操作数据库方式与设计模式应用-Java基础-Java-编程开发

初级Java开发面试题————操作数据库方式与设计模式应用 1. 在业务层使用JDBC直接操作数据库-最简单,最直接的操作 1)数据库url,username,password写死在代码中 Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url="jdbc:oracle:thin:@localhost:1521:orcl"; String user="scott"; String password="tiger"; C 阅读详情
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>

1. 在业务层使用JDBC直接操作数据库-最简单,最直接的操作

1)数据库url,username,password写死在代码中

Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl";
String user="scott";
String password="tiger";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(
ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
2)采用Facade和Command模式,使用DBUtil类封装JDBC操作;
数据库url,username,password可以放在配置文件中(如xml,properties,ini等)。
这种方法在小程序中应用较多。
2.DAO(Data Accessor Object)模式-松耦合的开始
DAO = data accessor domain object
例如User类-domain object (javabean)
UserDAO类-accessor ,提供的方法getUser(int id),save(User user)内包含了JDBC操作
在业务逻辑中使用这两个类来完成数据操作。

使用Factory模式可以方便不同数据库连接之间的移植。

3.数据库资源管理模式
3.1 数据库连接池技术
资源重用,避免频繁创建,释放连接引起大大量性能开销;
更快的系统响应速度;

通过实现JDBC的部分资源对象接口( Connection, Statement, ResultSet ),可以使用Decorator设计模式分别产生三种逻辑资源对象: PooledConnection, PooledStatement和 PooledResultSet。


一个最简单地数据库连接池实现:
public class ConnectionPool {

private static Vector pools;
private final int POOL_MAXSIZE = 25;
/**
* 获取数据库连接
* 如果当前池中有可用连接,则将池中最后一个返回;若没有,则创建一个新的返回
*/
public synchronized Connection getConnection() {
Connection conn = null;
if (pools == null) {
pools = new Vector();
}

if (pools.isEmpty()) {
conn = createConnection();
} else {
int last_idx = pools.size() - 1;
conn = (Connection) pools.get(last_idx);
pools.remove(last_idx);
}

return conn;
}

/**
* 将使用完毕的数据库连接放回池中
* 若池中连接已经超过阈值,则关闭该连接;否则放回池中下次再使用
*/
public synchronized void releaseConnection(Connection conn) {
if (pools.size() >= POOL_MAXSIZE)
try {
conn.close();
} catch (SQLException e) {
// TODO自动生成 catch 块
e.printStackTrace();
} else
pools.add(conn);
}

public static Connection createConnection() {
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url = "jdbc:oracle:thin:@localhost:1521:orcl";
String user = "scott";
String password = "tiger";
conn = DriverManager.getConnection(url, user, password);
} catch (InstantiationException e) {
// TODO自动生成 catch 块
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO自动生成 catch 块
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO自动生成 catch 块
e.printStackTrace();
} catch (SQLException e) {
// TODO自动生成 catch 块
e.printStackTrace();
}
return conn;
}
}
注意:利用getConnection()方法得到的Connection,程序员很习惯地调用conn.close()方法关闭了数据库连接,那么上述的数据库连接机制便形同虚设。在调用conn.close()方法方法时如何调用releaseConnection()方法?这是关键。这里,我们使用Proxy模式和java反射机制。
public synchronized Connection getConnection() {
Connection conn = null;
if (pools == null) {
pools = new Vector();
}

if (pools.isEmpty()) {
conn = createConnection();
} else {
int last_idx = pools.size() - 1;
conn = (Connection) pools.get(last_idx);
pools.remove(last_idx);
}

ConnectionHandler handler=new ConnectionHandler(this);
return handler.bind(con);
}

public class ConnectionHandler implements InvocationHandler {
private Connection conn;
private ConnectionPool pool;

public ConnectionHandler(ConnectionPool pool){
this.pool=pool;
}

/**
* 将动态代理绑定到指定Connection
* @param conn
* @return
*/
public Connection bind(Connection conn){
this.conn=conn;
Connection proxyConn=(Connection)Proxy.newProxyInstance(
conn.getClass().getClassLoader(), conn.getClass().getInterfaces(),this);
return proxyConn;
}

/* (非 Javadoc)
* @see java.lang.reflect.InvocationHandler#invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
*/
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// TODO自动生成方法存根
Object obj=null;
if("close".equals(method.getName())){
this.pool.releaseConnection(this.conn);
}
else{
obj=method.invoke(this.conn, args);
}

return obj;
}
}
在实际项目中,并不需要你来从头开始来设计数据库连接池机制,现在成熟的开源项目,如C3P0,dbcp,Proxool等提供了良好的实现。一般推荐使用Apache dbcp,基本使用实例:
DataSource ds = null;
try{
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
ds = (DataSource)envCtx.lookup("jdbc/myoracle");
if(ds!=null){
out.println("Connection is OK!");
Connection cn=ds.getConnection();
if(cn!=null){
out.println("cn is Ok!");
Statement stmt = cn.createStatement();
ResultSet rst = stmt.executeQuery("select * from BOOK");
out.println("

rst is Ok!" rst.next());
while(rst.next()){
out.println("

BOOK_CODE:" rst.getString(1));
}
cn.close();
}else{
out.println("rst Fail!");
}
}
else
out.println("Fail!");
}catch(Exception ne){ out.println(ne);
}

3.2 Statement Pool
普通预编译代码:
String strSQL=”select name from items where id=?”;
PreparedStatement ps=conn.prepareStatement(strSQL);
ps.setString(1, “2”);
ResultSet rs=ps.executeQuery();
但是PreparedStatement 是与特定的Connection关联的,一旦Connection关闭,则相关的PreparedStatement 也会关闭。
为了创建PreparedStatement 缓冲池,可以在invoke方法中通过sql语句判断池中还有没有可用实例。

4. 持久层设计与O/R mapping 技术
1) Hernate:适合对新产品的开发,进行封闭化的设计
Hibernate 2003年被Jboss接管,通过把java pojo对象映射到数据库的table中,采用了xml/javareflection技术等。3.0提供了对存储过程和手写sql的支持,本身提供了hql语言。
开发所需要的文件:
hibernate配置文件: hibernate.cfg.xml 或 hibernate.properties
hibernate 映射文件: a.hbm.xml
pojo类源文件: a.java  

导出表与表之间的关系:
a. 从java对象到hbm文件:xdoclet
b. 从hbm文件到java对象:hibernate extension
c. 从数据库到hbm文件:middlegen
d. 从hbm文件到数据库:SchemaExport

2)Iatis :适合对遗留系统的改造和对既有数据库的复用,有很强的灵活性 3) Apache OJB:优势在于对标准的全面支持 4)EJB:适合集群服务器,其性能也不象某些人所诟病的那么差劲 5) JDO (java data object)
设置一个Properties对象,从而获取一个JDO的PersistenceManagerFactory(相当于JDBC连接池中的DataSource),进而获得一个PersistenceManager对象(相当于JDBC中的Connection对象),之后,你可以用这个PersistenceManager对象来增加、更新、删除、查询对象。
JDOQL是JDO的查询语言;它有点象SQL,但却是依照Java的语法的。

5. 基于开源框架的Struts Spring Hibernate实现方案
示例:这是一个3层架构的web 程序,通过一个Action 来调用业务代理,再通过它来回调 DAO类。下面的流程图表示了MyUsers是如何工作的。数字表明了流程的先后顺序,从web层(UserAction)到中间层(UserManager),再到数据层(UserDAO),然后返回。
Spring是AOP, UserManager和UserDAO都是接口.
1) web层(UserAction) :调用中间层的接口方法,将UserManager作为属性注入。
采用流行的Struts框架,虽然有很多人不屑一顾,但是这项技术在业界用的比较普遍,能满足基本的功能,可以减少培训学习成本。
2) 中间层(UserManager):将UserDAO作为属性注入,其实现主要是调用数据层接口的一些方法;它处于事务控制中。
采用Spring框架实现,IOC与AOP是它的代名词,功能齐全,非常棒的一个架构。
3) 数据层(UserDAO):实现类继承HibernateDaoSupport类,在该类中可以调用getHibernateTemplate()的一些方法执行具体的数据操作。
采用Hibernate做O/R mapping,从种种迹象可以看出,Hibernate就是EJB3.0的beta版。

基于Java的公共交通查询系统开发与实战 公共交通查询系统是一个典型的综合型Java应用,旨在为用户提供公交、地铁线路查询、换乘方案推荐、实时到站信息获取等核心功能。系统采用模块化设计,结合GUI界面、网络通信、数据库操作与算法优化等多方面技术,构建出一个功能完善、响应迅速的桌面应用。在技术选型上,本系统基于Java语言开发,利用其跨平台特性与丰富的类库支持,提升开发效率与系统稳定性。前端采用Swing或JavaFX实现用户交互界面;后端通过HttpURLConnection或OkHttp完成与公交API的网络通信; 阅读详情

相关推荐

Java编程基础:简易项目实践指南

本文还有配套的精品资源,点击获取 简介:本项目“示例:示例项目”是一个教学目的创建的应用,意在向初学者展示Java语言的基本概念和实际应用。通过构建一个简单命令行程序或带有图形用户界面的应用,学习者可以掌握Java编程的各个方面,包括基础语法、面向对象设计、异常处理、集合框架、输入输出操作、多线程、网络编程、反射机制以及数据库交互。本项目旨在帮助初学者全面理解Java编程,...

weixin_42527665的博客 1000

Java Web 应用开发基础入门

本文介绍了JavaWeb应用开发的基础知识,包括开发环境搭建、核心技术和实践应用。首先概述了JavaWeb应用的定义和优势,如跨平台性、丰富的框架生态和高性能。然后详细讲解了开发环境配置,涉及JDK、Tomcat和IDE的安装。在技术层面,重点介绍了Servlet的生命周期、JSP语法以及MVC设计模式的实现方法。最后通过MySQL数据库操作示例展示了JavaWeb应用的完整开发流程。文章还提供了常见问题解决方案,为初学者提供了全面的JavaWeb开发入门指导。

lyl040215的博客 2611

深入掌握Java设计模式及应用

本文还有配套的精品资源,点击获取 简介:设计模式作为软件工程中的最佳实践,为解决常见问题提供了模板。在Java编程中,运用这些模式能够显著提升代码的可读性、可维护性和可复用性。本书详细探讨了Java中各种设计模式的应用,包括单例、工厂、抽象工厂、建造者、原型、适配器、装饰器、代理、桥接、组合、享元、观察者、责任链、命令、迭代器、模版方法、策略、状态、访问者和备忘录模式。每种...

weixin_42587866的博客 1215

JAVA操作数据库方式与设计模式应用

JAVA操作数据库方式与设计模式应用 1. 在业务层使用JDBC直接操作数据库-最简单,最直接的操作1)数据库url,username,password写死在代码中Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url="jdbc:oracle:thin:@localhost:1521:orcl"; St

chymilk'blog 787

Java编程基础与实践教程:初学者指南

本文还有配套的精品资源,点击获取 简介:Java是一种面向对象的编程语言,以“一次编写,到处运行”闻名,得益于Java虚拟机(JVM)。本教程为初学者设计,详尽覆盖Java编程的基础知识,包括环境搭建、基础语法、面向对象概念、数组操作、字符串处理、异常处理、输入输出流、集合框架、多线程编程、IO/NIO以及基本设计模式。教程以.chm格式提供,便于电子阅读和搜索,还包含实践...

weixin_42561464的博客 674

学生4学生应用:Java开发与技术栈解析

本文还有配套的精品资源,点击获取 简介:该应用是一个针对学生群体的软件项目,由Java开发,涵盖生活学习功能。文章深入解析了应用开发的关键技术要点,包括Java基础、MVC设计模式、Spring框架、RESTful API、数据库管理、前后端交互、安全机制、测试、版本控制、构建工具、CI/CD流程、前端技术和数据持久化等内容。 1. Java基础知识点 Ja...

weixin_34471637的博客 832

Java学习路线-40:Java数据库编程基础操作

第36 章 : Java数据库编程基础操作 156 JDBC简介 JDBC 属于一种服务,所有服务都必须按照指定的流程进行操作 Java Database Connectivity 开发包 java.sql 核心组成 DriverManager 接口 Connection、Statement、PreparedStatement、ResultSet 四种连接方式: JDBC-ODBC 桥连接 JDK...

彭世瑜的博客 1301

Java数据库操作基础:BaseDAO项目实战分析

本文还有配套的精品资源,点击获取 简介:在Java开发中,数据库操作是不可或缺的一部分,而 BaseDAO 作为一个设计模式,简化了数据库的CRUD操作,并实现了业务层与数据存储的解耦。本文通过分析 java雷霆战机 项目中的 BaseDAO.java 文件,深入探讨了其依赖注入、JDBC模板方法、CRUD操作、事务管理、参数绑定及...

weixin_42576410的博客 975

并发编程性能优化策略设计模式的实际应用JAVA

成为一名优秀的Java开发者不仅需要扎实的基础知识,还需要不断跟踪最新的技术发展,勇于尝试新的工具和框架。希望本文能够为您的成长之路提供有价值的参考,激发更多的创新思维。在未来的工作中,愿您能够灵活运用所学,打造出高性能、可扩展且易于维护的Java应用程序。请注意,这只是一个大致的框架,您可以根据实际情况添加更多细节或者调整内容重点。如果您有特定的技术点想要深入讨论,或者对某些部分有特殊要求,请随时告诉我。往期文章第一章:日常_JAVA_面试题集(含答案)第二章:日常_JAVA_面试题集(含答案)

JAVA开发CRM范的博客 2147

Java Web CRUD操作与MVC模式实战教程

Java Web应用架构是企业级应用开发中不可或缺的部分,它涉及了从客户端浏览器到服务器端的多种组件。Java Web架构主要包括前端展示层、业务逻辑层以及数据持久层。前端展示层主要负责与用户进行交互,使用HTML、CSS和JavaScript等技术构建用户界面。业务逻辑层则由Java Servlet和JavaServer Pages (JSP)等组件构成,处理业务逻辑和请求转发。数据持久层是与数据库或其他存储系统进行数据交换的层,通常利用JDBC或ORM框架(如Hibernate)来实现。

weixin_30798867的博客 1047

深入解析NPN与PNP传感器驱动电路的设计逻辑与实战应用

本文深入解析NPN与PNP传感器驱动电路的设计逻辑与实战应用,详细对比两者的电流路径差异和电平变化特性。通过实际案例分享电路设计要点,包括上拉电阻选择、保护二极管配置等,并提供工业应用中的选型策略和常见故障排查指南,帮助工程师优化传感器系统集成。

weixin_42561476的博客 472

JAVA中操作数据库方式与设计模式的应用

JAVA中数据库操作的各种方式与设计模式的应用                                                                                                      青山不改绿水长流-EKing  1.   在业务层使用JDBC直接操作数据库-最简单,最直接的操作紧耦合方式,黑暗中的痛苦 

3409

从零到一:Ubuntu22.04下VSCode与中文输入法的深度整合指南

本文详细介绍了在Ubuntu22.04系统中如何深度整合VSCode与中文输入法,包括环境准备、安装方案对比、输入法配置及常见问题解决方案。通过fcitx框架优化中文输入体验,提供从基础设置到高级调试的全方位指南,帮助开发者提升在Linux环境下的开发效率。

weixin_29158047的博客 482

JAVA中数据库操作的各种方式与设计模式的应用

1.   在业务层使用JDBC直接操作数据库-最简单,最直接的操作紧耦合方式,黑暗中的痛苦 1)数据库url,username,password写死在代码中    Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();     String url="jdbc:oracle:thin:@localh

闲居散人C#学习专区 822

抖音a_bogus参数逆向避坑指南:从环境检测到XHR请求的全流程解析

本文详细解析了抖音a_bogus参数在v1.0.1.19版本下的逆向工程全流程,重点介绍了如何通过PyV8Env框架进行有效的补环境操作,以绕过严格的环境检测。内容涵盖从环境初始化、关键事件触发到模拟XHR请求获取签名的完整步骤,并提供了可运行的Python代码示例和常见检测点的避坑指南,帮助开发者稳定生成有效的a_bogus参数。

tech5的博客 603

信创迁移实战:在银河麒麟V10-SP1上为Milvus离线部署Docker(附SP1专属避坑指南)

本文详细介绍了在银河麒麟V10-SP1 x86_64环境下离线部署Docker的全流程,特别针对该版本特有的自定义目录安装失败问题提供深度分析和解决方案。通过实战验证的步骤和避坑指南,帮助用户在信创项目中顺利完成Milvus等应用的容器化部署。

weixin_30687051的博客 532

java 操作日志设计_优雅的讲解JAVA操作数据库方式与设计模式应用

1. 在业务层使用JDBC直接操作数据库-最简单,最直接的操作1)数据库url,username,password写死在代码中Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); String url="jdbc:oracle:thin:@localhost:1521:orcl"; String user="...

weixin_32352621的博客 504

Cadence数模混合仿真实战:从Verilog到ADE L的完整流程解析

本文详细解析了Cadence数模混合仿真的完整流程,从Verilog代码编写到ADE L仿真环境配置。通过实战案例讲解如何创建Config文件、搭建混合信号原理图,并分享提高仿真效率的技巧和常见问题排查方法,帮助工程师掌握这一关键芯片设计验证技术。

weixin_29246195的博客 988

【Java编程实战核心语法、设计模式与企业级应用开发】

本文展示了如何通过核心语句的优化、设计模式的场景化应用以及大规模系统的架构设计,构建健壮高效的业务系统。在数字化转型加速的当下,开发者需持续关注领域驱动设计(DDD)、云原生技术栈等前沿方向,并在实际项目中践行“可维护性优先”的原则,方能应对复杂企业级挑战。无论是基础代码结构的规范性,还是复杂系统的架构规划,开发者都需要将语言的核心语句、设计模式与业务场景深度融合。本文将从实战角度出发,结合代码示例和案例分析,探讨Java核心语句的高效实践、设计模式的场景化应用,以及企业级应用开发的关键原则。

dpXapvkm的博客 710

三菱MC协议(MC/TCP):避坑指南|C#实现三菱MC协议:软元件(X/Y/M/D)读写与帧格式解析

核心避坑逻辑:MC协议的坑80%集中在“PLC配置”“地址编码”“字节序”,先解决这三点,通信就成功了一半;实战优先级:新手优先用开源库(Mitsubishi.MCProtocol),避免手动拼接帧格式的复杂坑;进阶再研究帧格式解析;排坑技巧:先Ping通→用调试助手验证→写C#代码,分层排查,不要混在一起找问题。掌握这些避坑技巧后,你可以轻松实现C#与三菱全系列PLC的稳定通信,满足工业场景中数据采集、设备控制等核心需求。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 2197

OpenCV计算机视觉实战(12)——图像金字塔与特征缩放

图像金字塔技术通过对原始图像按不同分辨率进行多层次表示,不仅能提升计算效率,还能为图像融合、检测与识别提供多尺度特征。高斯金字塔 (Gaussian Pyramid) 用于构建多级低通图像,拉普拉斯金字塔 (Laplacian Pyramid) 则提取各层之间的细节信息。本节将深入介绍如何使用 OpenCV 构建高斯与拉普拉斯金字塔,并以经典的图像融合案例,展示图像金字塔在特征缩放与融合中的强大应用。

qq_30167691的博客 1404

JAVA设计模式——单例模式八种方式

目录 单例模式简介: 应用场景: 单例设计模式的八种方式: 1、饿汉式(静态常量) 2、饿汉式(静态代码块) 3、懒汉式(线程不安全) 4、懒汉式(线程安全,同步方法) 5、懒汉式(线程安全,同步代码块) 6、双重检查(推荐使用) 7、静态内部类(推荐使用) 8、枚举(推荐使用) 单例模式在JDK应用的源码分析 单例模式注意事项和细节说明 单例模式简介: 单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供

龍弟-idea的博客 7110

【Linux0.11代码分析】之 系列文章链接汇总(全)

【Linux0.11代码分析】00 之 系列文章链接汇总(全)

|~~~热爱生活、努力学习的小伙汁~~~| 1449

不就看一下Java后端开发书架吗?这有啥不行(Java后端开发书籍)

本文 Github开源项目:github.com/hansonwang99/JavaCollection 中已收录,有详细自学编程学习路线、面试题和面经、编程资料及系列技术文章等,资源持续更新中… 先唠会嗑 前面刚刚整理过了「Java后端开发学习路线」,很多小伙伴也说让推荐一些对应的书籍瞧瞧。 推荐是没问题,但是有些话还是想聊聊看。 首先毫无疑问的是,对于 「编程基础」 部分,有大量经典的书籍值得阅读,每一本都是大师们若干年经验的汇聚,所以学好编程基础,对于我们普通人来说,看书是一个直接有效的方式。..

CodeSheep 4358

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

JAVA中操作数据库方式与设计模式的应用(文章地址整理)

JAVA中操作数据库方式与设计模式的应用(文章地址整理)

WYZSC的专栏 674

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: java实现的18位身份证格式验证算法-Java基础-Java-编程开发
下一篇: JAVA和C 区别-Java基础-Java-编程开发
java169
博客等级 码龄18年 27粉丝 2568原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值