在JDBC API 中使用JNDI 技术------实战技术篇

初级、中级和高级开发人员的差距在哪里? 全文共2537字,预计学习时长5分钟 图片来源:Clem Onojeghuo Unsplash 你是初级、中级还是高级开发人员不仅仅由你的编程年龄决定。很多初级开发人员都比高级开发人员年长,归根到底还是取决于技术。这并不是说高级开发人员一定样样精通,但他们肯定比初、中级开发人员更加熟练。 但是,高级开发人员与初、中级开发人员的差距也不仅仅在于编码技能。那么他们之间的差距到底在哪呢? ... 阅读详情

JNDI 技术提供了一种程序运行模式,使得Java 应用程序可以通过网络发现和请求远端计算设备上的服务,如数据库服务等。
这里着重介绍JNDI 技术如何与JDBC 技术结合起来,构建强大的访问数据库的Java 应用程序。

究竟JNDI 技术和JDBC 技术的结合会有何好处呢?
1
应用JNDI 技术,可以实现真正的分布式处理,数据库服务器、提供数据库连接服务的组件、执行数据库操作的Java 应用程序可以分布在不同地址的异质计算设备上。
2
JNDI 技术与JDBC 技术结合可以实现数据库连接缓冲池的功能。
3
JNDI 技术与JDBC 技术结合可以在Java 应用程序中屏蔽掉很多繁琐的建立数据库连接的代码,这样有有助于系统的安全性

RowSet
包提供了这方面的功能JNDI 技术与JDBC 技术结合的原理如下:
使用JDBC JNDI 技术编写一个提供数据库服务的组件,然后将它出版到某个中间层服务器中,侦听服务请求。接下来我们可以编写Java 应用程序查找提供数据库服务的组件,一旦查找到它(组件) 就可以利用它提供的各种方法执行特定的数据库操作。
RowSet
包定义的DataSource 接口提供了建立数据库连接的JNDI 支持。具体的方法如下:
1
首先创建一个Java SampleDataSource ,该类扩展了javax..sql.DataSource 接口
具体实现了获取数据库连接的功能,该类的代码如下:

//File Name SampleDataSource.java
//Author fancy
//Date 2001.3.4
//Note to create tht datasource connection
import java.sql.*;
import javax.sql.*;
import javax.naming.*;
public class SampleDataSource implements javax.sql.DataSource
javax.naming.Referenceable java.io.Serializable
{
/* Constructors*/
public SampleDataSource()
{
// This constructor is needed by the object factory
}
/** Properties*/
public String getServerName()
{
return serverName;
}
public void setServerName(String serverName)
{
this.serverName = serverName;
}
public String getDatabaseName()
{
return databaseName;
}
public void setDatabaseName(String databaseName)
{
this.databaseName = databaseName;
}
/*
* Methods inherited from DataSource
*/
public Connection getConnection() throws SQLException
{
//vendor specific code to create a JDBC Connection goes here
try
{
Class.forName("jdbcDriver");
Connection conn=DriverManager.getConnection("jdbcURL" "user" "pass");
return conn;
}
catch(Exception fe)
{
//to do nothing
}
return null;
}
public Connection getConnection(String username String password) throws SQLException
{
//vendor specific code to create a JDBC Connection goes here
String user=username;
String pass=password;
try
{
Class.forName("jdbcDriver");
Connection conn=DriverManager.getConnection("jdbcURL" user pass);
return conn;
}
catch(Exception fe)
{
//to do nothing
}
return null;
}
public java.io.PrintWriter getLogWriter() throws SQLException
{
//vendor specific code goes here
}
public void setLogWriter(java.io.PrintWriter out) throws SQLException
{
//vendor specific code goes here
}
public void setLoginTimeout(int seconds) throws SQLException
{
//vendor specific code goes here
}
public int getLoginTimeout() throws SQLException
{
//vendor specific code goes here
}
private String serverName = null;
private String databaseName = null;
}
SampleDataSource 类中定义了getConnection()方法,利用该方法可以获取java.sql.Connection 接口的实例对象,除了getConnection()方法以外,SampleDataSource.java程序还定义了若干个其他相关方法。

