单例模式和JDBC
配置文件: driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/blog
user=root
user=1234 properties文件里面通常存放的是Map,也就是键值对。
单例模式,是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中,应用该模式的类一个类只有一个实例。即一个类只有一个对象实例
话说JDBC Java通过JDBC连接数据库分为以下四步:
1.加载驱动
2.建立连接
3.使用Preparedstatement进行预编译或者使用statement对象
4.释放资源 Preparedstatement和Statement的比较:
a.首先Preparedstatement是预编译的,而Statement反之。
b.Preparedstatement支持批量处理,而Statement不行。
c.Preparedstatement相对于Statement可读性上良好
d.无论从哪个方面看Preparedstatement都比Statement要好(不相信的话可以自己写一个
小的图书管理系统或则其它的小项目都可以,一个用Preparedstatement一个用Statement进行对比
就知道了)
/**
单例模式
*/
package com.utils; import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Properties; public class ConfigManager { /**之所以定义为静态的是因为静态修饰可直接调用,不需要实例化,直接类名.方法名即可调用
*/
private static ConfigManager config;
private static Properties props; private ConfigManager(){
props=new Properties(); } public static ConfigManager getInstance(){
if(config==null){
config=new ConfigManager();
}
return config;
} public static String getPropertis(String key){
try {
FileInputStream fis=new FileInputStream("src/db.properties");
props.load(fis);
return props.getProperty(key); } catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
} }
通过JDBC和数据库打交道
/**
* JDBC连接数据库
*/ package com.dao; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import com.utils.ConfigManager; public class BaseDao { Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
//与数据库建立连接
public boolean getConnection(){
String driver=ConfigManager.getInstance().getPropertis("driver");
String url=ConfigManager.getInstance().getPropertis("url");
String user=ConfigManager.getInstance().getPropertis("user");
String password=ConfigManager.getInstance().getPropertis("password");
try {
//加载驱动
Class.forName(driver);
//建立连接
conn=DriverManager.getConnection(url,user,password);
return true;
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false; } catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return false;
} } //所有查询方法的模板
public ResultSet select(String sql,Object[]obj){
getConnection();
try {
//使用Preparedstatement对象预编译sql
ps=conn.prepareStatement(sql);
for (int i = 0; i < obj.length; i++) {
ps.setObject(i+1,obj[i]);
}
rs=ps.executeQuery();
return rs;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
} }
//所有增删改方法的模板
public int update(String sql,Object[]obj){
getConnection();
try {
ps=conn.prepareStatement(sql);
for (int i = 0; i < obj.length; i++) {
ps.setObject(i+1,obj[i]);
}
int lines=ps.executeUpdate();
return lines;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return 0;
} }
//释放资源
public boolean close(){
try {
if(!rs.isClosed()){
rs.close();
} } catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace(); return false;
} try {
if(!ps.isClosed()){
ps.close();
} } catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace(); return false;
} try {
if(!conn.isClosed()){
conn.close();
} } catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace(); return false;
} return true;
} }
单例模式和JDBC的更多相关文章
- 单例模式获取JDBC连接
package com.jdbc.test; import java.io.IOException; import java.io.InputStream; import java.sql.Conne ...
- 单例模式在JDBC数据库连接操作里的应用
设计模式之单例模式一般应用在在数据库操作里,数据库操作就要常常创建实例,然后进行数据库操作,全部就能够 将数据库操作的方法.进行封装,然后採用单例模式进行设计,然后採用单例模式之后,就能够节约系统资源 ...
- JDBC:加载数据库驱动、连接数据库(详细讲解)
加载数据库驱动: 1)由于Java是一个纯面向对象语言,任何事物在其中都必须抽象成类或者类对象,数据库也不例外,JDBC同样也把数据库抽象成面向对象的结构: 2)JDBC将整个数据库驱动器在底层抽象成 ...
- 东软实习<3>
今天学习过程和小节 主要对多线程,单例模式以及jdbc进行了一些深入着重的学习, 还有就是学习了如何使用java操作HDFS 主要是对于一些继承调用的使用等 1.封装JDBC,自定义范型 2.反射,自 ...
- MyBatis实战之解析与运行
本次所谈的原理仅仅只涉及基本的框架和核心代码,并不会全部都说到,比如关于MyBatis是如何解析XML文件和其他配置文件从而的到内容,还有就是JDBC如何使用,关于JDBC如何使用,可以参考我的这篇博 ...
- Spring(三)之Ioc、Bean、Scope讲解
Spring容器是Spring Framework的核心.容器将创建对象,将它们连接在一起,配置它们,并管理从创建到销毁的整个生命周期.Spring容器使用DI来管理组成应用程序的组件.这些对象称为S ...
- JAVA关键技术
通用技术方面 MVC 1)概念 MVC是一个架构模式,它分离了表现与交互.它被分为三个核心部件:模型-model.视图-view.控制器-controller 2)工作原理 所有的终端用户请求被发送到 ...
- 封装jdbc 单例模式的应用
实现增删该查的jdbc封装 import java.io.IOException; import java.io.InputStream; import java.sql.Connection; im ...
- jdbc数据库连接过程及驱动加载与设计模式详解
首先要导入JDBC的jar包:接下来,代码:Class.forName(xxx.xx.xx)返回的是一个类 Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类, 也就 ...
随机推荐
- 6.分析request_irq和free_irq函数如何注册注销中断(详解)
上一节讲了如何实现运行中断,这些都是系统给做好的,当我们想自己写个中断处理程序,去执行自己的代码,就需要写irq_desc->action->handler,然后通过request_irq ...
- Java基础——JSON
一.JSON定义 在百度百科中的解释:JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式.它基于JavaScript的一个子集. JSON采用完全独立于语言的 ...
- Web前端基础——jQuery(三)
本文主要从以下几方面介绍jQuery应用中的内容: 1 jQuery 节点遍历2 jQuery 中的过滤器3 jQuery 属性操作4 jQuery Dom节点操作5 几个jQuery例子6 jQue ...
- Matlab forward Euler demo
% forward Euler demo % take two steps in the solution of % dy/dt = y, y(0) = 1 % exact solution is y ...
- C#多线程——优先级
在我的公司这里,因为要跟很多特殊的设备打交道,所以会用到多线程的东西,那么我们在进行多线程处理的时候,怎么去设置优先级 我这里用听歌和下载小说做了个例子,我们用电脑的时候肯定是可以边听歌边下载小说的, ...
- sql server:查詢系統表
---查看所有存储过程或视图的位置 select a.name,a.[type],b.[definition] from sys.all_objects a,sys.sql_modules b whe ...
- vue2.X的路由
以 / 开头的嵌套路径会被当作根路径. <router-link> 在vue-router1.X中是以<a v-link=""></a>存在的 ...
- JS的DOM操作 - 你真的了解吗?
摘要 想稍微系统的说说对于DOM的操作,把Javascript和jQuery常用操作DOM的内容归纳成思维导图方便阅读,同时加入性能上的一些问题. 前言 在前端开发的过程中,javascript极为重 ...
- Berlekamp-Massey算法学习笔记
Berlekamp-Massey算法 很久之前就听说过这个算法,当时六校联考的时候Day1T1是一道很有意思的递推,神仙zzx不会做于是就拿BM算法艹出了递推式Orzzzzzzzzzzx 推荐一篇讲的 ...
- 高德地图JS API 开发小结
项目中有一块功能要用到高德地图,所以,想把编码小结一下. 首先是地图的初始化 var map = new AMap.Map("mapDiv", { ...