java mysql 单例模式_mysql jdbc1 数据库连接 单例模式实例
发布日期:2021-06-24 15:57:20 浏览次数:3 分类:技术文章

本文共 4733 字,大约阅读时间需要 15 分钟。

简介

·JDBC(Java Data Base

Connectivity,java数据库连接),由一些接口和类构成的API。

·J2SE的一部分,由java.sql,javax.sql包组成。

连接数据的步骤

1.注册驱动(只做一次)

Class.forName("com.mysql.jdbc.Driver");

推荐这种方式,不会对具体的驱动类产生依赖。

DriverManager.registerDriver(com.mysql.jdbc.Driver);

会造成DriverManager中产生两个一样的驱动,并会对具体的驱动类产生依赖。

System.setPropery("jdbc.drivers","driver1:driver2");

虽然不会对具体的驱动类产生依赖,但注册不太方便,所以很少使用。

2.建立连接(Connection)

Connection conn =

DriverManager.getConnection(url,user,password);

url格式:

JDBC:子协议:名称//主机名:端口/数据库名?属性名=属性值%...

User,password可以用"属性名=属性值"方式告诉数据库

其他参数如:

useUnicode =

true&characterEncoding=GBK。

3.创建执行SQL的语句(Statement)

4.执行语句

5.处理执行结果(ResultSet)

6.释放资源

原则:链接尽量晚获取,早释放。

例子:

数据库jdbc

create database jdbc;

表user

create table user

(

id int not null,

name varchar(20),

birthday date,

money float

);

insert into user(id, name, birthday, money)

values(1, 'zhangsan', '1985-01-01',100);

insert into user(id, name, birthday, money)

values(2, 'lisi', '1986-01-01',200);

insert into user(id, name, birthday, money)

values(3, 'wangwu', '1987-01-01',300);

java代码:

import java.sql.*;

public class Base {

public static void main(String[] args)

throws SQLException {

test();

}

static void test() throws

SQLException{

//1.注册驱动

DriverManager.registerDriver(new

com.mysql.jdbc.Driver());

//2.建立连接

Connection conn =

DriverManager.getConnection("jdbc:mysql://localhost:3306/jdbc",

"root", "root");

//3.创建语句

Statement st =

conn.createStatement();

//4.执行语句

ResultSet rs = st.executeQuery("select *

from user");

//5.处理结果

while(rs.next()){

System.out.println(rs.getObject(1) + "\t" +

rs.getObject(2) + "\t" + rs.getObject(3) + "\t" +

rs.getObject(4));

}

//6.释放资源

rs.close();

st.close();

conn.close();

}

}

规范的JDBC代码:

创建一个工具类:JdbcUtils

import java.sql.*;

//工具类不需要继承,所以使用final

public final class JdbcUtils {

private static String url =

"jdbc:mysql://localhost:3306/jdbc";

private static String user = "root";

private static String password =

"root";

//把构造方法变为私有,防止new

private JdbcUtils(){

}

//类里面静态代码库只会被执行一次

static{

try{

Class.forName("com.mysql.jdbc.Driver");

}catch(ClassNotFoundException e){

throw new

ExceptionInInitializerError(e);

}

}

public static Connection getConnection()

throws SQLException{

return DriverManager.getConnection(url,

user, password);

}

public static void free(ResultSet rs,

Statement st, Connection conn){

try{

if(rs != null){

rs.close();

}

}catch(SQLException e){

e.printStackTrace();

}finally{

try{

if(st != null){

st.close();

}

}catch(SQLException e){

e.printStackTrace();

}finally{

if(conn != null){

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

}

}

方法改为:

static void template() throws

Exception{

Connection conn = null;

Statement st = null;

ResultSet rs = null;

try{

//建立连接

conn = JdbcUtils.getConnection();

//创建语句

st = conn.createStatement();

//执行语句

rs = st.executeQuery("select * from

user");

//处理结果

while(rs.next()){

System.out.println(rs.getObject(1) + "\t" +

rs.getObject(2) + "\t" + rs.getObject(3) + "\t" +

rs.getObject(4));

}

}finally{

//无论程序是否出错,finally都会执行。所以写在finally里面。

//释放资源

JdbcUtils.free(rs, st, conn);

}

}

单例模式写工具类:

单例模式:一个虚拟机里面只会有一个实例

package cn.zcy.ltt;

import java.sql.*;

//工具类不需要继承,所以使用final

public final class JdbcUtilsSing {

private String url =

"jdbc:mysql://localhost:3306/jdbc";

private String user = "root";

private String password = "root";

private static JdbcUtilsSing instance =

null;

//把构造方法变为私有,防止new

private JdbcUtilsSing(){

}

public static JdbcUtilsSing

getInstance(){

//延时加载:第一次访问时才new对象

if(instance == null){

//解决延时加载可能出现的问题,需要加锁

synchronized (JdbcUtilsSing.class) {

//双重检查 必须在JDK1.5以上版本运行

if(instance == null){

instance = new JdbcUtilsSing();

}

}

}

return instance;

}

//类里面静态代码库只会被执行一次

static{

try{

Class.forName("com.mysql.jdbc.Driver");

}catch(ClassNotFoundException e){

throw new

ExceptionInInitializerError(e);

}

}

public Connection getConnection() throws

SQLException{

return DriverManager.getConnection(url,

user, password);

}

public void free(ResultSet rs, Statement

st, Connection conn){

try{

if(rs != null){

rs.close();

}

}catch(SQLException e){

e.printStackTrace();

}finally{

try{

if(st != null){

st.close();

}

}catch(SQLException e){

e.printStackTrace();

}finally{

if(conn != null){

try {

conn.close();

} catch (SQLException e) {

e.printStackTrace();

}

}

}

}

}

}

调用函数:

static void templateSing() throws

Exception{

Connection conn = null;

Statement st = null;

ResultSet rs = null;

try{

//建立连接

conn =

JdbcUtilsSing.getInstance().getConnection();

//创建语句

st = conn.createStatement();

//执行语句

rs = st.executeQuery("select * from

user");

//处理结果

while(rs.next()){

System.out.println(rs.getObject(1) + "\t" +

rs.getObject(2) + "\t" + rs.getObject(3) + "\t" +

rs.getObject(4));

}

}finally{

//无论程序是否出错,finally都会执行。所以写在finally里面。

//释放资源

JdbcUtilsSing.getInstance().free(rs, st,

conn);

}

}

转载地址:https://blog.csdn.net/weixin_33682804/article/details/114200944 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:2017年java漏洞_【漏洞公告】Oracle多个Java漏洞更新-2017年7月
下一篇:java函数命名规范_JAVA编程规范-命名规范

发表评论

最新留言

逛到本站,mark一下
[***.202.152.39]2024年04月27日 00时44分25秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章