2
接下来我们应该编写一个Java 应用程序,将上面编写好的SampleDataSource组件出版到中间层服务器中去,假设这个应用程序名为JNDIExam.java ,那么它应该含有下面的代码段

SampleDataSource sds = new SampleDataSource();
sds.setServerName(“rainbow”);
sds.setDatabaseName("fancy");
Context ctx = new InitialContext();
ctx.bind(“jdbc/EmployeeDB” sds);
上面的代码中第一行创建了一个SampleDataSource 对象,接下来的两行代码分别调用setServerName()方法和setDatabaseName()方法初始化SampleDataSource 对象的属性,然后创建JNDI 命名环境对象ctx ,将SampleDataSource 类的实例对象sds 绑定到JNDI jdbc/EmployeeDB 中。编译运行JNDIExam.java 程序,将JNDI 服务发布出去。除了使用这个方法也可以使用某些GUI 工具可视化出版JNDI 服务。

3
下一步我们应该编写客户端(此处指相对的客户端,某台服务器相对于另一台服务器来说可以是服务端也可以是客户端)Java 应用程序,如JSP 程序等,以便使用JNDI 服务。

请看下面的JSP 代码段(try/catch 模块已经省略了)

<%
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup(“jdbc/EmployeeDB”);
Connection con = ds.getConnection(jdbc/webDatabase” "sa” “");
con.setAutoCommit(false);
Statement stmt=con.createStatement();
ResultSet rs=stmt.executeQuery("SELECT * FROM goods");
while(rs.next())
{
out.println(rs.getString(1));
}
con.commit();
con.close();
%>
程序的解释请参看
http://blog.csdn.net/jgsfy/archive/2005/01/04/239800.aspx

ICC2 实战秘籍:create_workspace 命令全解析 必选项:工作区名称,这可是创建工作区的 “身份证”,必不可少。技术数据选项匹配:优先考虑用 -technology 直接加载技术文件,这是获取最新、最准确技术数据的首选路径;要是已经有合适的技术库了,那 -use_technology_lib 引用现有技术库也能快速上手。精度设置优先规则:技术文件自动配置排在第一位,能自动适配就别手动操心;要是自动配置不理想,那就显式指定 scale_factor;实在没要求,就用默认配置,但得清楚它的精度限制。 阅读详情

相关推荐

手把手教你学Simulink——基于Simulink的无感FOC(滑模观测器+PLL)实战

摘要: 本文详细介绍了基于Simulink的无感FOC(滑模观测器+PLL)实现方法。主要内容包括:1)SMO+PLL原理,通过滑模观测器估算反电动势,结合PLL抑制抖振;2)系统架构,替代编码器信号;3)Simulink建模流程,涵盖Clarke变换、SMO离散化实现、PLL设计等关键步骤;4)参数整定指南和工程实践要点,如启动策略和故障处理。该方法具有成本低、可靠性高的优势,适用于家电、电动车等场景,仿真结果显示角度误差±5°,速度动态跟随良好。文章还提供了调试建议和常见问题解决方案。

MHD0815的博客 95

JDBC数据源 使用JNDI连接池实现数据库的连接

0.引言 许多Web应用程序需要通过JDBC驱动程序访问数据库,以支持该应用程序所需的功能。Java EE平台规范要求Java EE应用程序服务器为此目的提供一个DataSource实现(即,用于JDBC连接的连接池)。Tomcat提供了完全相同的支持,因此使用此服务在Tomcat上开发的基于数据库的应用程序将在任何Java EE服务器上保持不变。 有关JDBC的信息,请参考以下内容: ...

weixin_33878457的博客 280

RK3566全套设计资料.rar

