zoukankan      html  css  js  c++  java
  • 依靠反射 手写DButils

    闲来无事,写个dbutils玩玩,不完善,满足基本增删改查,上代码

    1、Dbutils

      1 package db;
      2 
      3 import annotation.Table;
      4 import java.util.*;
      5 import java.sql.*;
      6 import java.lang.reflect.Field;
      7 
      8 /**
      9  *
     10  * @author xjy
     11  * @param <T>
     12  */
     13 public class DbUtil<T> {
     14 
     15     private static DataBase dataBase = null;
     16     private static Connection con = null;
     17     private static Statement st = null;
     18 
     19     public DbUtil() {
     20         dataBase = new DataBase();
     21     }
     22 
     23     @SuppressWarnings("null")
     24     public List<T> getAll(T bean) throws Exception {
     25 
     26         List<T> list = new ArrayList<>();
     27         Class<T> clazz = (Class<T>) bean.getClass();
     28         Table table = clazz.getDeclaredAnnotation(Table.class);
     29         String name = table.name();
     30 
     31         String tableName;
     32         if (!"".equals(name)) {
     33             tableName = name;
     34         } else {
     35             tableName = clazz.getSimpleName().toLowerCase();
     36         }
     37 
     38         StringBuilder sql = new StringBuilder("select * from " + tableName);
     39 
     40         if (bean != null) {
     41             sql.append(" where ");
     42             Field[] declaredFields = clazz.getDeclaredFields();
     43 
     44             for (Field declaredField : declaredFields) {
     45                 //打开私有访问
     46                 declaredField.setAccessible(true);
     47                 String name1 = declaredField.getName();
     48                 Object value = declaredField.get(bean);
     49                 if (value != null && !"id".equals(name1)) {
     50                     sql.append(name1).append("='").append(value).append("' and ");
     51                 }
     52             }
     53             sql.append("1=1");
     54         }
     55 
     56         con = dataBase.getConnection();
     57         st = dataBase.getStatement();
     58 
     59         ResultSet rs = st.executeQuery(sql.toString());
     60 
     61         Field[] fields = clazz.getDeclaredFields();
     62         while (rs.next()) {
     63 
     64             T t = clazz.newInstance();
     65 
     66             for (Field field : fields) {
     67                 String fName = field.getName();
     68                 String str = rs.getString(fName);
     69                 field.setAccessible(true);
     70 
     71                 // 如果类型是Integer  
     72                 if (field.getGenericType().toString().equals("class java.lang.Integer")) {
     73                     field.set(t, Integer.valueOf(str));
     74                 } else {
     75                     field.set(t, str);
     76                 }
     77 
     78             }
     79 
     80             list.add(t);
     81         }
     82 
     83         return list;
     84     }
     85 
     86     public int add(T bean) throws Exception {
     87         con = dataBase.getConnection();
     88         st = dataBase.getStatement();
     89         Class<T> clazz = (Class<T>) bean.getClass();
     90         Table table = clazz.getDeclaredAnnotation(Table.class);
     91         String name = table.name();
     92 
     93         String tableName;
     94         if (!"".equals(name)) {
     95             tableName = name;
     96         } else {
     97             tableName = clazz.getSimpleName().toLowerCase();
     98         }
     99 
    100         Field[] fields = clazz.getDeclaredFields();
    101 
    102         StringBuilder sql = new StringBuilder("insert into " + tableName + "(");
    103 
    104         for (Field field : fields) {
    105             String fName = field.getName();
    106             if (!"id".equals(fName)) {
    107                 sql.append(fName).append(",");
    108 
    109             }
    110         }
    111 
    112         sql.deleteCharAt(sql.length() - 1).append(") values(");
    113 
    114         Field[] declaredFields = clazz.getDeclaredFields();
    115 
    116         for (Field declaredField : declaredFields) {
    117 
    118             if (!"id".equals(declaredField.getName())) {
    119                 //打开私有访问
    120                 declaredField.setAccessible(true);
    121                 Object value = declaredField.get(bean);
    122                 sql.append("'").append(value).append("',");
    123             }
    124 
    125         }
    126 
    127         sql.deleteCharAt(sql.length() - 1).append(")");
    128         int result = 0;
    129 
    130         try {
    131             result = st.executeUpdate(sql.toString());
    132         } catch (SQLException se) {
    133             System.out.println(se.getMessage());
    134         } finally {
    135 
    136         }
    137         return result;
    138     }
    139 
    140     @SuppressWarnings("FinallyDiscardsException")
    141     public List<Map<String, Object>> querySql(String sql) {
    142         List<Map<String, Object>> list = new ArrayList<>();
    143 
    144         con = dataBase.getConnection();
    145         st = dataBase.getStatement();
    146         @SuppressWarnings("UnusedAssignment")
    147         ResultSet rs = null;
    148         try {
    149             rs = st.executeQuery(sql);
    150             ResultSetMetaData md = rs.getMetaData(); //获得结果集结构信息,元数据
    151             int columnCount = md.getColumnCount();   //获得列数
    152             while (rs.next()) {
    153                 Map<String, Object> rowData = new HashMap<>();
    154                 for (int i = 1; i <= columnCount; i++) {
    155                     rowData.put(md.getColumnName(i), rs.getObject(i));
    156                 }
    157                 list.add(rowData);
    158             }
    159         } catch (SQLException e) {
    160             System.out.println(e.toString());
    161 
    162         } finally {
    163             dataBase.closeConnection();
    164             return list;
    165         }
    166     }
    167 
    168     @SuppressWarnings("FinallyDiscardsException")
    169     public int executeSql(String sql) {
    170         con = dataBase.getConnection();
    171         st = dataBase.getStatement();
    172         int result = 0;
    173         try {
    174             result = st.executeUpdate(sql);
    175         } catch (SQLException se) {
    176             System.out.println(se.getMessage());
    177         } finally {
    178             dataBase.closeConnection();
    179             return result;
    180         }
    181     }
    182 
    183     @SuppressWarnings("MismatchedReadAndWriteOfArray")
    184     public int update(T bean) throws Exception {
    185         con = dataBase.getConnection();
    186         st = dataBase.getStatement();
    187         Class<T> clazz = (Class<T>) bean.getClass();
    188         Table table = clazz.getDeclaredAnnotation(Table.class);
    189         String name = table.name();
    190 
    191         String tableName;
    192         if (!"".equals(name)) {
    193             tableName = name;
    194         } else {
    195             tableName = clazz.getSimpleName().toLowerCase();
    196         }
    197 
    198         StringBuilder sql = new StringBuilder("update " + tableName + " set ");
    199 
    200         Field[] declaredFields = clazz.getDeclaredFields();
    201 
    202         for (Field declaredField : declaredFields) {
    203             declaredField.setAccessible(true);
    204             //打开私有访问
    205             String name1 = declaredField.getName();
    206             Object value = declaredField.get(bean);
    207             if (value != null && !"id".equals(name1)) {
    208                 sql.append(name1).append("='").append(value).append("',");
    209             }
    210         }
    211         Field field1 = clazz.getDeclaredField("id");
    212         field1.setAccessible(true);
    213 
    214         sql.deleteCharAt(sql.length() - 1).append(" where id =").append(field1.get(bean));
    215 
    216         int result = 0;
    217 
    218         try {
    219             result = st.executeUpdate(sql.toString());
    220         } catch (SQLException se) {
    221             System.out.println(se.getMessage());
    222         } finally {
    223         }
    224         return result;
    225     }
    226 }

    2、注解Table

     1 package annotation;
     2 
     3 import java.lang.annotation.ElementType;
     4 import java.lang.annotation.Retention;
     5 import java.lang.annotation.RetentionPolicy;
     6 import java.lang.annotation.Target;
     7 
     8 /**
     9  *
    10  * @author xjy
    11  */
    12 @Target(ElementType.TYPE)
    13 @Retention(RetentionPolicy.RUNTIME)
    14 public @interface Table {
    15 
    16     public String name() default "";
    17 
    18 }

    3、database,获取连接等,这里用的sqlserver,其他自己发挥咯

     1 package db;
     2 
     3 import java.sql.Connection;
     4 import java.sql.DriverManager;
     5 import java.sql.SQLException;
     6 import java.sql.Statement;
     7 
     8 /**
     9  *
    10  * @author Administrator
    11  */
    12 public class DataBase {
    13   
    14     private String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    15     String url = "jdbc:sqlserver://127.0.0.1:1433;databaseName=db_car";
    16     private String userName = "sa";
    17     private String userPasswd = "123456";
    18     private Connection connection;
    19     private Statement statement;
    20     public DataBase(){
    21         try {
    22             Class.forName(driverName);
    23         }
    24         catch (ClassNotFoundException cnfex){
    25             System.err.println("装载 JDBC/ODBC 驱动程序失败。");
    26             cnfex.printStackTrace();
    27             System.exit(1);
    28         }
    29     } 
    30     //取得与数据库的连接
    31     public Connection getConnection(){
    32         try {
    33             //捕获连接数据库异常
    34             connection = DriverManager.getConnection(url, userName, userPasswd);
    35         } 
    36         catch (SQLException sqlex){
    37             System.err.println("无法连接数据库");
    38             sqlex.printStackTrace();
    39             System.exit(1);
    40         }
    41         finally {
    42             return connection;
    43         }
    44     }
    45     //取得 statement
    46     public Statement getStatement(){ 
    47         try {
    48             if (connection != null){
    49             statement = connection.createStatement();
    50             }
    51         } 
    52         catch (SQLException sqlex){
    53             System.err.println("无法取得 Statement");
    54             sqlex.printStackTrace();
    55             System.exit(1);
    56         }
    57         finally{
    58             return statement;
    59         }
    60     }
    61     public void closeConnection(){
    62         try {
    63             if (null != statement){
    64                 statement.close(); 
    65             }
    66             if (null != connection){
    67                 connection.close();
    68             }
    69             statement = null;
    70             connection = null;
    71             } 
    72             catch (Exception e){
    73                 e.printStackTrace();
    74             }
    75         } 
    76     }

    所需驱动文件:https://files.cnblogs.com/files/xujingyang/sqljdbc4.zip

    顺便说下,开发工具玩的是NetBeans

  • 相关阅读:
    django 母版与继承
    django 模板系统
    及时从数据库中取得数据填放进Form表单的多选框中
    django 自带的验证功能
    django Form表单
    AJAX 操作
    django 中间件
    JVM-crash查看hs_err_pid.log日志
    java-log4j日志打印
    tomcat 闪退问题排查
  • 原文地址:https://www.cnblogs.com/xujingyang/p/10230935.html
Copyright © 2011-2022 走看看