有客户通过润乾报表连接mysql数据库,数据集语法使用了别名(例如select id as testid from test),但是在报表中无法通过别名获取值。
通过jdbc直连测试各版本jdbc驱动测试,程序如下,
<%
try
{
String driverName="com.mysql.jdbc.Driver";
String userName="root";
String userPasswd="";
String dbName="test";
String tableName="user";
String url="jdbc:mysql://localhost:3306/"+dbName+"?user="+userName+"&password="+userPasswd;
Class.forName("com.mysql.jdbc.Driver").newInstance();
Connection conn=DriverManager.getConnection(url);
String sql="select id as testid from num";
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery(sql);
ResultSetMetaData rsmd = rs.getMetaData();
String colname= rsmd.getColumnName(1) ;
String colname1= rsmd.getColumnLabel(1) ;
System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaa="+colname);
System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaa="+colname1);
while(rs.next())
{
%>
<tr>
<td><%=rs.getInt("testid")%></td>
</tr>
<%
}
rs.close();
stmt.close();
conn.close();
}
catch(Exception e)
{
e.printStackTrace();
}
%>,
发现使用jdbc5.1.x系列驱动getColumnName获取的不是别名。
使用润乾报表连接mysql数据库时如果用到别名,可以通过使用5.0.x系列及以下驱动解决不能获取别名的问题。
附jdbc驱动与Mysql版本对应关系:
Connector/J 5.1 支持Mysql 4.1、Mysql 5.0、Mysql 5.1、Mysql 6.0 alpha这些版本。
Connector/J 5.0 支持MySQL 4.1、MySQL 5.0 servers、distributed transaction (XA)。
Connector/J 3.1 支持MySQL 4.1、MySQL 5.0 servers、MySQL 5.0 except distributed transaction (XA) support。
Connector/J 3.0 支持MySQL 3.x or MySQL 4.1。