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);
}
}
我的jdbc工具类(100823)
最新推荐文章于 2022-10-19 09:45:06 发布