浅析B/S架构数据库连接方式
package com.jdbc.dao;
import java.sql.*;
public class BaseDAO {
//打开数据库链接
public Connection getConn()
{
Connection conn = null;
try {
//加载驱动
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
//打开链接
conn = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;DatabaseName = epetDB","sa","sa");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
//(重写)关闭链接
public void Close(Connection conn,PreparedStatement pstmt,ResultSet rs)
{
try {
//关闭结果集
if (rs != null) {
rs.close();
}
//关闭PerparedStatement对象
if (pstmt != null) {
pstmt.close();
}
//关闭链接
if (conn != null) {
conn.close();
}
} catch (Exception e) {
// TODO: handle exception
}
}
//(重写)关闭链接
public void Close(Connection conn,PreparedStatement pstmt)
{
try {
//关闭PerparedStatement对象
if (pstmt != null) {
pstmt.close();
}
//关闭链接
if (conn != null) {
conn.close();
}
} catch (Exception e) {
// TODO: handle exception
}
}
//增删改操作
public int Update(String sql,Object[] parm)
{
int iRet = 0;
Connection conn = null;
PreparedStatement pstmt = null;
try {
conn = getConn();
pstmt = conn.prepareStatement(sql);
//循环赋值参数
for (int i = 0; i < parm.length; i++) {
//为预编译sql设置参数
pstmt.setObject(i+1, parm);
}
//执行SQL语句
iRet = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
}
finally
{
Close(conn,pstmt);
}
return iRet;
}
}
普及:
try{
//可能出现异常的代码
}catch(Execption e){
//如果发生异常处理的代码
}finally{
//无论是否异常都会执行的代码
try catch finally java中异常处理机制
我们来分析一下写一段代码,其中Update方法是用来更新数据的,其中我们可以看到try中包含了getConn()方法用来获取Connection连接对象,到最后我们可以在finally代码块中看到Close()方法用来关闭创建的Connection对象以及PreparedStatement对象,这么消耗我们很大的内存空间。

如果用户同时点注册按钮那么服务器首先执行打开数据库连接Connection多个用户注册就会打开多个Connection那么并且同时添加到数据库,服务器就会在执行添加的时候就会发生异常。分不清楚用户注册的信息。
举个例子:

package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class BaseDao {
private String className = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
private String url = "jdbc:sqlserver://localhost:1433;databasename=SQLTMP";
private String user = "sa";
private String pwd = "sa";
private static Connection conn = null;
private BaseDao(){
try {
Class.forName(className);
conn = DriverManager.getConnection(url,user,pwd);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static Connection getConn(){
if(conn != null){
return conn;
}else{
new BaseDao();
return conn;
}
}
}

context.xml
<Resource
name="news"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="1000"
username="sa"
password="sa"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
url="jdbc:sqlserver://localhost:1433;DatabaseName=NewsManagerSystem"
/>
Web.xml
<resource-ref>
<description>news DataSource</description>
<res-ref-name>news</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
package com.news.dao;
import java.sql.*;
import javax.naming.*;
import javax.sql.DataSource;
public class BaseDao {
/**
* 创建连接池
* */
public Connection getConn(){
Connection conn = null;
try {
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/news");
conn = ds.getConnection();
} catch (NamingException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
}
}
普及:

浅析B/S架构数据库连接方式的更多相关文章
- SQL server 数据库连接方式分析
		SQL server 数据库连接方式图示: ODBC和OLEDB连接的区别 ODBC(开放数据库互连):是Microsoft引进的一种早期数据库接口技术.它实际上是ADO的前身.早期的数据库连接是非常 ... 
- WebForm(二)——控件和数据库连接方式
		一.简单控件 1.Label(作用:显示文字) Web中: <asp:Label ID="Label1" runat="server" Text=&quo ... 
- mysql数据库连接方式(.net)
		1.通过ado.net连接(数据库连接串中库名称为中文无法使用) 需要添加MySql.Data.dll(可通过安装mysql-connector-net-6.8.3.mis获得) 引用MySql.Da ... 
- 二、spring Boot构建的Web应用中,基于MySQL数据库的几种数据库连接方式进行介绍
		包括JDBC.JPA.MyBatis.多数据源和事务. 一.JDBC 连接数据库 1.属性配置文件(application.properties) spring.datasource.url=jdbc ... 
- 浅析 jQuery 内部架构设计
		jQuery 对于大家而言并不陌生,因此关于它是什么以及它的作用,在这里我就不多言了,而本篇文章的目的是想通过对源码简单的分析来讨论 jQuery 的内部架构设计,以及 jQuery 是如何利用Jav ... 
- beego中各类数据库连接方式
		beego 框架是优秀得go REST API开发框架.下面针对beego中各类数据库连接操作做一个总结. 1. orm连接方式 beego中的orm操作支持三种数据库:mysql,sqlite3,p ... 
- sql server 数据库连接方式分析、详解
		本文链接:https://blog.csdn.net/wang379275614/article/details/7859398 一.OLEDB方式连接Sql身份验证模式:Provider=" ... 
- Access数据库连接方式
		网络连接:Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\\server\share\folder\myAccessFile.accdb;标准安全:Pro ... 
- 通达OA 新旧两种数据库连接方式
		老的连接方式: include_once("/inc/conn.php"); $cursor = exequery($connection,$query); 新的连接方式: inc ... 
随机推荐
- HashMap、Hashtable、ConcurrentHashMap的原理与区别(简述)
			HashTable 底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低,ConcurrentHashMap做了相 ... 
- android 6.0+ 动态权限 拒绝不再询问后跳转设置应用详情页面
			android 6.0+ 的权限 需要动态申请 这里的权限针对的是 敏感权限: SMS(短信) SEND_SMS RECEIVE_SMS READ_SMS RECEIVE_WAP_PUSH RECEI ... 
- 调皮的udp组播技术
			2017年本科毕业,经历过千辛万苦的找工作之后,我进入了现在的这家公司.虽是职场小白,但励志成为IT界的一股清流(毕竟开发的妹子少,哈哈).因为公司的业务需要,我负责的部分是利用组播技术实现OSG模型 ... 
- 20165213 Exp4 恶意代码分析
			恶意代码分析 实践目标 1是监控你自己系统的运行状态,看有没有可疑的程序在运行. 2是分析一个恶意软件,就分析Exp2或Exp3中生成后门软件:分析工具尽量使用原生指令或sysinternals,sy ... 
- Python批量执行oracle中的insert语句
			从oracle导出一个表的数据,导出的格式是insert语句,数据量30万. 直接在PL/SQL Developer中执行,速度非常慢,脚本中也是100条数据提交一次.因为需要的时间太长,每次中断后, ... 
- js string和number
			number Js只有一种数字类型(包括整型,浮点型) 极大或极小的可用科学计数法来表示.(7.7123e+1) 所有js数字均为64位 Js所有的数字都存储为浮点型 小数的最大位数是17位 0开头的 ... 
- 重置表单中的文件上传控件(file input)的方法
			方法一: 调用所在 form 表单的 reset 方法,这个方法的缺点是会把整个表单重置,需要存储表单的状态,再回填回去 方法二: 使用jQuery,代码为: $("#id").r ... 
- Springboot & Mybatis 构建restful 服务四
			Springboot & Mybatis 构建restful 服务四 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务三 2 restful ... 
- C++实现对文件中各单词词频的统计及其代码优化
			先给出github上的代码链接以及项目需求 1.项目概述 这个项目的需求可以概括为:对记事本(txt)文件进行单词的词频统计和排序,排序结果以指定格式输出到默认文件中,并要求能够快速地完成整个统计和结 ... 
- eclipse遇到启动报an error has occurred see the log file错
			错误: 修改eclipse安装目录下比如D:\eclipse\configuration\.settings\org.eclipse.ui.ide.prefs, 删除 RECENT_WORKSPACE ... 
