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();
  • }
  • }
  • }
  • }
时间: 2024-08-03 18:57:39

java操作数据库的通用的类的相关文章

java 操作数据库clob类型大字段

java 操作数据库clob类型大字段,处理工具类如下: package org.shefron.utils; import java.io.StringReader; import java.sql.Clob; import java.sql.PreparedStatement; import java.sql.SQLException; public class ClobUtils { public final static String getValueFromClob(Clob clob

JDBC——java操作数据库的一系列接口

一.JDBC概述(mysql) 1.Java DataBase Connective 1)概念:JDBC其实就是一套Java操作数据库的规范(接口); 2)数据库驱动: 各个数据库厂商要让java语言去操作数据库就必须实现这套接口,每个数据库都写有一套实现类叫数据库驱动. 3)使用: //导入mysql数据库jar包 //将jar放在lib目录下 右键add--->builderpath //加载驱动 Class.forName("com.mysql.jdbc.Driver");

java操作数据库的3中基本方式

//jdbc提取出来的工具类 package utils; import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.u

java操作数据库:分页查询

直接上.... 还是用之前的goods表,增加了一些数据 1.实体类Goods // 封装数据 public class Goods { private int gid; private String gname; private String gprice; private String gdate; public int getGid() { return gid; } public void setGid(int gid) { this.gid = gid; } public String

Java操作数据库实现&quot;增删改查&quot;

本文主要讲解JDBC操作数据库    主要实现对MySql数据库的"增删改查" 综合概述: JDBC的常用类和接口 一   DriverManager类 DriverManage类用来管理数据库中的所有驱动程序,是JDBC的管理层,作用于用户和驱动程序之间,跟踪可用的驱动程序,并在数据库的驱动之间建立连接,DriverManager类中的方法都是静态方法,下列是DriverManager的常用方法: getConnection(String URL,String user,String

用Java操作数据库Datetime数据

Date.Calendar.Timestamp的区别.相互转换与使用 1 Java.util.Date 包含年.月.日.时.分.秒信息. 1 // String转换为Date 2 String dateStr="2013-8-13 23:23:23"; 3 String pattern="yyyy-MM-dd HH:mm:ss"; 4 DateFormate dateFormat=new SimpleDateFormat(pattern); 5 Date date=

java操作数据库出现(][SQLServer 2000 Driver for JDBC]Error establishing socket.)的问题所在即解决办法

在进行jdbc直接操作数据库时    : 我们需要对该工程进行一次导包(引入"msbase.jar" "mssqlserver.jar" "msutil.jar"  这三个包,具体的做法为  )                         用手标选中我们要导入包的项目,点击右键出现了一些列的列表,选中 Properties ,继而在该面板中选中Java Bukid Path,然后再选中 Add External Jars ,最后选中我们要导入

java操作数据库的基本方法

此次开发工具为eclipse,才有的数据库驱动是mysql-connector-java-5.1.8-bin.jar 第一步,在eclipse的工程目录中引用mysql驱动 驱动下载地址:https://dev.mysql.com/downloads/connector/j/ 选择build path 然后选择configure build path 再选择libraries,选择add external library,找到之前下的数据库驱动,确认,ok 然后下一段测试代码将数据库驱动起来 p

07_数据库创建,添加c3p0操作所需的jar包,编写c3p0-config.xml文件,编写User.java,编写jdbcUtils.java实现操作数据库的模板工具类,UserDao编写,Dao

 1  创建day14数据库,创建user.sql表: A 创建数据库 day14 B 创建数据表 users create table users ( id int primary keyauto_increment, username varchar(20), password varchar(20) ); 2  添加依赖的jar包 c3p0-0.9.1.2.jar mysql-connection-java-5.0.8-bin.jar commons-beanutils-1.8.0.j