当前位置: 首页 > news >正文

[JDBC-1] JDBC Base Template

以Statement建立的标准模板:

static void template() throws Exception {
		Connection conn = null;
		Statement st = null;
		ResultSet rs = null;
		try {
			// //1.注册驱动。实际使用中应当去掉该部分,因为工具类已实现这部分代码。
			// Class.forName("com.mysql.jdbc.Driver");
			// 2.建立连接
			conn = JdbcUtils.getConnection();
			// conn = JdbcUtilsSing.getInstance().getConnection();
			// 3.创建语句
			st = conn.createStatement();

			// 4.执行语句
			rs = st.executeQuery("select * from contacts");

			// 5.处理结果
			while (rs.next()) {
				// 参数中的1,2,3,4是指sql中的列索引
				System.out.println(rs.getObject(1) + "\t" + rs.getObject(2)
						+ "\t" + rs.getObject(3) + "\t" + rs.getObject(4)
						+ "\t" + rs.getObject(5) + "\t" + rs.getObject(6)
						+ "\t" + rs.getObject(7) + "\t" + rs.getObject(8)
						+ "\t" + rs.getObject(9));
			}
		} finally {
			JdbcUtils.free(rs, st, conn);
		}

	}

 

以PreparedStatement建立的Read模板  

//带有参数,尤其是String类型,一定要使用PreparedStatement
	static void read(String name) throws SQLException {
		Connection conn = null;
		PreparedStatement ps = null;
		ResultSet rs = null;
		try {
			// 2.建立连接
			conn = JdbcUtils.getConnection();

			// conn = JdbcUtilsSing.getInstance().getConnection();
			// 3.创建语句
			//sql语句使用拼接字符串的方式会引起SQL注入的安全问题。引入prepareStatement,取代statement来解决这个问题
			String sql = "select id, name,birthday  from contacts where name=?";
			//String sql = "select id, name, birthday  from contacts where name='" + name + "'";
			//Statement st = conn.createStatement(sql1);
			ps = conn.prepareStatement(sql);
			ps.setString(1, name);
			// 4.执行语句
			//注意这里没有参数sql
			rs = ps.executeQuery();

			// 5.处理结果
			while (rs.next()) {
				System.out.println(rs.getInt("id") + "\t"
						+ rs.getString("name") + "\t" + rs.getDate("birthday"));
			}

		} finally {
			JdbcUtils.free(rs, ps, conn);
		}
	}

  

建立连接实例的工具类:

package com.amuos.jdbc.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 
 * 2015-1-24
 * 
 * @author <a href="472846889@qq.com">王娟</a>
 * 
 */
//使用final关键字,不允许继承
public final class JdbcUtils {
    private static String url = "jdbc:mysql://localhost:3306/jdbc";
    private static String user = ""; //请填入数据库用户名
    private static String password = ""; //请填入数据库密码
//构造函数私有化,不允许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();
                    }
            }
        }
    }
}

 

工具类的单例模式:

package com.amuos.jdbc.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * 
 * 2015-1-24  单例模式
 * 
 * @author <a href="472846889@qq.com">王娟</a>
 * 
 */
public final class JdbcUtilsSing {
    private String url = "jdbc:mysql://localhost:3306/jdbc";
    private String user = "";//请输入数据库用户名
    private String password = "";//请输入数据库密码

    // private static JdbcUtilsSing instance = new JdbcUtilsSing();
    private static JdbcUtilsSing instance = null;

    private JdbcUtilsSing() {
    }

    //延迟初始化。加锁
    public static JdbcUtilsSing getInstance() {
        if (instance == null) {
            synchronized (JdbcUtilsSing.class) {
                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();
                    }
            }
        }
    }
}

 

转载于:https://www.cnblogs.com/juan-wang/p/4264640.html

相关文章:

  • Ant编译环境
  • 中转server
  • sl4a
  • SGU[107] 987654321 problem
  • study notes: high performance linux server programming
  • 阿里云修改CentOS Linux服务器的主机名
  • JavaScript-4.6鼠标事件监听,获取鼠标坐标window.event---ShinePans
  • 清华差生10年奋斗经历 读大学的意义好处 人就是你越尊重别人,别人越尊重你 优秀是一种习惯,懒惰是一种惯性。人和人的差别又是就是因为每天积累差了一点点...
  • 使用MSSQL,连接oracle,对oracle数据进行操作
  • Html5+Css3 Banner Animation 多方位移动特效
  • 内存loaddll和shellcode 是不是都差不多呢?
  • 分享:我用一天时间开发的 新年送祝福 微信手机网站(可在线体验附图)(要代码的留下邮箱)...
  • java基础篇---HTTP协议
  • 【BZOJ】【2157】旅游
  • XmlSerializer
  • bootstrap创建登录注册页面
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • ES6语法详解(一)
  • hadoop集群管理系统搭建规划说明
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • JSONP原理
  • magento2项目上线注意事项
  • npx命令介绍
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Vue--数据传输
  • vue总结
  • Xmanager 远程桌面 CentOS 7
  • yii2权限控制rbac之rule详细讲解
  • 代理模式
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 快速体验 Sentinel 集群限流功能,只需简单几步
  • 利用jquery编写加法运算验证码
  • 前端技术周刊 2018-12-10:前端自动化测试
  • 让你成为前端,后端或全栈开发程序员的进阶指南,一门学到老的技术
  • 如何设计一个微型分布式架构?
  • ionic异常记录
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 昨天1024程序员节,我故意写了个死循环~
  • ​​​​​​​ubuntu16.04 fastreid训练过程
  • #{}和${}的区别?
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (未解决)jmeter报错之“请在微信客户端打开链接”
  • (一)VirtualBox安装增强功能
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • ***检测工具之RKHunter AIDE
  • .Family_物联网
  • .NET Core 中的路径问题
  • .NET成年了,然后呢?
  • .NET高级面试指南专题十一【 设计模式介绍,为什么要用设计模式】
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .Net面试题4
  • ;号自动换行
  • @TableLogic注解说明,以及对增删改查的影响