单例模式和JDBC

简介: 配置文件:driver=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/bloguser=rootuser=1234properties文件里面通常存放的是Map,也就是键值对。
配置文件:

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; } }




 

目录
相关文章
|
Java 关系型数据库 MySQL
JDBC连接数据库工具类
JDBC连接数据库工具类
|
7月前
|
设计模式 PHP
php设计模式--单例模式(三)
php设计模式--单例模式(三)
33 0
|
2月前
|
SQL druid Java
JDBC和数据库连接池-两个工具类-JDBCUtilsByDruid和BasicDAO
JDBC和数据库连接池-两个工具类-JDBCUtilsByDruid和BasicDAO
91 0
|
6月前
|
设计模式 存储 缓存
C++ -- 单例模式
**摘要:** 单例模式确保一个类仅有一个实例,并提供全局访问点。为了实现单例,构造函数通常设为私有,通过静态成员函数来创建和返回实例。两种常见实现是饿汉模式(在类加载时创建实例,线程安全但可能导致不必要的内存占用)和懒汉模式(首次使用时创建,可能需线程同步)。拷贝构造函数和赋值运算符通常被禁用来防止额外实例的创建。单例模式适用于资源管理、缓存和线程池等场景。在C++中,静态成员变量和函数用于存储和访问单例实例,保证其生命周期与程序相同。
|
SQL Java 关系型数据库
JDBC系列-详解各个对象
JDBC系列-详解各个对象
89 0
|
druid Java 关系型数据库
【JDBC】使用连接池重写工具类
【JDBC】使用连接池重写工具类
188 0
【JDBC】使用连接池重写工具类
|
SQL Oracle Java
|
Java 大数据 数据库连接
模板方法模式实现封装jdbc
模板方法模式实现封装jdbc
模板方法模式实现封装jdbc
|
SQL 网络协议 Oracle
JDBC、数据库连接池以及事务的基本概念与使用
JDBC、数据库连接池以及事务的基本概念与使用
199 0
|
SQL 存储 Java
18 JDBC 数据库编程
数据持久技术概述 把数据保存到数据库中只是一种数据持久化方式。凡是将数据保存到存储介质中,需要的时候能够找到它们,并能够对数据进行修改,这些就属于数据持久化。 Java中数据持久化技术有很多:
150 0
18 JDBC 数据库编程