jdbc中的getColumnCount奇怪问题 sql语句大概是这样:select *,a,b from table。用MetaData.getColumnCount()获取rs的字段个数居然是3。好奇怪,不应该是table的字段个数+2吗? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 此回复为自动发出,仅用于显示而已,并无任何其他特殊作用楼主【woodfans】截止到2008-07-11 13:55:09的历史汇总数据(不包括此帖):发帖的总数量:14 发帖的总分数:660 每贴平均分数:47 回帖的总数量:20 得分贴总数量:4 回帖的得分率:20% 结贴的总数量:10 结贴的总分数:440 无满意结贴数:4 无满意结贴分:320 未结的帖子数:4 未结的总分数:220 结贴的百分比:71.43 % 结分的百分比:66.67 % 无满意结贴率:40.00 % 无满意结分率:72.73 % 楼主加油 普通的table,字段大概有十来个吧 不会吧,楼主用个简单的代码来看看。 // 驱动是jdbc for mssql server 2005的 public static void doTest(){ Connection conn = null; PreparedStatement pstmt = null; ResultSet rst = null; ResultSetMetaData rstMetaData = null; try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); conn = DriverManager.getConnection( "jdbc:sqlserver://localhost:1433;DatabaseName=test", "username", "password"); pstmt = conn.prepareStatement("SELECT *,col1,col2 FROM tableName"); rst = pstmt.executeQuery(); rstMetaData = rst.getMetaData(); // 打印列名来看看 for(int i=1;i<=rstMetaData.getColumnCount();i++){ System.out.println(rstMetaData.getColumnName(i)); } } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } finally{ if (rst != null){ try { rst.close(); } catch (SQLException e) { e.printStackTrace(); } } if (pstmt != null){ try { pstmt.close(); } catch (SQLException e) { e.printStackTrace(); } } if (conn != null){ try { conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } 这事打印出来的日志记录:****执行sql语句**** SELECT query.*,0 AS SENDTYPE ,pdate,CONVERT(varchar, pdate, 120) AS CREATE_DATE FROM QUERY WHERE taskassignoper ='201' and status='未接受' and pdate>=(select dateadd(m,-1,getdate())) order by pdate desc****查询结果集字段个数**** 4****查询结果集记录数**** 2ResultList = {id=748, customerid=847, oper=6001, orderid=CX20080707-00000006}ResultList = {id=747, customerid=844, oper=6001, orderid=CX20080707-00000005} 很奇怪的现象,假如我把sql换成seleect * from table这样取得的字段个数是没错的 SELECT *,col1,col2 FROM tableName 为什么要这样写啊SELECT * FROM tableName 不就可以了 等答案同问题欢迎来我们的java世界ourjavasky 针对层次不同量身学习java技术http://www.ourjavasky.cn 是这样的。我需要对字段a,b做点小处理,譬如说日期的截取,但是我又不想在sql里写那么多字段。所有就这样写了 SELECT query.*,0 AS SENDTYPE ,pdate,CONVERT(varchar, pdate, 120) AS CREATE_DATE FROM QUERY 你的query表有几个字段?只有1个pdate吧,如果是1个字段,结果就是对的。 简单来说他把你那*当作一个字段而不是所有字段用MetaData.getColumnCount()获取rs的字段个数居然是3你看你查的是放在rs里面的元素个数,rs里面就是3个了 * a b 你如果想把*里面的字段分开计算的话,改查你那rs的返回类型(一般都是list吧)的集合个数好了 完整的 SQL 语句什么样?再有楼主什么数据库? ****执行sql语句**** SELECT query.*,0 AS SENDTYPE ,pdate,CONVERT(varchar, pdate, 120) AS CREATE_DATE FROM QUERY WHERE taskassignoper ='201' and status='未接受' and pdate>=(select dateadd(m,-1,getdate())) order by pdate desc ****查询结果集字段个数**** 4 ****查询结果集记录数**** 2 ResultList = {id=748, customerid=847, oper=6001, orderid=CX20080707-00000006} ResultList = {id=747, customerid=844, oper=6001, orderid=CX20080707-00000005}用的是sqlserver 2000 问题解决了,我把prepareStatement方法的第3个参数,也就是ResultSet的并发参数改成:CONCUR_READ_ONLY就正常了。原先是:CONCUR_UPDATABLE。不过还是没明白这个问题是怎么产生的,有没有人来解释下 window.open(path),path中含有中文,乱码问题 高手帮忙! 关于找不到java main class Integer.toHexString(int param)转化,当高位为0时就不显示了 Java正则问题 Dialog弹出多层窗口,紧急求助!! 关于EL的简单问题 怪异的struts国际化问题 JSP连接数据库,TOMCAT为什么会死掉? 各们大师请教 有没有人用jsp写过MIS系统? eclipse在debug时 有上角的变量内容察看器,是怎么做的 请问.net下如何使用java用的dll?
楼主【woodfans】截止到2008-07-11 13:55:09的历史汇总数据(不包括此帖):
发帖的总数量:14 发帖的总分数:660 每贴平均分数:47
回帖的总数量:20 得分贴总数量:4 回帖的得分率:20%
结贴的总数量:10 结贴的总分数:440
无满意结贴数:4 无满意结贴分:320
未结的帖子数:4 未结的总分数:220
结贴的百分比:71.43 % 结分的百分比:66.67 %
无满意结贴率:40.00 % 无满意结分率:72.73 %
楼主加油
// 驱动是jdbc for mssql server 2005的
public static void doTest(){
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rst = null;
ResultSetMetaData rstMetaData = null;
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
conn = DriverManager.getConnection(
"jdbc:sqlserver://localhost:1433;DatabaseName=test", "username",
"password");
pstmt = conn.prepareStatement("SELECT *,col1,col2 FROM tableName");
rst = pstmt.executeQuery();
rstMetaData = rst.getMetaData();
// 打印列名来看看
for(int i=1;i<=rstMetaData.getColumnCount();i++){
System.out.println(rstMetaData.getColumnName(i));
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally{
if (rst != null){
try {
rst.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (pstmt != null){
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
****执行sql语句**** SELECT query.*,0 AS SENDTYPE ,pdate,CONVERT(varchar, pdate, 120) AS CREATE_DATE FROM QUERY WHERE taskassignoper ='201' and status='未接受' and pdate>=(select dateadd(m,-1,getdate())) order by pdate desc
****查询结果集字段个数**** 4
****查询结果集记录数**** 2
ResultList = {id=748, customerid=847, oper=6001, orderid=CX20080707-00000006}
ResultList = {id=747, customerid=844, oper=6001, orderid=CX20080707-00000005}
欢迎来
我们的java世界ourjavasky 针对层次不同量身学习java技术
http://www.ourjavasky.cn
你的query表有几个字段?只有1个pdate吧,如果是1个字段,结果就是对的。
他把你那*当作一个字段
而不是所有字段
用MetaData.getColumnCount()获取rs的字段个数居然是3
你看你查的是放在rs里面的元素个数,rs里面就是3个了 * a b
你如果想把*里面的字段分开计算的话,改查你那rs的返回类型(一般都是list吧)的集合个数好了
****执行sql语句**** SELECT query.*,0 AS SENDTYPE ,pdate,CONVERT(varchar, pdate, 120) AS CREATE_DATE FROM QUERY WHERE taskassignoper ='201' and status='未接受' and pdate>=(select dateadd(m,-1,getdate())) order by pdate desc
****查询结果集字段个数**** 4
****查询结果集记录数**** 2
ResultList = {id=748, customerid=847, oper=6001, orderid=CX20080707-00000006}
ResultList = {id=747, customerid=844, oper=6001, orderid=CX20080707-00000005}
用的是sqlserver 2000