在线报名
报名热线:400-0919-097
在线客服
新闻中心
当前位置:学码思 > 新闻中心 >
使用 JdbcTemplate 动态创建表并添加数据 动态连表查询
编辑:白玉   浏览时间:2025-02-14 14:07

前方仍旧道了1个动静的凭据以后时期创立表战拔出数据的示例,那末怎样停止动静的查问呢?

尔写了如许1个大众办法,仅供参照!

那里须要传送二个期间隔断参数,凭据时刻隔断判定出入的月数,而后从肇端岁月最先递加月份,而后动静组装表的称呼,假使保存该表则符号须要查问

全部的SQL经由过程 union all 去毗连,末了扩充分页的参数,分页只适应MySQL数据库

固然那个示例也不过符合于按月份去保存的环境

代码其实不是很庞杂,盼望年夜家依旧经由过程代码去贯通1停:

packagecom;importjava.sql.Connection;importjava.sql.DatabaseMetaData;importjava.sql.ResultSet;importjava.text.SimpleDateFormat;importjava.util.ArrayList;importjava.util.Calendar;importjava.util.Date;importjava.util.GregorianCalendar;importjava.util.List;importorg.springframework.context.ApplicationContext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importorg.springframework.jdbc.core.JdbcTemplate;/***@讲明停止尝试*@authorcuisuqiang*@version1.0*@since*/publicclassDbTest{privatestaticApplicationContextcontext=null;@SuppressWarnings("unchecked")publicstaticvoidmain(String[]args){context=newClassPathXmlApplicationContext("applicationContext.xml");Stringsql="select*from:TABLE_NAME";Stringkey="nm_cpu_log";StringbeginTime="2012-1-112:12:12";StringendTime="2014-12-112:12:12";Stringformatkey="yyyy_MM";Listlist=getListFromEachTable(sql,key,beginTime,endTime,formatkey,1,100);if(null!=list){System.out.println(list.size());}else{System.out.println("不数据!");}}/***动静盘问表数据*@paramsqlTemplate要施行的单条SQL个中表称呼用:TABLE_NAME标志*@paramtableKey表前缀,没有包括战工夫中央的停划线*@paramdateBegin最先韶华yyyy-MM-ddHH:mm:ss*@paramdateEnd停止工夫yyyy-MM-ddHH:mm:ss*@paramdateFormat时辰花样化体例*@parampageIndex分页索引从1最先*@parampageCount每页看望数目无穷造*@return模版查问曲交前往*/@SuppressWarnings("unchecked")publicsynchronizedstaticListgetListFromEachTable(StringsqlTemplate,StringtableKey,StringdateBegin,StringdateEnd,StringdateFormat,intpageIndex,intpageCount){Listlist=null;try{//1公有几许须要施行的SQLList<String>sqlList=newArrayList<String>();JdbcTemplatejt=(JdbcTemplate)context.getBean("jdbcTemplate");//转为功夫Datedbegin=StringToDateTime(dateBegin);Datedend=StringToDateTime(dateEnd);//出入的月数intmonthCount=calculateMonthIn(dend,dbegin);for(inti=0;i<=monthCount;i++){//停N个月的韶华Dated=getNextMonth(dbegin,i);SimpleDateFormatformat=newSimpleDateFormat(dateFormat);//动静表实StringtableName=tableKey+"_"+format.format(d);//假设有某表if(getAllTableName(jt,tableName)){System.out.println("生活表:"+tableName);//调换称呼得到SQLStringsql=sqlTemplate.replace(":TABLE_NAME",tableName);sqlList.add(sql);}}//本质要施行的SQLStringBuffersqlGo=newStringBuffer("");if(sqlList.size()>0){for(inti=0;i<sqlList.size();i++){if(i==sqlList.size()-1){sqlGo.append(sqlList.get(i));}else{sqlGo.append(sqlList.get(i)+"unionall");}}}if(sqlList.size()>0){//填充分页intcindex=(pageIndex-1)*pageCount;sqlGo.append("limit"+cindex+","+pageCount);}if(!"".equals(sqlGo.toString())){System.out.println("施行的SQL:"+sqlGo.toString());//施行看望list=jt.queryForList(sqlGo.toString());}}catch(Exceptione){e.printStackTrace();list=null;}returnlist;}/***将传进的字符串按yyyy-MM-ddHH:mm:ss花样更改成对于应的日期对于象*@paramstr须要改造的字符串*/publicsynchronizedstaticDateStringToDateTime(Stringstr){String_pattern="yyyy-MM-ddHH:mm:ss";returnStringToDate(str,_pattern);}/***将拔出的字符串按花样转变成对于应的日期对于象*@paramstr字符串*@parampattern花样*/publicsynchronizedstaticDateStringToDate(Stringstr,Stringpattern){DatedateTime=null;try{if(str!=null&&!str.equals("")){SimpleDateFormatformater=newSimpleDateFormat(pattern);dateTime=formater.parse(str);}}catch(Exceptionex){ex.printStackTrace();}returndateTime;}/***二个功夫出入的月数*@paramdate1*@paramdate2*@return*/publicstaticintcalculateMonthIn(Datedate1,Datedate2){Calendarcal1=newGregorianCalendar();cal1.setTime(date1);Calendarcal2=newGregorianCalendar();cal2.setTime(date2);intc=(cal1.get(Calendar.YEAR)-cal2.get(Calendar.YEAR))*12+cal1.get(Calendar.MONTH)-cal2.get(Calendar.MONTH);returnc;}/***得到停几个月的功夫对于象*@paramdate*@paramcount*@return*/publicstaticDategetNextMonth(Datedate,intcount){Calendarc=Calendar.getInstance();c.setTime(date);c.add(Calendar.MONTH,count);returnc.getTime();}/***查问数据库能否有某表*@paramjt*@paramtableName*@return*@throwsException*/@SuppressWarnings("unchecked")publicstaticbooleangetAllTableName(JdbcTemplatejt,StringtableName)throwsException{Connectionconn=jt.getDataSource().getConnection();ResultSettabs=null;try{DatabaseMetaDatadbMetaData=conn.getMetaData();String[]types={"TABLE"};tabs=dbMetaData.getTables(null,null,tableName,types);if(tabs.next()){returntrue;}}catch(Exceptione){e.printStackTrace();}finally{tabs.close();conn.close();}returnfalse;}}

代码仅供参照,注重本质运用。

注重那是1个系列的著作,注重先后几篇作品。

推举您浏览更多相关于“ jdbc动静JdbcTemplate动静盘问数据 ”的作品

地址:南京市科巷10号楼(邮政储蓄银行西北侧80米)  电话:400-080-3312

Copyright © 2024-2026  学码思推广专用站   http://www.xuems.net  .All Rights Reserved   网站地图  苏ICP备16033487号-3

分享到: