• JDBC 操作数据库Util类


    JDBC 操作数据库Util类


    import java.io.IOException;
    import java.sql.Blob;
    import java.sql.CallableStatement;
    import java.sql.Clob;
    import java.sql.Connection;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;
    import java.sql.SQLException;
    import java.sql.Types;
    import java.text.MessageFormat;
    import java.util.ArrayList;
    import java.util.Hashtable;
    import java.util.List;
    import java.util.Map;
    
    import oracle.jdbc.driver.OracleTypes;
    
    import org.springframework.dao.DataAccessException;
    import org.springframework.jdbc.core.CallableStatementCallback;
    import org.springframework.jdbc.core.CallableStatementCreator;
    import org.springframework.jdbc.core.JdbcTemplate;
    
    import com.sgcc.uap.rest.support.QueryResultObject;
    import com.sgcc.uap.rest.utils.RestUtils;
    
    /***
     * 
     * @desc  DB工具类
     * @author yujuan
     * @todo TODO
     */
    public class DBUtil {
    	public static final int BIT =OracleTypes.BIT;
    	public static final int TINYINT =OracleTypes.TINYINT;
    	public static final int SMALLINT = OracleTypes.SMALLINT;
    	public static final int INTEGER = OracleTypes.INTEGER;
    	public static final int BIGINT = OracleTypes.BIGINT;
    	public static final int FLOAT = OracleTypes.FLOAT;
    	public static final int REAL =OracleTypes.REAL;
    	public static final int DOUBLE =OracleTypes.DOUBLE;
    	public static final int NUMERIC = OracleTypes.NUMERIC;
    	public static final int DECIMAL = OracleTypes.DECIMAL;
    	public static final int CHAR = OracleTypes.CHAR;
    	public static final int VARCHAR = OracleTypes.VARCHAR;
    	public static final int LONGVARCHAR = OracleTypes.LONGVARCHAR;
    	public static final int DATE = OracleTypes.DATE;
    	public static final int TIME =OracleTypes.TIME;
    	public static final int TIMESTAMP =OracleTypes.TIMESTAMP;
    	public static final int BOOLEAN = OracleTypes.BOOLEAN;
    	
    	private static final String PAGE_SQL_TEMPLETE = "select * from (select row_.*,rownum rownum_ from ({0}) row_ where rownum <= {1}) where rownum_>{2}"; //oracle
    
    	
    	/***
    	 * 
    	 * @desc分页查询
    	 * @author yujuan
    	 * @param jdbcTemplate
    	 * @param sql
    	 * @param page
    	 * @param rows
    	 * @param objs
    	 * @return
    	 */
    	public static  List<Map<String, Object>>  queryPageList(JdbcTemplate jdbcTemplate,String  sql, int page, int rows,Object... params){
    		//封装分页SQL
    		sql=createPageSql(sql, page, rows);
    		return jdbcTemplate.queryForList(sql,params);
    	}
    	
    	/***
    	 * 
    	 * @desc查询总数
    	 * @author yujuan
    	 * @param jdbcTemplate
    	 * @param sql
    	 * @param objs
    	 * @return
    	 */
    	public static  Integer queryDataTotal(JdbcTemplate jdbcTemplate,String  sql,Object... params){
    		//封装分页SQL
    		return jdbcTemplate.queryForInt(sql,params);
    	}
    	
    	/***
    	 * 
    	 * @desc分页查询(返回count,list)
    	 * @author yujuan
    	 * @param jdbcTemplate
    	 * @param sql
    	 * @param page
    	 * @param rows
    	 * @param objs
    	 * @return
    	 */
    	public static  QueryResultObject  queryPage(JdbcTemplate jdbcTemplate,String  sql,  int page, int rows,Object... params){
    		List<Map<String, Object>> list= queryPageList( jdbcTemplate,  sql,  page,  rows,  params);
    		Integer count= queryDataTotal(jdbcTemplate, sql, params);
    		return RestUtils.wrappQueryResult(list, count);
    	}
    	
    	/***
    	 * 
    	 * @desc 按照数据库类型,封装SQL
    	 * @author yujuan
    	 * @param sql
    	 * @param page
    	 * @param rows
    	 * @return
    	 */
    	private static String createPageSql(String sql, int page, int rows){
    		int beginIndex = (page-1)*rows;
    		int endIndex = beginIndex+rows;
    		String[] sqlParam = {sql,endIndex+"",beginIndex+""};
    		sql = MessageFormat.format(PAGE_SQL_TEMPLETE, sqlParam);
    		return sql;
    	}
    	/***
    	 * 
    	 * @desc  执行存储过程(无返回值)
    	 * @author yujuan
    	 * @param procedureName
    	 * @param params
    	 * @param jdbcTemplate
    	 * @return
    	 */
    	@SuppressWarnings({ "unchecked", "rawtypes" })
        public static Boolean executeProcedure(JdbcTemplate jdbcTemplate,String procedureName,final Object[]params){
    		StringBuffer sqlbuffer = new StringBuffer();
            if (params == null) {
                sqlbuffer.append("{call ");
                sqlbuffer.append(procedureName);
                sqlbuffer.append("()}");
            } else {
                sqlbuffer.append("{call ");
                sqlbuffer.append(procedureName);
                sqlbuffer.append("(");
                for (int i = 0; i < params.length; i++) {
                    sqlbuffer.append("?,");
                }
                if (params.length > 0) {
                    sqlbuffer.delete(sqlbuffer.length() - 1, sqlbuffer.length());
                }
                sqlbuffer.append(")}");
            }
            final String sql = sqlbuffer.toString(); 
            Boolean result=true;
            try{
            	jdbcTemplate.execute(   
              	         new CallableStatementCreator() {   
              	            public CallableStatement createCallableStatement(Connection con) throws SQLException {   
              	               CallableStatement cs = con.prepareCall(sql);  
              	               return setParameters(params, cs,0);   
              	            }   
              	         }, new CallableStatementCallback() {   
              	            public Object doInCallableStatement(CallableStatement cs) throws SQLException,DataAccessException {   
              	              return cs.execute();
              	            }   
              	      }); 
            }catch (Exception e) {
            	result=false;
    			e.printStackTrace();
    		}
            return result;
    	}
    	/***
    	 * 
    	 * @desc执行存储过程(函数) 返回值非集合
    	 * @author yujuan
    	 * @param procedureName
    	 * @param params
    	 * @param jdbcTemplate
    	 * @param outType
    	 * @return
    	 */
    	@SuppressWarnings({ "unchecked", "rawtypes" })
        public static Object executeProcedure(JdbcTemplate jdbcTemplate,String procedureName,final Object[]params,final int returnType){
    		StringBuffer sqlbuffer = new StringBuffer();
            if (params == null) {
                sqlbuffer.append("{?=call ");
                sqlbuffer.append(procedureName);
                sqlbuffer.append("()}");
            } else {
                sqlbuffer.append("{?=call ");
                sqlbuffer.append(procedureName);
                sqlbuffer.append("(");
                for (int i = 0; i < params.length; i++) {
                    sqlbuffer.append("?,");
                }
                if (params.length > 0) {
                    sqlbuffer.delete(sqlbuffer.length() - 1, sqlbuffer.length());
                }
                sqlbuffer.append(")}");
            }
            final String sql = sqlbuffer.toString();
    		
    		Object result = jdbcTemplate.execute(   
        	         new CallableStatementCreator() {   
        	            public CallableStatement createCallableStatement(Connection con) throws SQLException {   
        	               CallableStatement cs = con.prepareCall(sql, ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);   
        	               cs.registerOutParameter(1, returnType);// 注册输出参数的类型   
        	               return setParameters(params, cs,1);   
        	            }   
        	         }, new CallableStatementCallback() {   
        	            public Object doInCallableStatement(CallableStatement cs) throws SQLException,DataAccessException {   
        	               cs.execute();
        	               Object obj = cs.getObject(1);//
        	               return obj;   
        	            }   
        	      });   
    		return result;
        }
    	/***
    	 * 
    	 * @desc  执行存储过程(返回list)
    	 * @author yujuan
    	 * @param procedureName
    	 * @param params
    	 * @param jdbcTemplate
    	 * @return
    	 */
    	@SuppressWarnings({ "unchecked", "rawtypes" })
        public static List<Map<String,Object>> execProcedureByList(JdbcTemplate jdbcTemplate,String procedureName,final Object[]params){
    		StringBuffer sqlbuffer = new StringBuffer();
            if (params == null) {
                sqlbuffer.append("{?=call ");
                sqlbuffer.append(procedureName);
                sqlbuffer.append("()}");
            } else {
                sqlbuffer.append("{?=call ");
                sqlbuffer.append(procedureName);
                sqlbuffer.append("(");
                for (int i = 0; i < params.length; i++) {
                    sqlbuffer.append("?,");
                }
                if (params.length > 0) {
                    sqlbuffer.delete(sqlbuffer.length() - 1, sqlbuffer.length());
                }
                sqlbuffer.append(")}");
            }
            final String sql = sqlbuffer.toString();
    		
    		List<Map<String,Object>> resultList = (List<Map<String,Object>>) jdbcTemplate.execute(   
        	         new CallableStatementCreator() {   
        	            public CallableStatement createCallableStatement(Connection con) throws SQLException {   
        	               CallableStatement cs = con.prepareCall(sql, ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);   
        	               cs.registerOutParameter(1, OracleTypes.CURSOR);// 注册输出参数的类型   
        	               return setParameters(params, cs,1);   
        	            }   
        	         }, new CallableStatementCallback() {   
        	            public Object doInCallableStatement(CallableStatement cs) throws SQLException,DataAccessException {   
        	               cs.execute();
        	               ResultSet rs = (ResultSet) cs.getObject(1);// 获取游标一行的值   
        	               List<Map<String,Object>> resultsMap = ConvertResultSetToList(rs);   
        	               rs.close();
        	               return resultsMap;   
        	            }   
        	      });   
    		return resultList;
        }
    
    	/***
    	 * 设置存储过程参数
    	 * @param params
    	 * @param cs
    	 * @param step
    	 * @return
    	 * @throws SQLException
    	 */
    	@SuppressWarnings("rawtypes")
    	private static CallableStatement setParameters(Object[] params,CallableStatement cs,int step) throws SQLException {
    		if (params != null) {
    			for (int i = 1, j = 0; j < params.length && i <= params.length; i++, j++) {
    				if (params[j] == null) {
    					cs.setObject(i + step, null);
    					continue;
    				}
    				Class parameterTypeClass = params[j].getClass();
    				String parameterTypeName = parameterTypeClass.getName();
    				if (parameterTypeClass == java.lang.Integer.class) {
    					cs.setInt(i + step, ((Integer) params[j]).intValue());
    				} else if (parameterTypeClass == java.lang.Float.class) {
    					cs.setFloat(i + step, ((Float) params[j]).floatValue());
    				} else if (parameterTypeClass == java.lang.String.class) {
    					String tmpvalue = "";
    					if (params[j] != null) {
    						tmpvalue = StrUtil.replaceString(params[j].toString(), "'", """);
    					}
    					cs.setString(i + step, tmpvalue);
    				} else if (parameterTypeName.equals("java.sql.Timestamp")) {
    					cs.setTimestamp(i + step, (java.sql.Timestamp) params[j]);
    				} else if (parameterTypeName.equals("java.sql.Date")) {
    					cs.setDate(i + step, (java.sql.Date) params[j]);
    				}
    			}
    		}
    		return cs;
    	}
    	/***
    	 * rs转换list
    	 * @desc
    	 * @author yujuan
    	 * @param rs
    	 * @return
    	 * @throws SQLException
    	 */
    	private static List<Map<String,Object>> ConvertResultSetToList(ResultSet rs) throws SQLException {
            ResultSetMetaData rsmd = null;
            List<Map<String,Object>> rows = new ArrayList<Map<String,Object>>();
            if (rs != null) {
                rsmd = rs.getMetaData();
                // rs.beforeFirst();
                while (rs.next()) {
                	Map<String,Object> map=new Hashtable<String, Object>();
                    for (int i = 0; i < rsmd.getColumnCount(); i++) {
                        String columnName = rsmd.getColumnName(i + 1).toLowerCase();
                        switch (rsmd.getColumnType(i + 1)) {
                        case Types.NUMERIC:
                            if (rs.getString(columnName) == null)
                            	map.put(columnName, "0");
                            else
                            	map.put(columnName, rs.getString(columnName));
                            break;
                        case Types.VARCHAR:  
                        	map.put(columnName, rs.getString(columnName) == null ? "" : rs.getString(columnName));
                            break;
                        case Types.INTEGER:
                        	map.put(columnName,  rs.getString(columnName) == null ? "" : rs.getString(columnName));
                            break;
                        case Types.DATE:
                            {
                                java.sql.Date date = rs.getDate(columnName);
                                if (date == null){
                                	map.put(columnName, "");
                                }else{
                                	map.put(columnName, rs.getDate(columnName));
                                }
                                break;
                            }
                        case Types.TIMESTAMP:
                            {
                                java.sql.Timestamp timestamp =  rs.getTimestamp(columnName);
                                if (timestamp == null){
                                	map.put(columnName, "");
                                }else{
                                	map.put(columnName, rs.getTimestamp(columnName));
                                }
                                break;
                            }
                        case Types.BLOB:
                            {
                                Blob blobdata = rs.getBlob(columnName);
                                if (blobdata == null){
                                	map.put(columnName, "");
                                }else{
                                	map.put(columnName, blobdata);
                                }
                                break;
                            }
                            case Types.CLOB:
                                {
                                    Clob blobdata = rs.getClob(columnName);
                                    String text=null;
                                    try{
                                        text=getStringFromClob(blobdata);
                                    }catch(Exception e){
                                       e.printStackTrace();
                                    }
                                    if (blobdata == null){
                                    	map.put(columnName, "");
                                    }else{
                                    	map.put(columnName, text);
                                    }
                                    	
                                    break;
                                }
                            case Types.LONGVARCHAR:
                                {
                                    java.io.Reader long_out = rs.getCharacterStream(columnName);
                                    if (long_out != null)
                                    {
                                        char[] long_buf=new char[8192];
                                        StringBuffer buffer=new StringBuffer();                                    
                                        int len=0;
                                        try {
                                            while((len = long_out.read(long_buf))>0){
                                                buffer.append(long_buf,0,len);
                                            }                                        
                                            map.put(columnName,buffer.toString());
                                            buffer=null;
                                        } catch (IOException e) {
                                            // TODO
                                        }finally {
                                        	try{
                                        		long_out.close();                                    		
                                        	}catch(Exception e){
                                        		e.printStackTrace();
                                        	}
                                            long_buf=null;
                                        }
                                    }                            
                                    break;
                                }
                        default:
                            {
                            	map.put(columnName,  rs.getString(columnName) == null ? "" : rs.getString(columnName));
                                break;
                            }
                        }
                    }
                    rows.add(map);
                }
            }
            return rows;
        }
        private static String getStringFromClob(Clob clob)throws Exception{
            String  result= "";
            java.io.Reader in=null;
            try {
              in = clob.getCharacterStream();
              if (in == null) return null;
              StringBuffer sb = new StringBuffer(4096);
              int i = in.read();
              while (i != -1) {
                  sb.append((char) i);
                  i = in.read();
              }
              in.close();
              result=sb.toString();
            } catch (Exception e) {
                e.printStackTrace();
            }finally{
                if(in!=null){
                        in.close();
                }
            }
             return result;
          }
        
        /***
         * 
         * @desc 获取查询参数
         * @author yujuan
         * @param ids
         * @param paramname
         * @param param
         * @return
         */
        public static Map<String,Object> getQueryParamByIds(String ids,String paramname){
        	List<Object> paramlist=new ArrayList<Object>();
        	Map<String,Object> resultmap=new Hashtable<String, Object>();
        	StringBuffer paramsql=new StringBuffer();
        	String []idsarr=ids.split(",");
        	for (int i = 0; i < idsarr.length; i++) {
    			if(i==0&&idsarr.length==1){
    				paramsql.append(" and ").append(paramname).append("=?");
    			}else if(i==0){
    				paramsql.append(" and (").append(paramname).append("=?");
    			}else if(i<idsarr.length-1){
    				paramsql.append(" or ").append(paramname).append("=?");
    			}else{
    				paramsql.append(" or ").append(paramname).append("=?)");
    			}
    			paramlist.add(idsarr[i]);
    		}
        	resultmap.put("PARAM_SQL", paramsql.toString());
        	resultmap.put("PARAM_List", paramlist);
        	return resultmap;
        }
    }
    
  • 相关阅读:
    【转】ListView,GridView之LayoutAnimation特殊动画的实现 ps:需要学习的是在getView中添加动画的思想
    自定义Dialog
    android 横向list特效——规格滑动
    android BaseAdapter优化
    自定义弧形进度条
    滑块闹钟界面
    HTML学习10
    HTML学习9
    HTML学习8
    HTML学习7
  • 原文地址:https://www.cnblogs.com/jakaBlog/p/10804703.html
Copyright © 2020-2023  润新知