我想调用JasperFillManager.fillReport(filePath +“。jasper”,param,con); param应该接受类型Map。有没有解决方案
答案 0 :(得分:2)
只需使用另一个地图作为参数的构造函数:
Map<String, Object> map2 = new HashMap<String, Object>(map);
见这个例子:
import java.util.HashMap;
import java.util.Map;
public class Test5 {
public static void main(String[] args) {
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("1", 1);
Map<String, Object> map2 = new HashMap<String, Object>(map);
// etc...
}
}
答案 1 :(得分:1)
如果您有HashMap<String,Integer>
,并且需要将其转换为HashMap<String,Object>
,那么以下内容应该有效:
HashMap<String, Object> objParams = new HashMap<String, Object>();
for (String key : intParams.keyValues()) {
Integer intValue = intParams.get(key);
objParams.put(key, intValue);
}
intParams
是HashMap<String,Integer>
。
在那里可能会有一些拼写错误,因为这纯粹是在袖口之外。
然后您可以将objParams
传递给fillReport
。
答案 2 :(得分:0)
如果未在HashMap中指定值类型,Java会隐式为其指定一种对象。 在这种情况下,您只需要将原始地图声明为
HashMap objParams = new HashMap();
答案 3 :(得分:0)
您的.java文件
String url="jdbc:mysql://127.0.0.1:3306/database";
String username="root";
String password="";
String database="database";
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection con = DriverManager.getConnection(url, username, password);
JasperReport jc=JasperCompileManager.compileReport("F:\\pro\\report.jrxml"); //give your report.jrxml file path
//create hashmap to send data to report.key should same to report parameter
HashMap para = new HashMap();
para .put("name", "chamod");
para .put("email", "chamodck@gmail.com");
JasperPrint print = JasperFillManager.fillReport(jc,para,new JREmptyDataSource());
JasperViewer.viewReport(print);
con.close();
您的report.jrxml文件文本字段应该是这样的
<textFieldExpression class="java.lang.String"><![CDATA[$P{name}]]></textFieldExpression>
<textFieldExpression class="java.lang.String"><![CDATA[$P{email}]]></textFieldExpression>