java操作数据库的通用的类
package cn.dao;
- import java.lang.reflect.InvocationTargetException;
- import java.lang.reflect.Method;
- import java.math.BigDecimal;
- import java.sql.Connection;
- import java.sql.DriverManager;
- import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import java.sql.ResultSetMetaData;
- import java.sql.SQLException;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * 数据库操作通用类
- * @author tip
- */
- public class DBHelp {
- private Connection con;
- private PreparedStatement ps;
- private ResultSet rs;
- static Readdoc td = new Readdoc();//读取XML文件中的数据库连接参数
- static {
- try {
- Class.forName(td.getDriver());
- } catch (ClassNotFoundException e) {
- e.printStackTrace();
- }
- }
- public Connection getCon() throws SQLException {
- con = DriverManager.getConnection("jdbc:oracle:thin:@" + td.getAdd()
- + ":1521:" + td.getDb(), td.getUname(), td.getPwd());
- return con;
- }
- public <T> List<T> findBySql(String sql, List<String> params, Class<T> c)
- throws SQLException {
- List<T> list = new ArrayList<T>();
- // 取出c的这个对象中有多少个方法
- Method[] ms = c.getMethods();
- con = this.getCon();
- try {
- ps = con.prepareStatement(sql);
- this.doParams(ps, params);
- rs = ps.executeQuery();
- // 得到db中的表的列
- ResultSetMetaData rsmd = rs.getMetaData();
- // 存储全部的列名
- String[] columnname = new String[rsmd.getColumnCount()];
- for (int i = 0; i < columnname.length; i++) {
- columnname[i] = rsmd.getColumnName(i + 1);
- }
- // id=> "set"+"I"+d=> "setId()" =>对应数据库表的字段
- while (rs.next()) {
- // new对象
- T t = c.newInstance(); // Topic t=new Topic();
- // t.setId(rs.getInt("id"));
- for (int i = 0; i < columnname.length; i++) {
- String cn = columnname[i]; // id title contents
- cn = "set" + cn.substring(0, 1).toUpperCase()
- + cn.substring(1).toLowerCase(); // "setId"
- for (Method m : ms) {
- if (m.getName().equals(cn)) {
- if (rs.getObject(columnname[i]) != null) {
- if ("java.sql.Timestamp".equals(rs.getObject(columnname[i]).getClass().getName())) {
- m.invoke(t, rs.getString(columnname[i]));
- } else if ("java.lang.Integer".equals(rs.getObject(columnname[i]).getClass().getName())) {
- m.invoke(t, rs.getInt(columnname[i]));
- } else {
- m.invoke(t, rs.getObject(columnname[i]));
- }
- } else {
- m.invoke(t, rs.getObject(columnname[i]));
- }
- break;
- }
- }
- }
- list.add(t);
- }
- } catch (IllegalArgumentException e) {
- e.printStackTrace();
- } catch (SQLException e) {
- e.printStackTrace();
- } catch (InstantiationException e) {
- e.printStackTrace();
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- } finally {
- closeAll(rs, ps, con);
- }
- return list;
- }
- // insert into xx values(?,?); params={"tip","whx"};
- public <T> int doUpdate(String sql, List<T> params) throws SQLException {
- con = this.getCon();
- int i = 0;
- try {
- ps = con.prepareStatement(sql);
- doParams(ps, params);
- i = ps.executeUpdate();
- } catch (SQLException e) {
- try {
- con.rollback();
- } catch (SQLException e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
- } finally {
- closeAll(null, ps, con);
- }
- return i;
- }
- // 设置预编译对象参数
- public <T> void doParams(PreparedStatement pstmt, List<T> params)
- throws SQLException {
- if (pstmt != null && params != null && params.size() > 0) {
- for (int i = 0; i < params.size(); i++) {
- if (params.get(i) != null) {
- if (params.get(i).getClass().getName().equals("java.lang.String")) {
- pstmt.setString(i + 1, (String) params.get(i));
- } else if (params.get(i).getClass().getName()
- .equals("java.math.BigDecimal")) {
- pstmt.setBigDecimal(i + 1, (BigDecimal) params.get(i));
- } else if (params.get(i).getClass().getName().equals("java.sql.Timestamp")) {
- pstmt.setString(i + 1, (String) params.get(i));
- } else {
- pstmt.setObject(i + 1, params.get(i));
- }
- } else {
- pstmt.setString(i + 1, "");
- }
- }
- }
- }
- public void closeAll(ResultSet rs, PreparedStatement pstmt, Connection con) {
- if (rs != null) {
- try {
- rs.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- if (pstmt != null) {
- try {
- pstmt.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- if (con != null) {
- try {
- con.close();
- } catch (SQLException e) {
- e.printStackTrace();
- }
- }
- }
- }
java操作数据库的通用的类的更多相关文章
- JDBC 4.0 开始Java操作数据库不用再使用 Class.forName加载驱动类了
JDBC 4.0 开始Java操作数据库不用再使用 Class.forName加载驱动类了 代码示例 转自 https://docs.oracle.com/javase/tutorial/jdbc/o ...
- java操作数据库:增删改查
不多bb了直接上. 工具:myeclipse 2016,mysql 5.7 目的:java操作数据库增删改查商品信息 test数据库的goods表 gid主键,自增 1.实体类Goods:封装数据库数 ...
- 针对SQLServer数据库的通用访问类
Web.config中代码 <configuration> <connectionStrings> <add name="connString" co ...
- JDBC数据源(DataSource)数据源技术是Java操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用。
JDBC数据源(DataSource)的简单实现 数据源技术是Java操作数据库的一个很关键技术,流行的持久化框架都离不开数据源的应用. 2.数据源提供了一种简单获取数据库连接的方式,并能在内部通 ...
- Java操作数据库——手动实现数据库连接池
Java操作数据库——手动实现数据库连接池 摘要:本文主要学习了如何手动实现一个数据库连接池,以及在这基础上的一些改进. 部分内容来自以下博客: https://blog.csdn.net/soonf ...
- Java操作数据库——使用JDBC连接数据库
Java操作数据库——使用JDBC连接数据库 摘要:本文主要学习了如何使用JDBC连接数据库. 背景 数据持久化 数据持久化就是把数据保存到可掉电式存储设备中以供之后使用.大多数情况下,特别是企业级应 ...
- Java操作文件夹的工具类
Java操作文件夹的工具类 import java.io.File; public class DeleteDirectory { /** * 删除单个文件 * @param fileName 要删除 ...
- JDBC 数据库连接 Java操作数据库 jdbc快速入门
JDBC基本概念 Java DataBase Connectivity 数据库连接 java操作数据库 本质上(sun公司的程序员)定义的一套操作关系型数据库的规则 既接口 更新内容之前 代码 pa ...
- Java操作数据库——使用连接池连接数据库
Java操作数据库——使用连接池连接数据库 摘要:本文主要学习了如何使用JDBC连接池连接数据库. 传统方式和连接池方式 传统方式的步骤 使用传统方式在Java中使用JDBC连接数据库,完成一次数据库 ...
随机推荐
- List转换成JSON对象报错(一)
List转换成JSON对象 1.具体报错如下 Exception in thread "main" java.lang.NoClassDefFoundError: org/apac ...
- Caused by: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'content' a
1.错误描述 org.hibernate.exception.DataException: could not execute statement at org.hibernate.exception ...
- Caused by: java.lang.ClassNotFoundException: com.mchange.v2.ser.Indirector
1.错误描述 usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonaming ] { -help ...
- 存储过程 100w提交
create or replace procedure largedata_insert(ip_table_name in varchar2, --目标表 ip_table_column in v ...
- jquery四种监听事件的区别
最近找工作被问到了jquery有哪些事件监听,都有什么区别,忽然有点想不起来了... 然后上网上查看了相关的资料,总结一下,方便大家查看,也方便自己复习! 1.bind()方法: bind(type, ...
- Python机器学习:5.6 使用核PCA进行非线性映射
许多机器学习算法都有一个假设:输入数据要是线性可分的.感知机算法必须针对完全线性可分数据才能收敛.考虑到噪音,Adalien.逻辑斯蒂回归和SVM并不会要求数据完全线性可分. 但是现实生活中有大量的非 ...
- 【BZOJ2998】Problem A(动态规划)
[BZOJ2998]Problem A(动态规划) 题面 BZOJ 题解 一个人的成绩范围可以确定为一个区间 这样就变成了 选择若干区间,不重合, 每个区间有个权值,求最大权值和 这样就可直接\(dp ...
- 【BZOJ3998】弦论(后缀自动机)
[BZOJ3998]弦论(后缀自动机) 题面 BZOJ 题解 这题应该很简单 构建出\(SAM\)后 求出每个点往后还能构建出几个串 按照拓扑序\(dp\)一些就好了 然后就是第\(k\)大,随便搞一 ...
- Luogu 3375 【模板】KMP字符串匹配(KMP算法)
Luogu 3375 [模板]KMP字符串匹配(KMP算法) Description 如题,给出两个字符串s1和s2,其中s2为s1的子串,求出s2在s1中所有出现的位置. 为了减少骗分的情况,接下来 ...
- [BZOJ1010] [HNOI2008] 玩具装箱toy (斜率优化)
Description P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京.他使用自己的压缩器进行压缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中.P教授有编号为1... ...