我的jdbc工具类(100823)

package com.loin.util;

import java.io.InputStream;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class DatabaseUtil {
    private static Connection conn = null;

    /**
     * 获取链接
     *
     * @return JDBC的链接
     */
    // 这个使用的是容器的,不是jdbc本身的。DataSource的优点 Connection 由容器管理,不必程序关闭
    public static Connection getConn() throws NamingException, SQLException {
        Context initContext = new InitialContext();
        DataSource ds = (DataSource) initContext
                .lookup("java:/comp/env/jdbc/myoracle");
        conn = ds.getConnection();
        return conn;
    }

    /**
     * 查询sql
     *
     * @param sql
     * @param prepare
     * @param connection
     * @return
     * @throws SQLException
     */
    private static ResultSet querySql(Connection connection, String sql,
            Object... prepare) throws SQLException {
        ResultSet set = null;
        PreparedStatement stmt = connection.prepareStatement(sql);
        for (int i = 0; i < prepare.length; i++) {
            Object prepareParam = prepare[i];
            stmt.setObject(i + 1, prepareParam, getType(prepareParam));
        }
        set = stmt.executeQuery();
        return set;
    }

    /**
     * 执行sql
     *
     * @param sql
     * @param prepare
     * @param connection
     * @return
     * @throws SQLException
     */
    private static int exeSql(Connection connection, String sql,
            Object... prepare) throws SQLException {
        int i = 0;
        PreparedStatement stmt = connection.prepareStatement(sql);
        for (int j = 0; j < prepare.length; j++) {
            Object prepareParam = prepare[i];
            stmt.setObject(j + 1, prepareParam, getType(prepareParam));
        }
        i = stmt.executeUpdate();
        return i;
    }

    /**
     * 返回参数的sql类型,这段代码很丑,如何改
     *
     * @param prepareParam
     * @return
     */
    private static int getType(Object prepareParam) {
        // TODO Auto-generated method stub
        if (prepareParam == null)
            return Types.NULL;
        if (prepareParam instanceof String) {
            return Types.VARCHAR;
        } else if (prepareParam instanceof Boolean) {
            return Types.BOOLEAN;
        } else if (prepareParam instanceof Integer) {
            return Types.INTEGER;
        } else if (prepareParam instanceof Long) {
            return Types.BIGINT;
        } else if (prepareParam instanceof Float) {
            return Types.FLOAT;
        } else if (prepareParam instanceof Double) {
            return Types.DOUBLE;
        } else if (prepareParam instanceof BigDecimal) {
            return Types.NUMERIC;
        } else if (prepareParam instanceof Date) {
            return Types.TIMESTAMP;
        } else if (prepareParam instanceof Short) {
            return Types.SMALLINT;
        } else if (prepareParam instanceof InputStream) {
            return Types.BINARY;
        } else {
            throw new RuntimeException("没有此类型");
        }
    }

    /**
     * 执行update的sql语句
     *
     * @param sql
     *            修改的update的sql代码,准备参数,连接
     * @return
     * @throws SQLException
     */
    public static int update(Connection connection, String sql,
            Object... prepare) throws SQLException {
        return exeSql(connection, sql, prepare);
    }

    /**
     * 执行delete的sql语句
     *
     * @param sql
     *            修改的delete的sql代码,准备参数,连接
     * @return
     * @throws SQLException
     */
    public static int delete(Connection connection, String sql,
            Object... prepare) throws SQLException {
        return exeSql(connection, sql, prepare);
    }

    /**
     * 执行insert的sql语句
     *
     * @param sql
     *            修改的insert语句,准备参数,连接
     * @return
     * @throws SQLException
     */
    public static int insert(Connection connection, String sql,
            Object... prepare) throws SQLException {
        return exeSql(connection, sql, prepare);
    }

    /**
     * 执行select的sql语句
     *
     * @param sql
     *            修改的select语句
     * @return
     * @throws SQLException
     */
    public static ResultSet find(Connection connection, String sql,
            Object... prepare) throws SQLException {
        return querySql(connection, sql, prepare);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值