全新RK3566硬件设计资料: RK3566是一款高性能,低功耗的四核应用处理器,专为个人移动互联网设备和AIoT设备而设计。 提供了许多嵌入式功能强大的硬件引擎,以优化高端应用程序的性能。 RK3566支持4K @ 60fps的几乎全格式H.264解码器,4K @ 60fps的H.265解码器,1080p @ 60fps的H.264 / H.265编码器,高质量JPEG编码器/解码器,嵌入式3D GPU 使RK3566完全兼容OpenGL ES 1.1 / 2.0 / 3.2,OpenCL 2.0和Vulkan 1.1。 特殊的2D硬件引擎将最大化显示性能并提供非常流畅的操作。内置NPU支持INT8 / INT16混合操作。 此外,凭借其强大的兼容性,可以轻松地转换基于TensorFlow / MXNet / PyTorch / Caffe等一系列框架的网络模型。 RK3566具有高性能的外部存储器接口(DDR3 / DDR3L / DDR4 / LPDDR3 / LPDDR4 / LPDDR4X),能够维持要求的存储器带宽。

单例模式

单例模式: 这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。 单例模式注意事项: 1、单例类只能有一个实例。 2、单例类必须自己创建自己的唯一实例。 3、单例类必须给所有其他对象提供这一实例。 意图: ...

weixin_34228387的博客 327

JAVA设计模式之单例模式

本文继续介绍23种设计模式系列之单例模式。 概念:   java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例、登记式单例。   单例模式有以下特点:   1、单例类只能有一个实例。   2、单例类必须自己创建自己的唯一实例。   3、单例类必须给所有其他对象提供这一实例。  单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例...

一个本科小生的奋斗史 101万+

java单例模式

定义:单例模式(Singleton)指一个类只有一个实例,并且该类能自行创建这个实例的一种模式。例如,Windows 中只能打开一个任务管理器,这样可以避免因打开多个任务管理器窗口而造成内存资源的浪费,或出现各个窗口显示内容的不一致等错误。单例类只有一个实例对象;该单例对象必须由单例类自行创建;单例类对外提供一个访问该单例的全局访问点;

qq_48268296的博客 4359

Java五种单例模式

Java的五种单例模式,大家应该都接触过或者都用过。本篇介绍下Java的五种单例模式,并分析其优缺点,希望给初学者提供一点帮助。

zhaojun的博客 2万+

matlab 等高线图限制范围,matlab等高线图的初级问题,matlab画等高线问题,请高人解答。详细请看补充。...

导航:网站首页 >matlab等高线图的初级问题,matlab画等高线问题,请高人解答。详细请看补充。matlab等高线图的初级问题,matlab画等高线问题,请高人解答。详细请看补充。匿名网友:set和get是设置和获得句柄对象属性值的函数。用法是set句柄,属性1,属性值,属性2,属性值,……属性值=get句柄,属性h是句柄,这里就是指向某等高线图的句柄。你可以用get(h)看到其所有属...

weixin_35715402的博客 1878

不能装载文档控件。请在检查浏览器的选项中检查浏览器的安全设置_「初级会计报考指南」浏览器问题解决方案...

关于浏览器相关问题汇总Q:为什么我用360/搜狗/QQ/谷歌浏览器提示不能报名A:很多考生反映报名过程因提示“由于您用的不是Microsoft Internet Explorer”浏览器,所以不能顺利报名,请更换。”而无法顺利报名。为保证大家顺利完成初级会计报名,建议大家使用IE浏览器,可有效避免以上情形出现!记得下载ie10,百度搜索IE10下载!Q:IE浏览器不能报名怎么办?A:一、IE浏览器...

weixin_39557419的博客 3928

初级会计信息照片采集全流程(附上传失败解决方法)

初级会计信息照片采集全流程及上传失败解决方法:使用微信小程序"拍点点证件照"制作295×413像素、JPG格式的白底照片,下载后通过文件管理器选择照片上传至系统。如遇"请上传指定格式附件"提示,需注意不要直接上传相册照片,而应通过文件选择方式操作。完成上传后等待系统审核即可。

2501_94364322的博客 512

初级的前端应该注意哪些问题;

面试过程中有做面试题的,也有直接聊的,实话讲有些面试题其实就是背书,随便一百度就能出答案的东西其实不太适合用于面试题中。例如某某css属性 的用法,js某函数的作用等等。个人倾向于将实际工作中可能会遇到的问题的场景,以及各种技术的坑作为面试题,这样一则可以看出他的经验多少,二则也可以 防止他做笔试题的时候手机搜索结果。 不过总体来讲基本上每家问的问题也差不多,可能不同业务的公司问的问题的侧重

