[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();
                    }
            }
        }
    }
}

 

posted @ 2015-01-31 20:06  Wang_Juan  阅读(183)  评论(0编辑  收藏  举报