无框架的JDBC连接池,主要方法有:
查询语句:executeQuery(String sql)
查询语句:executeQuery(String sql,Object[] params)
增删改语句:executeUpdate(String sql)
增删改语句:executeUpdate(String sql,Object[] params)
:smile:
文件下载地址:
部分代码预览:
package JQuery.util;
/**使用PreparedStatement使Statement更加安全**/
import java.sql.PreparedStatement;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.ResultSetMetaData;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
public class JDBCUtil
{
/**数据库链接必要属性:类型、地址、端口、用户名、密码、库名**/
private static String sql;
private static String address;
private static String port;
private static String username;
private static String password;
private static String dbname;
/**创建唯一属性保存最总url地址**/
private static String url;
/**JDBC操作数据库所需对象**/
private static Connection connection=null; //链接对象
private static PreparedStatement stmt=null; //操作数据库的对象
private static ResultSet rs=null; //结果保存对象
/**自身对象确保唯一**/
private static JDBCUtil jdbcUtil= null;
private static boolean errSwitch = true; //是否提示错误信息
private static boolean infoSwitch = true; //是否提示常规信息
private static boolean warningSwitch = true;
/********************************************************************************/
public static synchronized JDBCUtil getInitJDBCUtil()
{
configureMysql("mysql","127.0.0.1","3306","root","Your Password","jquery");
configureSetting(true,true,true);
/**确保JDBCUtil在主方法中不使用new**/
if(jdbcUtil==null)
{
info("新建jdbcUtil单元");
jdbcUtil = new JDBCUtil();
}
return jdbcUtil;
}
static
{
/**确保驱动不被多次创建**/
/**加载驱动**/
try
{
Class.forName("com.mysql.jdbc.Driver");
}
catch(ClassNotFoundException e)
{
err("加载驱动失败,请检查驱动是否地址是否正确");
}
finally
{
info("加载驱动静态代码块static执行完毕");
}
}
private static void configureSetting(boolean err,boolean info,boolean warning)
{
JDBCUtil.errSwitch=err;
JDBCUtil.infoSwitch=info;
JDBCUtil.warningSwitch=warning;
}
/**配置数据库的链接信息**/
private static void configureMysql(String sql, String address, String port, String username, String password, String dbname)
{
/**这里使用JDBCUtil而不是使用this是因为变量是静态变量,在这个类中具有唯一性**/
JDBCUtil.sql = sql;
JDBCUtil.address = address;
JDBCUtil.port = port;
JDBCUtil.username = username;
JDBCUtil.password = password;
JDBCUtil.dbname = dbname;
JDBCUtil.url="jdbc:"+JDBCUtil.sql+"://"+JDBCUtil.address+":"+JDBCUtil.port+"/"+JDBCUtil.dbname+"?serverTimezone=GMT&useUnicode=true&characterEncoding=utf-8&useSSL=false";
}
public Connection getConnection()
{
try
{
info("获取数据库连接");
connection=DriverManager.getConnection(JDBCUtil.url,JDBCUtil.username,JDBCUtil.password);
}
catch (SQLException e)
{
err("数据库连接失败,检查密码用户名等填写问题");
e.printStackTrace();
}
finally
{
info("getConnection连接获取方法执行完毕");
}
return connection;
}
/********************************************************************************/
/**执行操作数据库的方法**/
/********************************************************************************/
public int executeUpdate(String sql) throws Exception
{
int affectedLine=0;//受影响的行数
/**建立数据库连接**/
connection = getConnection();
/**操作数据库对象**/
stmt=connection.prepareStatement(sql); //准备执行语句
affectedLine = stmt.executeUpdate(); //执行语句
closeAll();
return affectedLine;
}
public int executeUpdate(String sql,Object[] params) throws Exception
{
int affectedLine=0;//受影响的行数
/**建立数据库连接**/
connection = getConnection();
/**操作数据库对象**/
stmt=connection.prepareStatement(sql); //准备执行语句
for(int i=0;i<params.length;i++)
{
/**用来给执行语句中的?'问号'赋值**/
stmt.setObject(i+1,params[i]);
}
affectedLine = stmt.executeUpdate(); //执行语句
closeAll();
return affectedLine;
}
/********************************************************************************/
/**
* 查询原理: 执行executeQuery->调用executeQueryRS获取结果集
* executeQuery方法把结果集分类整理放入顺序表中
*/
/********************************************************************************/
private ResultSet executeQueryRS(String sql,Object[] params)
{
/**建立数据库连接**/
connection = getConnection();
try
{
stmt=connection.prepareStatement(sql); //准备执行语句
for(int i=0;i<params.length;i++)
{
/**用来给执行语句中的?'问号'赋值**/
stmt.setObject(i+1,params[i]);
}
rs=stmt.executeQuery(); //执行语句
}
catch (SQLException e)
{
err("执行语句错误,请检查语句是否正确");
e.printStackTrace();
}
finally
{
info("executeQueryRS原始结果集返回方法执行完毕");
}
return rs;
}
private ResultSet executeQueryRS(String sql)
{
/**建立数据库连接**/
connection = getConnection();
try
{
stmt=connection.prepareStatement(sql); //准备执行语句
rs=stmt.executeQuery(); //执行语句
}
catch (SQLException e)
{
err("执行语句错误,请检查语句是否正确");
e.printStackTrace();
}
finally
{
info("executeQueryRS原始结果集返回方法执行完毕");
}
return rs;
}
public List<HashMap> executeQuery(String sql)
{
info("执行mysql查询方法(不带?号参数)");
ResultSet tempRS;
tempRS = executeQueryRS(sql);
/**ResultSetMetaData结果集原数据,用于获取关于ResultSet列的名和值**/
ResultSetMetaData rsmd = null;
int columnCount = 0;
try
{
rsmd=tempRS.getMetaData(); //获取原数据
columnCount=rsmd.getColumnCount(); //取结果集列数
}
catch (SQLException e)
{
err("[executeQuery(String sql)]获取结果集数据失败,具体原因请查看日志");
e.printStackTrace();
}
finally
{
info("executeQuery查询执行完毕");
}
/**新建一个顺序表,每一条记录都作为一个HashMap保存在顺序表里面**/
List<HashMap> list;
list = new ArrayList<HashMap>();
try
{
//对结果集进行遍历
while(tempRS.next())
{
/**新建一个HashMap每一条记录都保存在一个HashMap里面**/
HashMap<String,Object> map;
map = new HashMap<String,Object>();
for(int i=1;i<=columnCount;i++)
{
String before;
Object after;
before = rsmd.getColumnLabel(i);
after = rs.getObject(i);
map.put(before,after); //获取列名
}
list.add(map);//将HashMap放入顺序表list中
}
}
catch (SQLException e)
{
err("[executeQuery(String sql)]结果集遍历失败");
e.printStackTrace();
}
finally
{
closeAll();
}
return list; //返回顺序表
}
public List<HashMap> executeQuery(String sql,Object[] params)
{
info("执行mysql查询方法(带?号参数)");
ResultSet tempRS;
tempRS = executeQueryRS(sql,params);
/**ResultSetMetaData结果集原数据,用于获取关于ResultSet列的名和值**/
ResultSetMetaData rsmd = null;
int columnCount = 0;
try
{
rsmd=tempRS.getMetaData(); //获取原数据
columnCount=rsmd.getColumnCount(); //取结果集列数
}
catch (SQLException e)
{
err("[executeQuery(String sql,Object[] params)]获取结果集数据失败,具体原因请查看日志");
e.printStackTrace();
}
finally
{
info("executeQuery查询执行完毕");
}
/**新建一个顺序表,每一条记录都作为一个HashMap保存在顺序表里面**/
List<HashMap> list;
list = new ArrayList<HashMap>();
try
{
//对结果集进行遍历
while(tempRS.next())
{
/**新建一个HashMap每一条记录都保存在一个HashMap里面**/
HashMap<String,Object> map;
map = new HashMap<String,Object>();
for(int i=1;i<=columnCount;i++)
{
String before;
Object after;
before = rsmd.getColumnLabel(i);
after = rs.getObject(i);
map.put(before,after); //获取列名
}
list.add(map);//将HashMap放入顺序表list中
}
}
catch (SQLException e)
{
err("[executeQuery(String sql,Object[] params)]结果集遍历失败");
e.printStackTrace();
}
finally
{
closeAll();
}
return list; //返回顺序表
}
public void closeAll()
{
info("开始关闭基于JDBC的MYSQL数据库操作插件");
closeRs();
closeStmt();
closeConnection();
info("关闭基于JDBC的MYSQL数据库操作插件完成");
}
private void closeRs()
{
/**关闭结果集对象**/
if(rs!=null)
{
try
{
rs.close();
info("关闭结果集对象成功");
}
catch (SQLException e)
{
err("关闭结果集对象失败");
e.printStackTrace();
}
finally
{
info("closeRs执行完毕");
}
}
}
private void closeStmt()
{
/**关闭stmt对象**/
if(stmt != null)
{
try
{
stmt.close();
info("关闭stmt对象成功");
}
catch (SQLException e)
{
err("关闭stmt对象失败");
e.printStackTrace();
}
finally
{
info("closeStmt执行完毕");
}
}
}
private void closeConnection()
{
/**关闭connection连接对象**/
if(connection != null)
{
try
{
connection.close();
info("关闭connection对象成功");
}
catch (SQLException e)
{
err("关闭connection连接对象失败");
e.printStackTrace();
}
finally
{
info("closeConnection执行完毕");
}
}
}
private static void err(Object object)
{
if(errSwitch)
{
System.err.println("***********************");
System.err.println("数据库连接模块发生错误:");
System.err.println(object);
System.err.println("错误时间:"+new Date());
System.err.println("***********************");
}
}
private static void info(Object object)
{
if(infoSwitch)
{
System.out.println("***********************");
System.out.println("数据库连接模块信息提示:");
System.out.println(object);
System.out.println("提示时间:" + new Date());
System.out.println("***********************");
}
}
private static void warning(Object object)
{
if(warningSwitch)
{
System.out.println("***********************");
System.out.println("数据库连接模块告警提示:");
System.out.println(object);
System.out.println("告警时间:" + new Date());
System.out.println("***********************");
}
}
}