封装小小JDBC

来源:互联网 发布:奇异矩阵特征值分解 编辑:程序博客网 时间:2024/06/05 02:32
import java.lang.reflect.Field;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.ResultSetMetaData;import java.util.ArrayList;import java.util.List;/** *  * 通用的工具类 *  * @author administrator *  */public class DBUtil {// 加载驱动 最新执行 只执行一次static {try {Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");} catch (Exception e) {e.printStackTrace();}}// 定字符串常量 赋值一次 程序中的副本private static final String URL = "jdbc:sqlserver://localhost:1433;databaseName=studnet";private static final String USER = "sa";private static final String PWD = "123456";// 获取数据库连接public static Connection getConn() {try {Connection conn = DriverManager.getConnection(URL, USER, PWD);return conn;} catch (Exception e) {e.printStackTrace();return null;}}/** *  * 通用的关闭连接 */public static void closeConn(ResultSet rs, PreparedStatement psment,Connection conn) {try {if (rs != null) {rs.close();}} catch (Exception e) {e.printStackTrace();}try {if (psment != null) {psment.close();}} catch (Exception e) {e.printStackTrace();}try {if (conn != null) {conn.close();}} catch (Exception e) {e.printStackTrace();}}/** * 通用的查询 */public static List commnoQuery(String sql, Class cls, Object... pars) {// 获取连接Connection conn = DBUtil.getConn();PreparedStatement psment = null;ResultSet rs = null;// 创建一个list对象List list = new ArrayList();try {// 预编译sql语句psment = conn.prepareStatement(sql);// 如果又要赋值的的这么办呢?if (pars != null && pars.length != 0) {for (int i = 0; i < pars.length; i++) {psment.setString(i + 1, pars[i] + "");}}// 执行sqlrs = psment.executeQuery();// 获取数据库表的列名ResultSetMetaData data = rs.getMetaData();// 元数据while (rs.next()) {// 动态的创建对象Object obj = cls.newInstance();// 反射类中的所有属性和方法Field fds[] = cls.getDeclaredFields();// 赋值for (int i = 0; i < fds.length; i++) {// 强制设置给属性赋值fds[i].setAccessible(true);// 获取属性的类型String typeName = fds[i].getType().getName();// 获取属性的名称String attributeName = fds[i].getName();// 列名for (int j = 1; j <= data.getColumnCount(); j++) {// 获取列名String columnName = data.getColumnName(j);if (attributeName.equalsIgnoreCase(columnName)) {// 如果属性名等于列名// 赋值// 如果类型 为String类型if (typeName.endsWith("String")) {fds[i].set(obj, rs.getString(attributeName));} else if (typeName.endsWith("Integer")|| typeName.endsWith("int")) {// 如果为intfds[i].setInt(obj, rs.getInt(attributeName));} else if (typeName.endsWith("Float")|| typeName.endsWith("float")) {// 如果为flaotfds[i].setFloat(obj, rs.getFloat(attributeName));} else {System.out.println("对不起你的类型我们暂时不支持你的哦");}}}}list.add(obj);}} catch (Exception e) {e.printStackTrace();} finally {DBUtil.closeConn(rs, psment, conn);}return list;}/** *  * 通用的增删改 */public static boolean commnoUpdate(String sql, Object... pars) {// 获取连接Connection conn = DBUtil.getConn();PreparedStatement psment = null;try {// 预编译sql语句psment = conn.prepareStatement(sql);// 如果又要赋值的的这么办呢?if (pars != null && pars.length != 0) {for (int i = 0; i < pars.length; i++) {psment.setString(i + 1, pars[i] + "");}}// 执行sqlint count = psment.executeUpdate();if (count > 0) {return true;}} catch (Exception e) {e.printStackTrace();} finally {DBUtil.closeConn(null, psment, conn);}return false;}/** *  * 通用的查询总条数 */public static int commnoSumCount(String sql, Object... pars) {// 获取连接Connection conn = DBUtil.getConn();PreparedStatement psment = null;ResultSet rs = null;try {// 预编译sql语句psment = conn.prepareStatement(sql);// 如果又要赋值的的这么办呢?if (pars != null && pars.length != 0) {for (int i = 0; i < pars.length; i++) {psment.setString(i + 1, pars[i] + "");}}// 执行sqlrs = psment.executeQuery();if (rs.next()) {return rs.getInt(1);}} catch (Exception e) {e.printStackTrace();} finally {DBUtil.closeConn(rs, psment, conn);}return 0;}}


0 0
原创粉丝点击