浅析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 ...
随机推荐
- [原创]自定义参数静默方式安装JDK1.8
摘要:当Java桌面程序开发完成做产品的时候,面对未知的安装环境,通常是编写一些预安装检测脚本/程序,让程序傻瓜化安装以便减少分发出去的产品带来 的未知工作量(安装答疑,操作系统问题引起安装失败等), ...
- python3 经典排序方法
1.插入排序: def nsert_sort(list): for i in range(len(list)): for j in range(i): if list[i] < list[j]: ...
- java程序员经常使用的Intellij Idea插件
大概从去年年初开始慢慢抛弃习惯多年的eclipse,开始使用Intellij Idea,以下是我使用过的一些Intellij Idea插件: 1.lombok https://plugins.jetb ...
- touch.js 手机端的操作手势
使用原生的touchstart总是单击.长按有冒泡冲突事件,发现百度在几年开源的touch.js库,放在现在来解决手机端的操作手势,仍然很好用.
- POS VB
PPSM06S70: Add moddate EDITSPRINTJOB: MAX(TO_CHAR(ETRN.MODDATE, 'yyyy/mm/dd/HH24:MI AM')) ACTUAL_ ...
- JQUERY-事件-动画-类数组对象-添加自定义API
正课: 1. 事件: 2. 动画: 3. 类数组对象操作: 4. 添加自定义API: 1. 事件: 1. 页面加载后执行: 2个时机 1. DOM内容加载完成: 仅包括html, js DOMCont ...
- k8s初始化搭建方法
http://www.cnblogs.com/cocowool/p/kubeadm_install_kubernetes.html https://www.kubernetes.org.cn/doc- ...
- ubuntu18.04修改ssh登录欢迎信息
1.编辑文件 ll /etc/update-motd.d/* 2.修改文件 3.查询效果 run-parts /etc/update-motd.d
- (PMP)第1章-----引论
1.指南概述和目的: 2.基本要素: 项目:创造独特的产品,服务或成果而进行的临时性工作.特点:1.临时性 临时性并不一定意味着项目时间短.2.独特性 3.渐进明细性 项目管理:就是将知识,技 ...
- python pandas.DataFrame.append
1.使用append首先要注意的是,你要合并两个DataFrame的columns即列名是否是相同的,不相同的就会报错. 2.我们会发现DataFrame的列名是不能够重复的,而行名(index)是可 ...