Oliver_web的博客 483

针对初级和高级开发人员的20个Kotlin面试问题

[总数:4平均:3.3 / 5] Kotlin面试问题 Android目前拥有最大的智能手机OS市场份额, 目前为76% ,而预测称它将在未来增长。 这意味着构建Android应用程序可能是一个成功且有利可图的商业想法。 但是,要将这个想法变成现实,您需要一个精通技术的Kotlin开发人员或开发团队。 Kotlin是一种通用编程语言, 截至2019年5月...

diren9643的博客 3271

聊聊初级开发者的职业素养问题

邹溪源,现居长沙,十年软件研发经验老兵,长沙.NET技术社区发起者,运营公众号【DotNET技术圈】。记得在我读大学时老师吐槽,在他参加工作的95年-03年间感受到了IT的飞速发展,只要...

东南草堂 242

【译】如何成为一名优秀的初级工程师

很多人都在想着如何成为一名高级工程师,而我想要的是先成为优秀的初级工程师。 明年将是我正式受雇佣写代码的第15年了。(译者:老外的写代码职业生涯真的挺长的) 回首往昔,我第一天工作的日子仍然历历在目。那时的我每天都在格子间中写着SAP、算法、数据结构、SQL和C++,还涉及了更广泛的主题,包括知识管理和项目管理。我了解所有的这些知识,但我缺乏的是在需要的地方使用这些知识的信心。 我花了很多年才获得...

K_Ohaha的博客 2465

初级开发面试常遇到的问题

** 以下是我个人觉得初级开发时会经常问到的难点 **

weixin_44318626的博客 508

acm 初级入门 装箱问题

1017:装箱问题 查看提交统计提示提问 总时间限制: 1000ms 内存限制: 65536kB 描述一个工厂制造的产品形状都是长方体,它们的高度都是h,长和宽都相等,一共有六个型号,他们的长宽分别为1*1, 2*2, 3*3, 4*4, 5*5, 6*6。这些产品通常使用一个 6*6*h 的长方体包裹包装然后邮寄给客户。因为邮费很贵,所以工厂要想方设法的减小

u013412477的专栏 1409

实战技能】初级软件开发工程师常见问题

本文将从计算机系统结构、软件开发基础、使用软件工具、软件开发技术和软件开发流程多个角度,列出初级工程师在软件开发过程中的常见缺陷。以下内容,来源于我工作和公益教育活动中发现的普遍问题,希望能引起初级工程师、高校教师以及技术管理者的注意。

苹果二的博客 1360

[译] 如何成为一名优秀的初级开发人员

本文翻译自Medium上的一篇文章,原文标题:How To Be A Good Junior Developer. 点击文末的阅读原文可以跳转到英文原文。 到明年,我的职业编程生涯即将满15年。15年!哇! 回想起来,我仍然记得成为初级开发人员的第一天,走过灯火通明的小隔间,脑袋里塞满了SAP、算法、数据结构、SQL和C++,甚至知识管理和项目管理等更广泛的主题。我拥有所有的知识,而我唯...

云水木石 2390

写给初级程序员的一些建议

▲点击上方"什么技术值得学",关注持续获得知识您是一名从事软件开发职业的初级开发人员吗?或者是最近刚开始新工作的计算机科学毕业生?也许一个自学成才的开发人员想知道下一步该...

十年互联网开发老兵,陪你一起学技术 1755

初级8皇后问题

初级8皇后问题,不是真正的8皇后问题,是该问题的初级条件限制:产生不同行,不同列的组合。 typedef struct Spoint { int x; int y; Spoint() { x = -1; y = -1; } }; static Spoint point[8]; int Queen8(int n, int cur) {...

aig8440的博客 86

leetcode初级算法 设计问题

设计问题shuffle an array最小栈 shuffle an array 直接copy了别人的代码,用了库函数random_shuffle(iterator1,iterator2) 代码: class Solution { public: vector<int> m_nums; Solution(vector<int> nums) : m_num...

randomaccessRAM的博客 245
上一篇: 数据库连接缓冲池(原创)
下一篇: Timer与TimerTask入门
jgsfy
博客等级 码龄22年 5粉丝 51原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值