代码是连在一起的么?建议你把变量定义成全局的,不要放在while循环里面,如下:
String bookid = “”;
while(resnext()){
bookid=resgetString(1);
}
而且Connection 第一次已经取了,也可以这样定义了之后直接在下面进行使用,没必要再写一遍
一) 其实这个功能在spring2x时代就提供了。一直没用过,今天在spring-mvc32x的环境下试验了一次。还算简单易用。
二) 依赖。
spring依赖POI或jExcel来实现对excel输出的支持,前者是apache出品,貌似名气更大,本例使用第一个。
<dependency>
<groupId>orgapachepoi</groupId>
<artifactId>poi</artifactId>
<version>37</version>
</dependency>
三) spring提供了一个AbstractExcelView作为自己实现的视图的父类。实例代码如下。
package yingcarview;
import javatextDateFormat;
import javatextSimpleDateFormat;
import javautilList;
import javautilMap;
import javaxservlet>
import javaxservlet>
import orgapachepoihssfusermodelHSSFDataFormat;
import orgapachepoihssfusermodelHSSFSheet;
import orgapachepoihssfusermodelHSSFWorkbook;
import orgapachepoissusermodelCell;
import orgapachepoissusermodelCellStyle;
import orgapachepoissusermodelIndexedColors;
import orgjodatimeDateTime;
import orgslf4jLogger;
import orgslf4jLoggerFactory;
import orgspringframeworkwebservletviewdocumentAbstractExcelView;
import yingcarbindingDateRange;
import yingcardomainRefuelingRecord;
public class RefuelingRecordExcelView extends AbstractExcelView {
private static final Logger LOGGER = LoggerFactorygetLogger(RefuelingRecordExcelViewclass);
private static final DateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd");
@Override
@SuppressWarnings({"unchecked"})
protected void buildExcelDocument(
Map<String, Object> model, // MVC中的M就在这里了
HSSFWorkbook workbook,
>
>
{
("yyyy/MM/dd"));
LOGGERdebug("end: {}", new DateTime(drgetEnd())toString("yyyy/MM/dd"));
}
}
HSSFSheet sheet = workbookcreateSheet(DATE_FORMATformat(drgetStart()) + "-" + DATE_FORMATformat(drgetEnd()));
setColumnsWidth(sheet);
fillTableHeader(workbook, sheet);
fillTableBody(workbook, sheet, rrl);
}
private void setColumnsWidth(HSSFSheet sheet) {
final int[] warr = new int[] {
500, // <空>
4500, // 日期
4500, // 车辆
4500, // 燃油种类
4500, // 燃油单价
4500, // 加油方式
4500, // 加油量
3000, // 花费
12000 // 备注
};
for (int i = 0; i < warrlength; i ++) {
sheetsetColumnWidth(i, warr[i]);
}
}
// 填充表格头
private void fillTableHeader(HSSFWorkbook workbook, HSSFSheet sheet) {
final String[] contents = new String[] {
"日期",
"车辆",
"燃油种类",
"燃油单价(元/升)",
"加油方式",
"加油量(升)",
"花费(元)",
"备注"
};
int r = 1;
int c = 1;
CellStyle style = workbookcreateCellStyle();
stylesetFillForegroundColor(IndexedColorsYELLOWgetIndex()); // 填充**
stylesetFillPattern(CellStyleSOLID_FOREGROUND); // 填充方式
// 设置border
stylesetBorderLeft(CellStyleBORDER_THIN);
stylesetBorderRight(CellStyleBORDER_THIN);
stylesetBorderTop(CellStyleBORDER_THIN);
stylesetBorderBottom(CellStyleBORDER_THIN);
for (int i = 0; i < contentslength; i ++) {
Cell cell = getCell(sheet, r, c + i);
cellsetCellValue(contents[i]);
cellsetCellStyle(style);
}
}
private void fillTableBody(HSSFWorkbook workbook, HSSFSheet sheet, List<RefuelingRecord> records) {
// 通用style
CellStyle style = workbookcreateCellStyle();
stylesetFillForegroundColor(IndexedColorsWHITEgetIndex()); // 填充白色
stylesetFillPattern(CellStyleSOLID_FOREGROUND); // 填充方式
stylesetBorderLeft(CellStyleBORDER_THIN);
stylesetBorderRight(CellStyleBORDER_THIN);
stylesetBorderTop(CellStyleBORDER_THIN);
stylesetBorderBottom(CellStyleBORDER_THIN);
// 日期style
CellStyle dateStyle = workbookcreateCellStyle();
dateStylesetFillForegroundColor(IndexedColorsWHITEgetIndex()); // 填充白色
dateStylesetFillPattern(CellStyleSOLID_FOREGROUND); // 填充方式
dateStylesetBorderLeft(CellStyleBORDER_THIN);
dateStylesetBorderRight(CellStyleBORDER_THIN);
dateStylesetBorderTop(CellStyleBORDER_THIN);
dateStylesetBorderBottom(CellStyleBORDER_THIN);
dateStylesetDataFormat(HSSFDataFormatgetBuiltinFormat("m/d/yy"));
int r = 2;
int c = 1;
Cell cell = null;
for (int i = 0; i < recordssize(); i ++) {
RefuelingRecord rr = recordsget(i);
// 日期
cell = getCell(sheet, r, c + 0);
if (rrgetDate() != null)
cellsetCellValue(rrgetDate());
cellsetCellStyle(dateStyle);
// 车辆
cell = getCell(sheet, r, c + 1);
if (rrgetVehicle()getNickname() != null)
cellsetCellValue(rrgetVehicle()getNickname());
cellsetCellStyle(style);
// 燃油种类
cell = getCell(sheet, r, c + 2);
if (rrgetGasType() != null) {
String s = null;
switch (rrgetGasType()) {
case _0: s = "0号柴油"; break;
case _93: s = "93号汽油"; break;
case _97: s = "97号汽油"; break;
case _98: s = "98号汽油"; break;
}
cellsetCellValue(s);
}
cellsetCellStyle(style);
// 单价
cell = getCell(sheet, r, c + 3);
if (rrgetPriceOfGas() != null)
cellsetCellValue(rrgetPriceOfGas());
cellsetCellStyle(style);
// 加油方式
cell = getCell(sheet, r, c + 4);
if (rrgetRefuelingType() != null) {
String s = null;
switch (rrgetRefuelingType()) {
case FIXED_CUBAGE:
s = "固定容积"; break;
case FIXED_MONEY:
s = "固定金额"; break;
case FULL:
s = "加满"; break;
}
cellsetCellValue(s);
}
cellsetCellStyle(style);
// 加油量
cell = getCell(sheet, r, c + 5);
if (rrgetCubageOfGas() != null)
cellsetCellValue(rrgetCubageOfGas());
cellsetCellStyle(style);
// 花费
cell = getCell(sheet, r, c + 6);
if (rrgetSumOfMoney() != null)
cellsetCellValue(rrgetSumOfMoney());
cellsetCellStyle(style);
// 备注
cell = getCell(sheet, r, c + 7);
if (rrgetComment() != null)
cellsetCellValue(rrgetComment());
cellsetCellStyle(style);
r ++;
}
}
}
cellsetCellStyle(style);
// 燃油种类
cell = getCell(sheet, r, c + 2);
if (rrgetGasType() != null) {
String s = null;
switch (rrgetGasType()) {
case _0: s = "0号柴油"; break;
case _93: s = "93号汽油"; break;
case _97: s = "97号汽油"; break;
case _98: s = "98号汽油"; break;
}
cellsetCellValue(s);
}
cellsetCellStyle(style);
// 单价
cell = getCell(sheet, r, c + 3);
if (rrgetPriceOfGas() != null)
cellsetCellValue(rrgetPriceOfGas());
cellsetCellStyle(style);
// 加油方式
cell = getCell(sheet, r, c + 4);
if (rrgetRefuelingType() != null) {
String s = null;
switch (rrgetRefuelingType()) {
case FIXED_CUBAGE:
s = "固定容积"; break;
case FIXED_MONEY:
s = "固定金额"; break;
case FULL:
s = "加满"; break;
}
cellsetCellValue(s);
}
cellsetCellStyle(style);
// 加油量
cell = getCell(sheet, r, c + 5);
if (rrgetCubageOfGas() != null)
cellsetCellValue(rrgetCubageOfGas());
cellsetCellStyle(style);
// 花费
cell = getCell(sheet, r, c + 6);
if (rrgetSumOfMoney() != null)
cellsetCellValue(rrgetSumOfMoney());
cellsetCellStyle(style);
// 备注
cell = getCell(sheet, r, c + 7);
if (rrgetComment() != null)
cellsetCellValue(rrgetComment());
cellsetCellStyle(style);
r ++;
}
}
}
四) Controller中返回逻辑视图名 (代码片段)
Java代码
@RequiresUser // 安全框架用元注释
@RequiresRoles({"ROLE_USER"})
@RequestMapping(value = "/list/excel", method = RequestMethodGET)
public String listByExcel(
@DateRangeFormat(pattern = "yyyy-MM-dd") @RequestParam("dateRange") DateRange dateRange,
ModelMap modelMap
)
{
}
// 放入model
modelMapput("dateRange", dateRange);
modelMapput("refuelingRecordList", gasServicefindRefuelingRecordByDateRange(currentUserId, dateRange));
return "refueling-record-list"; // 最终返回逻辑视图名
}
五) 为spring-mvc配置多个视图解析器。
<bean class="orgspringframeworkwebservletviewXmlViewResolver">
<property name="order" value="1" /> <!-- order很重要 -->
<property name="location" value="classpath:/META-INF/viewsxml" />
</bean>
<bean class="orgspringframeworkwebservletviewInternalResourceViewResolver">
<property name="order" value="9999" />
<property name="viewClass" value="orgspringframeworkwebservletviewJstlView" />
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value="jsp"/>
六) 效果图
之前做的一个项目有这么个要求,在日志管理系统里,需要将某些日志信息存储到数据库里,供用户、管理员查看分析。因此我就花了点时间搞了一下这一功能,各位请看。
摘要:我们知道log4j能提供强大的可配置的记日志功能,有写文件的、打印到控制台的等等,但有时我们需要它把日志输出到后台数据库中,log4j的强大的可扩展性支持了这一点,以下就是具体的实现。
关键词:log,log4j,日志,Java,DB,数据库,slf4j
前提:已经配置好slf4j、log4j,能正常的往文件或控制台写日志。
需求:将日志写入到数据库中。
说明:使用log4j-1217jar,slf4j-api-175jar,slf4j-log4j12-166jar。
首先,你的确定数据的主键是否可以使用序列自增。
如果可以那么你可以在插入数据的时候获取序列里的值,这样数据就不会重复了。
其次,可以创建一个公共方法,进行数据的插入 *** 作,并且方法类型声明为 static synchronized
类型,这样基本上就不会出现数据重复的现象了
最后,要看你是怎么获得待插入源数据了,这个获得数据源的方法也做成static synchronized的公
共方法。
1:SSM框架搭建环境
Spring、SpringMVC、mybatis添加上我们需要的jar包
2:编写数据库sql,创建表
创建数据库表了
3:连接数据库
dataSourcedriverClass=commysqljdbcDriver
dataSourcejdbcUrl=jdbc:mysql://127001:3306/works
dataSourceuser=root
dataSourcepassword=195631
dataSourcemaxPoolSize=20
dataSourcemaxIdleTime=1000
dataSourceminPoolSize=6
dataSourceinitialPoolSize=5
4:写java代码,分层
控制层、业务层、数据库层、数据层
5: 写jsp页面
6:Spring的配置文件
<!-- mybatis:scan会将orgfkitmapper包里的所有接口当作mapper配置,之后可以自动引入mapper类-->
<mybatis:scan base-package="comcyMapper" />
<!-- 扫描comwyq包下面的java文件,有Spring的相关注解的类,则把这些类注册为Spring的bean -->
<context:component-scan base-package="comcy" />
<!-- 使用PropertyOverrideConfigurer后处理器加载数据源参数 -->
<context:property-override location="classpath:dbproperties"/>
<!-- 配置c3p0数据源 -->
<bean id="dataSource" class="commchangev2c3p0ComboPooledDataSource"/>
<!-- 配置SqlSessionFactory,orgmybatisspringSqlSessionFactoryBean是Mybatis社区开发用于整合Spring的bean -->
<bean id="sqlSessionFactory" class="orgmybatisspringSqlSessionFactoryBean"
p:dataSource-ref="dataSource"/>
<!-- JDBC事务管理器 -->
<bean id="transactionManager"
class="orgspringframeworkjdbcdatasourceDataSourceTransactionManager"
p:dataSource-ref="dataSource"/>
<!-- 启用支持annotation注解方式事务管理 -->
<tx:annotation-driven transaction-manager="transactionManager" />
</beans>
7:springmvc的配置文件
<!-- 自动扫描该包,SpringMVC会将包下用了@controller注解的类注册为Spring的controller -->
<context:component-scan base-package="comwyqController" />
<!-- 设置默认配置方案 -->
<mvc:annotation-driven />
<!-- 使用默认的Servlet来响应静态文件比如css、html、js等文件 -->
<mvc:default-servlet-handler />
<!-- 视图解析器 -->
<bean id="viewResolver" class="orgspringframeworkwebservletviewInternalResourceViewResolver">
<!-- 前缀 -->
<property name="prefix">
<value>/WEB-INF/pages/</value>
</property>
<!-- 后缀 -->
<property name="suffix">
<value>jsp</value>
</property>
</bean>
8:webxml配置
<!-- 配置spring核心监听器,默认会以 /WEB-INF/applicationContextxml作为配置文件 -->
<listener>
<listener-class>orgspringframeworkwebcontextContextLoaderListener</listener-class>
</listener>
<!-- contextConfigLocation参数用来指定Spring的配置文件 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContextxml</param-value>
</context-param>
<!-- 定义Spring MVC的前端控制器 -->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>
orgspringframeworkwebservletDispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-configxml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 让Spring MVC的前端控制器拦截所有请求 -->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 编码过滤器 -->
<filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>orgspringframeworkwebfilterCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>
</web-app>
以上就是关于spring mvc用于从数据库一个表里获取一列数据处理后存入另一个表里方法全部的内容,包括:spring mvc用于从数据库一个表里获取一列数据处理后存入另一个表里方法、springmvc excel表格数据导入数据库怎么做、springMVC怎么使用log4j将数据写到数据库等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)