请教一个关于SQL SERVER JDBC的问题,困扰很久了 ( 积分: 50 )

  • 主题发起人 主题发起人 fanwei
  • 开始时间 开始时间
F

fanwei

Unregistered / Unconfirmed
GUEST, unregistred user!
各位,偶碰上个怪问题
偶的程序以前是通过JDBC-ODBC连接SQL SERVER的,用起来挺好。
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String dburl="jdbc:odbc:PSI";
后来要正是发布了,因效率问题改用JDBC直连。
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String dburl="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=PSI";
结果在SQL 中有用到COUNT这个函数的就会报错
原句如下:
select count(pid) as pid from table1
要是用第一种方法连就没问题,第二种的话就报下面的错
javax.servlet.ServletException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]列 'table1.id' 在选择列表中无效,因为该列未包含在聚合函数中,并且没有 GROUP BY 子句。
后来我又实验了一下发现只要是聚合函数都存在这个问题i.e count/avg/sum....
真是弄得我不理解,请问有没有朋友碰到过这个问题?
环境:SQL SERVER JDBC是安装过jdbc sp1的、SQL SERVER标准版+sp3
tomcat 5.0.28,jdk1.5_sp3,什么classpath , tomcat_home ,java_home都肯定正确,也把MS SQL SERVER JDBC里的三个JAR拷贝到应该存在的地方了(肯定正确,因为JDBC-ODBC连接是正常的,而且不涉及聚合函数的SQL 用JDBC 直连也没问题)
这死问题困扰偶好久,估计是什么地方不合适?望朋友们多指教,但是请千万别告诉偶改用ORACLE /MYSQL之类的了,不可能对DBMS下手了。
 
各位,偶碰上个怪问题
偶的程序以前是通过JDBC-ODBC连接SQL SERVER的,用起来挺好。
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
String dburl="jdbc:odbc:PSI";
后来要正是发布了,因效率问题改用JDBC直连。
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String dburl="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=PSI";
结果在SQL 中有用到COUNT这个函数的就会报错
原句如下:
select count(pid) as pid from table1
要是用第一种方法连就没问题,第二种的话就报下面的错
javax.servlet.ServletException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]列 'table1.id' 在选择列表中无效,因为该列未包含在聚合函数中,并且没有 GROUP BY 子句。
后来我又实验了一下发现只要是聚合函数都存在这个问题i.e count/avg/sum....
真是弄得我不理解,请问有没有朋友碰到过这个问题?
环境:SQL SERVER JDBC是安装过jdbc sp1的、SQL SERVER标准版+sp3
tomcat 5.0.28,jdk1.5_sp3,什么classpath , tomcat_home ,java_home都肯定正确,也把MS SQL SERVER JDBC里的三个JAR拷贝到应该存在的地方了(肯定正确,因为JDBC-ODBC连接是正常的,而且不涉及聚合函数的SQL 用JDBC 直连也没问题)
这死问题困扰偶好久,估计是什么地方不合适?望朋友们多指教,但是请千万别告诉偶改用ORACLE /MYSQL之类的了,不可能对DBMS下手了。
 
sqljdbc.dll文件有没有导入sqlserver?
 
SQLServer 2000 Driver for JDBC有问题,
你的语句select count(pid) as pid from table1发送到sqlserver时用“sql事件探查器”的语句为select count(pid) as pid,* from table1,所有就错了,
但用select count(*) as pid from table1就没有问题了,
 
下载这个开源sqlserver驱动试试,反正我试了没有问题,
地址:http://sourceforge.net/project/showfiles.php?group_id=33291
看我的代码
testsqlserver.jsp如下:<br>
<%@ page contentType=&quot;text/html;charset=gb2312&quot;%>
<%@ page import=&quot;java.sql.*&quot;%>
<html>
<body>
<%Class.forName(&quot;net.sourceforge.jtds.jdbc.Driver&quot;).newInstance();

String url=&quot;jdbc:jtds:sqlserver://localhost:1433/master;tds=8.0;lastupdatecount=true&quot;;

//pubs为你的数据库的
String user=&quot;sa&quot;;

String password=&quot;csb&quot;;

Connection conn= DriverManager.getConnection(url,user,password);

Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);

String sql=&quot;select * from sysobjects&quot;;

ResultSet rs=stmt.executeQuery(sql);

while(rs.next()) {%>
您的第一个字段内容为:<%=rs.getString(1)%> <br>
您的第二个字段内容为:<%=rs.getString(2)%>
<%}%>
<%out.print(&quot;数据库操作成功,恭喜你&quot;);%>
<%rs.close();

stmt.close();

conn.close();

%>
</body>
</html>
 
谢谢,帮了大忙了,这个问题在CSDN上N久没有人回答啊!
 

Similar threads

后退
顶部