zoukankan      html  css  js  c++  java
  • 关于把JSP新闻内容(String)存入数据库的CLob字段

    首先说明情况:我的News实体类里面的newsContent是String类型的,用富文本编辑器编辑以后要存入数据库的Clob字段中

    代码进行了简单的分层,JdbcUtil全部代码贴在了最下面。

    Dao的实现类(部分):

    1 public void update(News news) {
    2     String sql = "update NEWS set NEWS_TITLE = ?, NEWS_CONTENT = ?, NEWS_DATE = to_date(?,'yyyy-mm-dd'), ADMIN_ID = ? where NEWS_ID = ?";
    3     Reader clobcontent = new StringReader(news.getNewsContent());
    4     jdbcUtil.execute(sql, new Object[]{news.getNewsTitle(),clobcontent,news.getNewsDate(),news.getAdminId(),news.getNewsId()});
    5 }

    JdbcUtil工具类(部分):

    /**
     * 执行不带结果集的sql
     */
    public void execute(String sql,Object[] objs){
        System.out.println(sql);
        createStatment(sql);
        try {
            if (objs != null){
                for (int i = 1; i <= objs.length; i++){
                    
                    //对java.util.Date的特列处理:转java.sql.Date
                    Object obj = objs[i - 1];
                    
                    if(obj != null && obj instanceof java.util.Date){
                        obj = new java.sql.Timestamp(((java.util.Date)obj).getTime());
                    }
                    if(obj != null && obj instanceof java.io.Reader){
                        preparedStatement.setClob(i, (java.io.Reader) obj);
                    }else{
                        preparedStatement.setObject(i,obj);
                    }
                    
                }
            }
        int num = preparedStatement.executeUpdate();
        System.out.println("受影响的行数为:" + num);
        } catch (SQLException e) {
            e.printStackTrace();
        }finally{
            close();
        }
    }

    JdbcUtil(全部):

      1 import java.lang.reflect.Field;
      2 import java.lang.reflect.Method;
      3 import java.math.BigDecimal;
      4 import java.sql.Connection;
      5 import java.sql.DriverManager;
      6 import java.sql.PreparedStatement;
      7 import java.sql.ResultSet;
      8 import java.sql.ResultSetMetaData;
      9 import java.sql.SQLException;
     10 import java.sql.Statement;
     11 import java.util.ArrayList;
     12 import java.util.Date;
     13 import java.util.List;
     14 
     15 /**
     16  * 
     17  */
     18 public class JdbcUtil {
     19     
     20     //连接
     21     Connection conn = null;
     22     
     23     //statement对象用于执行sql语句
     24     PreparedStatement preparedStatement = null;
     25 
     26     //结果集
     27     ResultSet rs = null;
     28     
     29     /**
     30      * 连接
     31      */
     32     public Connection connect(){
     33         try {
     34             Class.forName(JdbcProperties.getValue("driverClassName"));
     35             conn = DriverManager.getConnection(JdbcProperties.getValue("url"), JdbcProperties.getValue("username"), JdbcProperties.getValue("password"));
     36         } catch (Exception e) {
     37             e.printStackTrace();
     38         }
     39         return conn;
     40     }
     41     
     42     /**
     43      * 创建statement
     44      */
     45     public PreparedStatement createStatment(String sql){
     46         //连接数据库
     47         connect();
     48         try {
     49             preparedStatement = conn.prepareStatement(sql);
     50         } catch (SQLException e) {
     51             e.printStackTrace();
     52         }
     53         return preparedStatement;
     54     }
     55     
     56     /**
     57      * 执行带结果集的sql
     58      */
     59     
     60     public <T> List<T> executeQuery(Class<T> cla,String sql,Object[] objs){
     61         System.out.println(sql);
     62         //创建statement
     63         createStatment(sql);
     64         List<T> list = null;
     65         try {
     66             if (objs != null){
     67                 for (int i = 1; i <= objs.length; i++){
     68                     preparedStatement.setObject(i,objs[i - 1]);
     69                 }
     70             }
     71             rs = preparedStatement.executeQuery();
     72             list = toList(cla, rs);
     73         } catch (SQLException e) {
     74             e.printStackTrace();
     75             list = new ArrayList<T>();
     76         }finally{
     77             close();
     78         }
     79         return list;
     80     }
     81     
     82     /**
     83      * 执行带结果集的sql,带分页的
     84      */
     85     
     86     public <T> List<T> executeQuery(Class<T> cla,String sql,Object[] objs,Pager pager){
     87         //创建statement
     88         String countSql = pager.getCountSql(sql);
     89         System.out.println(countSql);
     90         createStatment(countSql);
     91         
     92         Integer count = 0;
     93         try {
     94             if (objs != null){
     95                 for (int i = 1; i <= objs.length; i++){
     96                     preparedStatement.setObject(i,objs[i - 1]);
     97                 }
     98             }
     99             rs = preparedStatement.executeQuery();
    100             if(rs.next()){
    101                 count = rs.getInt(1);
    102             }
    103             System.out.println("count:" + count);
    104         } catch (SQLException e) {
    105         }finally{
    106             try {
    107                 rs.close();
    108                 preparedStatement.close();
    109             } catch (SQLException e) {
    110                 e.printStackTrace();
    111             }
    112         }
    113         pager.setTotalCount(count);
    114         
    115         //处理翻页sql
    116         sql = pager.getPageSql(sql);
    117         System.out.println(sql);
    118         createStatment(sql);
    119         List<T> list = null;
    120         try {
    121             if (objs != null){
    122                 for (int i = 1; i <= objs.length; i++){
    123                     preparedStatement.setObject(i,objs[i - 1]);
    124                 }
    125             }
    126             rs = preparedStatement.executeQuery();
    127             list = toList(cla, rs);
    128         } catch (SQLException e) {
    129             e.printStackTrace();
    130             list = new ArrayList<T>();
    131         }finally{
    132             close();
    133         }
    134         return list;
    135     }
    136     
    137     
    138     /**
    139      * 执行不带结果集的sql
    140      */
    141     public void execute(String sql,Object[] objs){
    142         System.out.println(sql);
    143         createStatment(sql);
    144         try {
    145             if (objs != null){
    146                 for (int i = 1; i <= objs.length; i++){
    147                     
    148                     //对java.util.Date的特列处理:转java.sql.Date
    149                     Object obj = objs[i - 1];
    150                     
    151                     if(obj != null && obj instanceof java.util.Date){
    152                         obj = new java.sql.Timestamp(((java.util.Date)obj).getTime());
    153                     }
    154                     if(obj != null && obj instanceof java.io.Reader){
    155                         preparedStatement.setClob(i, (java.io.Reader) obj);
    156                     }else{
    157                         preparedStatement.setObject(i,obj);
    158                     }
    159                     
    160                 }
    161             }
    162         int num = preparedStatement.executeUpdate();
    163         System.out.println("受影响的行数为:" + num);
    164         } catch (SQLException e) {
    165             e.printStackTrace();
    166         }finally{
    167             close();
    168         }
    169     }
    170     
    171     /**
    172      * 执行insert语句,执行成功,返回表的主键
    173      */
    174     public int insert(String sql,String idSql,Object[] objs){
    175         System.out.println(sql);
    176 
    177         int id = 0;
    178         
    179         //连接数据库
    180         connect();
    181         try {
    182             preparedStatement = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
    183         } catch (SQLException e) {
    184             e.printStackTrace();
    185         }
    186         try {
    187             if (objs != null){
    188                 for (int i = 1; i <= objs.length; i++){
    189                     
    190                     //对java.util.Date的特列处理:转java.sql.Date
    191                     Object obj = objs[i - 1];
    192                     
    193                     if(obj != null && obj instanceof java.util.Date){
    194                         //obj = new java.sql.Date(((java.util.Date)obj).getTime());
    195                         obj = new java.sql.Timestamp(((java.util.Date)obj).getTime());
    196                     }
    197                     
    198                     preparedStatement.setObject(i,obj);
    199                 }
    200             }
    201         int num = preparedStatement.executeUpdate();
    202         
    203         ResultSet rs = preparedStatement.getGeneratedKeys();
    204         String rowId = "";
    205         if(rs.next()){
    206             rowId = rs.getString(1);
    207         }
    208         rs.close();
    209         preparedStatement.close();
    210         
    211          //select id from tablename where rowId = ?
    212         preparedStatement = conn.prepareStatement(idSql);
    213         preparedStatement.setString(1,rowId);
    214         
    215         rs = preparedStatement.executeQuery();
    216         
    217         if(rs.next()){
    218             id = rs.getInt(1);
    219         }
    220         
    221         System.out.println("受影响的行数为:" + num);
    222         } catch (SQLException e) {
    223             e.printStackTrace();
    224         }finally{
    225             close();
    226         }
    227         
    228         return id;
    229     }
    230     
    231     /**
    232      * 关闭所有对象
    233      */
    234     public void close(){
    235         try {
    236             if (rs != null){
    237                 rs.close();
    238             }
    239             if (preparedStatement != null){
    240                 preparedStatement.close();
    241             }
    242             if (conn != null){
    243                 conn.close();
    244             }
    245         } catch (SQLException e) {
    246             e.printStackTrace();
    247         }
    248     }
    249     
    250     
    251     /**
    252      * 将结果集转化为对象
    253      */
    254     @SuppressWarnings("unchecked")
    255     public static <T> List<T> toList(Class<T> cla,ResultSet rs){
    256         
    257         List<T> list = new ArrayList<T>();
    258         
    259         //1.获取结果集里面所有的列的列名
    260         try {
    261             while (rs.next()){
    262             //5.反射java对象。
    263             Object obj = cla.newInstance();
    264             
    265             ResultSetMetaData rsmd = rs.getMetaData();
    266             int count = rsmd.getColumnCount();
    267             for (int i = 1; i <= count; i++){
    268                 //取列名
    269                 String columnName = rsmd.getColumnName(i).toLowerCase();
    270                 
    271                 //处理外键的情况
    272                 if (columnName.indexOf(".") != -1){
    273                     //列名称用.分隔
    274                     String[] fields = columnName.split("[.]");
    275                     //第一个位置是外键对象名称
    276                     String fieldName = fields[0];
    277                     //第二个位置是外键对象当中的字段名称
    278                     String foreignFieldName = fields[1];
    279                     
    280                     //去下划线,并且下划线后面的首字母变大写
    281                     int _position = foreignFieldName.indexOf("_");
    282                     if(_position != -1){
    283                         String[] foreignFieldNames = foreignFieldName.split("[_]");
    284                         
    285                         String preChar = foreignFieldNames[1].substring(0, 1).toUpperCase();
    286                         
    287                         String otherName = foreignFieldNames[1].substring(1);
    288                         foreignFieldName = foreignFieldNames[0] + preChar + otherName;
    289                     }
    290                     //取到外键对象这个字段
    291                     Field field = cla.getDeclaredField(fieldName);
    292                     //临时名称,用于拼接getter and setter
    293                     String tempName = String.valueOf(fieldName.charAt(0)).toUpperCase()  + fieldName.substring(1);
    294                     //获得getter
    295                     Method getMethod = cla.getMethod("get" + tempName );
    296                     //执行getter,获得外键对象
    297                     Object foreign = getMethod.invoke(obj);
    298                     //如果外键对象为空,则new一个实例,通过setter set到当前对象中
    299                     if (foreign == null){
    300                         foreign = field.getType().newInstance();
    301                         Method setMethod = cla.getMethod("set" + tempName, field.getType());
    302                         setMethod.invoke(obj, foreign);
    303                     }
    304                     //外键对象当中的临时字段名称
    305                     String foreignTempName = String.valueOf(foreignFieldName.charAt(0)).toUpperCase()  + foreignFieldName.substring(1);; 
    306                     //获得外键对象当中的字段
    307                     
    308                     Field foreignField = field.getType().getDeclaredField(foreignFieldName);
    309                     //取外键对象当中字段的setter
    310                     Method foreignSetMethod = field.getType().getMethod("set" + foreignTempName, foreignField.getType());
    311                     
    312                     //setType_name()
    313                     
    314                     //获取字段的值
    315                     Object value = null;
    316                     Class<?> javaType = foreignField.getType();
    317                     if (javaType.equals(int.class) || javaType.equals(Integer.class) ){
    318                         value = rs.getInt(columnName);
    319                     }else if (javaType.equals(String.class)){
    320                         value = rs.getString(columnName);
    321                     }else if (javaType.equals(byte.class) || javaType.equals(Byte.class)){
    322                         value = rs.getByte(columnName);
    323                     }else if (javaType.equals(short.class) || javaType.equals(Short.class)){
    324                         value = rs.getShort(columnName);
    325                     }else if (javaType.equals(long.class) || javaType.equals(Long.class)){
    326                         value = rs.getLong(columnName);
    327                     }else if (javaType.equals(float.class) || javaType.equals(Float.class)){
    328                         value = rs.getFloat(columnName);
    329                     }else if (javaType.equals(double.class) || javaType.equals(Double.class)){
    330                         value = rs.getDouble(columnName);
    331                     }else if (javaType.equals(BigDecimal.class)){
    332                         value = rs.getBigDecimal(columnName);
    333                     }else if (javaType.equals(Date.class)){
    334                         //value = rs.getDate(columnName);
    335                         value = rs.getTimestamp(columnName);
    336                     }else if (javaType.equals(boolean.class) || javaType.equals(Boolean.class)){
    337                         value = rs.getBoolean(columnName);
    338                     }else if (javaType.equals(Object.class)){
    339                         value = rs.getObject(columnName);
    340                     }else{
    341                         System.out.println("未识别的列类型:" + javaType);
    342                     }
    343                     //执行setter
    344                     foreignSetMethod.invoke(foreign, value);
    345                 }
    346                 
    347                 //2.将列名转化为java对象中的属性名
    348                 int position = columnName.indexOf("_");
    349                 
    350                 //属性名
    351                 String fieldName;
    352                 if (position != -1){
    353                     //取下划线后面的首字母
    354                     char firstChar = columnName.charAt(position + 1);
    355                     //将_x格式转化成X
    356                     //给属性名赋值,属性名等于去掉下划后,将下划线后面的首字母大写
    357                     fieldName = columnName.replace("_" + firstChar, String.valueOf(firstChar).toUpperCase());
    358                 }else{
    359                     //给属性名赋值,属性名等于列名
    360                     fieldName = columnName;
    361                 }
    362                 
    363                 //3.根据java属性名找属性名的java类型
    364                 //找到对应的字段
    365                 Field field = null;
    366                 try {
    367                     field = cla.getDeclaredField(fieldName);
    368                 } catch (NoSuchFieldException e) {
    369                     //e.printStackTrace();
    370                 }
    371                 if (field != null){
    372                     //取字段的java类型
    373                     Class<?> javaType = field.getType();
    374                     //根据java类型和set方法名称找到对应的set方法
    375                     String methodName = "set" + String.valueOf(fieldName.charAt(0)).toUpperCase() + fieldName.substring(1);
    376                     Method setMethod = cla.getDeclaredMethod(methodName, javaType);
    377                     
    378                     //4.从结果集取值。(根据属性名的java类型执行对应的rs.getXX方法。)
    379                     Object value = null;
    380                     if (javaType.equals(int.class) || javaType.equals(Integer.class) ){
    381                         value = rs.getInt(columnName);
    382                     }else if (javaType.equals(String.class)){
    383                         value = rs.getString(columnName);
    384                     }else if (javaType.equals(byte.class) || javaType.equals(Byte.class)){
    385                         value = rs.getByte(columnName);
    386                     }else if (javaType.equals(short.class) || javaType.equals(Short.class)){
    387                         value = rs.getShort(columnName);
    388                     }else if (javaType.equals(long.class) || javaType.equals(Long.class)){
    389                         value = rs.getLong(columnName);
    390                     }else if (javaType.equals(float.class) || javaType.equals(Float.class)){
    391                         value = rs.getFloat(columnName);
    392                     }else if (javaType.equals(double.class) || javaType.equals(Double.class)){
    393                         value = rs.getDouble(columnName);
    394                     }else if (javaType.equals(BigDecimal.class)){
    395                         value = rs.getBigDecimal(columnName);
    396                     }else if (javaType.equals(Date.class)){
    397                         //value = rs.getDate(columnName);
    398                         value = rs.getTimestamp(columnName);
    399                     }else if (javaType.equals(boolean.class) || javaType.equals(Boolean.class)){
    400                         value = rs.getBoolean(columnName);
    401                     }else if (javaType.equals(Object.class)){
    402                         value = rs.getObject(columnName);
    403                     }else{
    404                         System.out.println("未识别的列类型:" + javaType);
    405                     }
    406                     //6.将结果集取到的值set到反射的对象中。    
    407                     setMethod.invoke(obj, value);
    408                 }
    409                 
    410             }
    411             list.add((T)obj);
    412             }
    413             
    414         } catch (Exception e) {
    415             e.printStackTrace();
    416         }
    417         return list;
    418     }
    419     
    420     
    421     public static void main(String[] args) {
    422         JdbcUtil jdbcUtil = new JdbcUtil();
    423         jdbcUtil.executeQuery(Object.class, "select * from Student", null);
    424     }
    425 }
    View Code
  • 相关阅读:
    Attributes in C#
    asp.net C# 时间格式大全
    UVA 10518 How Many Calls?
    UVA 10303 How Many Trees?
    UVA 991 Safe Salutations
    UVA 10862 Connect the Cable Wires
    UVA 10417 Gift Exchanging
    UVA 10229 Modular Fibonacci
    UVA 10079 Pizza Cutting
    UVA 10334 Ray Through Glasses
  • 原文地址:https://www.cnblogs.com/yt975548/p/6168788.html
Copyright © 2011-2022 走看看