Jdbc工具类
程序员文章站
2024-03-22 23:53:10
...
JDBC工具类对MySql数据库的操作
导入连接mysql的jar包
使用jdbc.properties文件配置数据库资源
使用properties文件设置连接数据库需要的数据
读取jdbc.properties数据库资源的工具类
properties文件都是根据键值对关系,通过key值得到value值、
public class ConfigUtil {
/**
* 工具类,获取jdbc的配置资源,通过key-value的关系得到配置资源
* @param key
* @return
*/
public static String getValue(String key){
Properties pro = new Properties();
//得到文件输入流
InputStream input = ConfigUtil.class.getResourceAsStream("/jdbc.properties");
String value = null ;
try {
//加载文件输入流
pro.load(input);
value= pro.getProperty(key);
} catch (IOException e) {
e.printStackTrace();
}
return value;
}
}
jdbc操作表
/**
* jdbc连接操作工具
* @author admin
*
*/
public class JdbcUntil {
/**
* 加载驱动,向驱动管理注册
*/
static{
try {
Class.forName(ConfigUtil.getValue("driver"));
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 获取连接
* @return
*/
private static Connection getConn(){
Connection conn = null;
try {
conn = DriverManager.getConnection(ConfigUtil.getValue("url"), //加载url
ConfigUtil.getValue("username"), ConfigUtil.getValue("password"));//加载用户名和密码
return conn;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
//释放连接
private static void colse(ResultSet rs,PreparedStatement ps,Connection conn){
try {
if(rs!=null){
rs.close();//关闭ResultSet
}
if(ps!=null){
ps.close();//关闭PreparedStatement
}
if(conn!=null){
conn.close();//关闭Connection
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 对数据库进行,增加、删除、修改
* @param sql
* @param params
* @return
*/
public static int updateStu(String sql,Object[] params){
PreparedStatement ps = null;
Connection conn = null;
int result = 0;//用户执行添加删除和修改的时候所影响数据库的行数
try {
//获取连接
conn = getConn();
ps = conn.prepareStatement(sql);
//向sql语句注入参数
if(params!=null && params.length>0){
for(int i=0;i<params.length;i++){
ps.setObject(i+1, params[i]);//向sql语句注入参数
}
}
result = ps.executeUpdate();//执行sql语句
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
colse(null, ps, conn);
}
return result;
}
/**
* 查询单个的数据的工具类
* @param args
*/
public static Object getStu(String sql,Object[] params,Class<?> clz){
Connection conn = null;
ResultSet rs = null;
PreparedStatement ps = null;
conn = JdbcUntil.getConn();
try {
ps = conn.prepareStatement(sql);
if(params!=null && params.length>0){
for(int i = 0;i<params.length;i++){
ps.setObject(i+1, params[0]);
}
}
rs = ps.executeQuery();
//当rs没有数据是,返回的是false
if(!rs.next()){
return null;
}
return doResultSet(rs, clz);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
colse(rs, ps, conn);
}
return null;
}
/**
* 将rs里面的参数,封装到对象里面,用于
* @param rs 查询的结果
* @param clz 需要封装的对象
* @return 封装完成的对象
*/
private static Object doResultSet(ResultSet rs,Class<?> clz){
//ResultSetMetaData可用于获取关于 ResultSet 对象中列的类型和属性信息的对象
ResultSetMetaData rsmd = null;
try {
rsmd = rs.getMetaData();
//获取rs的列数
int numberOfColunm = rsmd.getColumnCount();
//通过反射实例化Object对象
Object bean = clz.newInstance();
//通过获取的列,来读取字段
for(int i = 0 ; i<numberOfColunm;i++){
//获取当前列的记录(获取当前列的值)
Object colValue = rs.getObject(i+1);
//获取当前列名
String colName = rsmd.getColumnName(i+1);
//System.out.println(colName);
//获取默认的属性
Field file = clz.getDeclaredField(colName);
//当参数为true的时候不检查访问权限
file.setAccessible(true);
file.set(bean, colValue);
}
return bean;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//
return null;
}
/**
* 查询多个的学生集合
*
* @param sql
* @param params
* @param clz
* @return
*/
public static List<?> getStuList(String sql,Object[] params,Class<?> clz){
Connection conn = null ;
PreparedStatement ps = null;
ResultSet rs = null;
conn = getConn();
try {
ps = conn.prepareStatement(sql);
if(params != null && params.length>0){
for(int i = 0; i<params.length;i++){
ps.setObject(i+1, params[i]);
}
}
rs = ps.executeQuery();
return doResultSetList(rs,clz);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
colse(rs, ps, conn);
}
return null;
}
/**
* 操作Result rs,将rs里面的数据取出来放到集合里面
* @param rs
* @param clz
* @return
*/
private static List<?> doResultSetList(ResultSet rs,Class<?> clz){
try {
//创建集合用于保存查询到的数据
List<Object> list = new ArrayList<Object>();
while(rs.next()){
ResultSetMetaData rsmd = rs.getMetaData();
//获取列数
int numberOfColunm = rsmd.getColumnCount();
//创建实例
Object bean = clz.newInstance();
for(int i = 0;i<numberOfColunm;i++){
//获取当前列的记录
Object value = rs.getObject(i+1);
//获取当前列的名称
String colName = rsmd.getColumnName(i+1);
//获取bean的属性
Field field = clz.getDeclaredField(colName);
field.setAccessible(true);
//对象的字段赋值
field.set(bean,value);
}
//将对象添加集合里面
list.add(bean);
}
return list;
} catch (SQLException | InstantiationException | IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchFieldException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
测试
- 创建数据表ssk
use myschool;
drop table if exists ssk;
create table ssk(
id int not null primary key auto_increment,
name varchar(32),
gender int,
address varchar(32)
);
alter table ssk auto_increment=95001;
- 创建Ssk对象
public class Ssk {
private int id;
private String name;
private int gender;
private String address
.....
- 测试添加数据
public static void main(String[] args) {
//添加数据的sql语句
String sql = "insert into ssk(name,gender,address) value(?,?,?)";
//sql的参数
Object[] params = {"哇哇哇",0,"深圳"};
//执行sql语句
int reuslt = JdbcUntil.updateStu(sql, params);
System.out.println(reuslt);
}
- 查询单个数据
public static void main(String[] args) {
String sql ="select * from ssk where id = ?";
Object[] params = {95002};
Ssk ssk = (Ssk) JdbcUntil.getStu(sql, params, Ssk.class);
System.out.println(ssk)*/;
}
- 查询多条数据
public static void main(String[] args) {
String sql = "select * from ssk where gender=?";
Object[] params = {1};
List<Ssk> list = (List<Ssk>) JdbcUntil.getStuList(sql, params, Ssk.class);
for(Ssk sk:list){
System.out.println(sk);
}
}
推荐阅读
-
JDBC(二)
-
JDBC封装
-
Jdbc工具类
-
File类之按层级关系打印文件名称源码
-
Kmeans聚类java图形界面演示程序
-
使用openssl工具pkcs8和pkcs1之前互相转换
-
解决使用 HBase Bulk Loading 工具出现超过32个hfile的问题,针对一个region的family 博客分类: hadoop-hbase hbasehadoopLoadIncrementalHFilescompletebulkload
-
JBoss内置的HSQL DB数据库 JBossHSQLDBSQL Server设计模式JDBC
-
【sqoop2 error】 org.apache.sqoop.connector.jdbc.GenericJdbcFromInitializer.confi 博客分类: linuxsqoop linuxsqoop
-
Derby使用ij工具操作数据库 博客分类: Sql/derby derbyijjdbcij工具apache