JAVA分页 时候 出现的问题 [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。参数 1 (""): 数据类型 0x38 未知。
我的数据库是2008,连接是没问题的,我用同样的连接 成功连接到了 登录页面。有人说下载驱动,我也下载了,还是报错。代码如下javabean部分的代码:
package com.zte.search;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import com.zte.db.DB;public class search {
private Connection conn;
private ResultSet rs=null;
public ResultSet executeQuery(String sql) throws ClassNotFoundException {
try {
conn=DB.getConn();//这个地方没问题, 具体代码写别的地方了,但是可以连接到数据库的!!!
Statement st=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs=st.executeQuery(sql);
}
catch(SQLException ex) {
System.err.println( "executeQuery: " + ex.getMessage());
}
return rs;
}
}
分页代码
<jsp:useBean id= "pageBean" scope="page" class= "com.zte.search.search" />
<%
ResultSet rs = null;
String strSQL = "";
int PageSize = 5;
int Page = 1;
int totalPage = 1;
int totalrecord = 0;
strSQL = "SELECT * FROM e_table";
String sql = "select count(*) from e_table";
try{
rs = pageBean.executeQuery(sql);
if (rs.next()){
totalrecord = rs.getInt(1); //算出总行数
System.out.println(totalrecord);}
rs=pageBean.executeQuery(strSQL);
if(totalrecord % PageSize ==0)// 如果是当前页码的整数倍
totalPage = totalrecord / PageSize;
else // 如果最后还空余一页
totalPage = (int) Math.floor( totalrecord / PageSize ) + 1;
if(totalPage == 0) totalPage = 1;
if(request.getParameter("Page")==null || request.getParameter("Page").equals(""))
Page = 1;
else
try {
Page = Integer.parseInt(request.getParameter("Page"));
}
catch(java.lang.NumberFormatException e){
// 捕获用户从浏览器地址拦直接输入Page=sdfsdfsdf所造成的异常
Page = 1;
}
if(Page < 1) Page = 1;
if(Page > totalPage) Page = totalPage;
rs.absolute((Page-1) * PageSize + 1);
out.print("<TABLE BORDER='1' width='500' height='400'>");
out.print("<tr><td> 文章</td><td>作者 </td><td>地点 </td><td>时间 况</td></tr>");
for(int iPage=1; iPage<=PageSize; iPage++)
{
out.print("<TR><TD>"+rs.getString(1)+"</TD>");
out.print("<TD>"+rs.getString(2)+"</TD>");
out.print("<TD>"+rs.getString(3)+"</TD>");
out.print("<TD>"+rs.getString(4)+"</TD></TR>");
if(!rs.next()) break;
}
out.print("</TABLE>");
}
catch(SQLException e){
System.out.println("错误! ");
System.out.println(e.getMessage());
}
%>
<FORM Action="java.jsp" Method="GET">
<%
if(Page != 1) {
out.print(" <A HREF=java.jsp?Page=1>第一页</A>");
out.print(" <A HREF=java.jsp?Page= " + (Page-1) + ">上一页</A>");
}
if(Page != totalPage) {
out.print(" <A HREF=java.jsp?Page=" + (Page+1) + ">下一页</A>");
out.print(" <A HREF=java.jsp?Page=" + totalPage + ">最后一页</A>");
}
%>
<br><br><br><br><br><br><br><br><BR>输入页数:<input TYPE="TEXT" Name="Page" SIZE="3">
页数:<font COLOR="Red"><%=Page%>/<%=totalPage%></font>
</FORM>
我的数据库是2008,连接是没问题的,我用同样的连接 成功连接到了 登录页面。有人说下载驱动,我也下载了,还是报错。代码如下javabean部分的代码:
package com.zte.search;import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;import com.zte.db.DB;public class search {
private Connection conn;
private ResultSet rs=null;
public ResultSet executeQuery(String sql) throws ClassNotFoundException {
try {
conn=DB.getConn();//这个地方没问题, 具体代码写别的地方了,但是可以连接到数据库的!!!
Statement st=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs=st.executeQuery(sql);
}
catch(SQLException ex) {
System.err.println( "executeQuery: " + ex.getMessage());
}
return rs;
}
}
分页代码
<jsp:useBean id= "pageBean" scope="page" class= "com.zte.search.search" />
<%
ResultSet rs = null;
String strSQL = "";
int PageSize = 5;
int Page = 1;
int totalPage = 1;
int totalrecord = 0;
strSQL = "SELECT * FROM e_table";
String sql = "select count(*) from e_table";
try{
rs = pageBean.executeQuery(sql);
if (rs.next()){
totalrecord = rs.getInt(1); //算出总行数
System.out.println(totalrecord);}
rs=pageBean.executeQuery(strSQL);
if(totalrecord % PageSize ==0)// 如果是当前页码的整数倍
totalPage = totalrecord / PageSize;
else // 如果最后还空余一页
totalPage = (int) Math.floor( totalrecord / PageSize ) + 1;
if(totalPage == 0) totalPage = 1;
if(request.getParameter("Page")==null || request.getParameter("Page").equals(""))
Page = 1;
else
try {
Page = Integer.parseInt(request.getParameter("Page"));
}
catch(java.lang.NumberFormatException e){
// 捕获用户从浏览器地址拦直接输入Page=sdfsdfsdf所造成的异常
Page = 1;
}
if(Page < 1) Page = 1;
if(Page > totalPage) Page = totalPage;
rs.absolute((Page-1) * PageSize + 1);
out.print("<TABLE BORDER='1' width='500' height='400'>");
out.print("<tr><td> 文章</td><td>作者 </td><td>地点 </td><td>时间 况</td></tr>");
for(int iPage=1; iPage<=PageSize; iPage++)
{
out.print("<TR><TD>"+rs.getString(1)+"</TD>");
out.print("<TD>"+rs.getString(2)+"</TD>");
out.print("<TD>"+rs.getString(3)+"</TD>");
out.print("<TD>"+rs.getString(4)+"</TD></TR>");
if(!rs.next()) break;
}
out.print("</TABLE>");
}
catch(SQLException e){
System.out.println("错误! ");
System.out.println(e.getMessage());
}
%>
<FORM Action="java.jsp" Method="GET">
<%
if(Page != 1) {
out.print(" <A HREF=java.jsp?Page=1>第一页</A>");
out.print(" <A HREF=java.jsp?Page= " + (Page-1) + ">上一页</A>");
}
if(Page != totalPage) {
out.print(" <A HREF=java.jsp?Page=" + (Page+1) + ">下一页</A>");
out.print(" <A HREF=java.jsp?Page=" + totalPage + ">最后一页</A>");
}
%>
<br><br><br><br><br><br><br><br><BR>输入页数:<input TYPE="TEXT" Name="Page" SIZE="3">
页数:<font COLOR="Red"><%=Page%>/<%=totalPage%></font>
</FORM>
同学,你的数据库是 2008 的,你用 2000的JDBC驱动去连接,还说没问题这不是要坑人么?
能连接上数据库只能说明身份认证部分的协议可能还没变,但绝对不代表能执行SQL语句等操作。
另外,MS SQL Server 在2005以后,连接URL的写法和JDBC驱动的类已经发生大变更,请注意调整。