这几天都在学习着用JDBC连接sql server2000。用的是jdk1.6.0_16, Tomcat 6.0, sql server2000。发现的问题如下:<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head><body>
<%
Connection conn=null;
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test1";
String user="sa";
String pass="1";
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
conn=DriverManager.getConnection(url,user,pass);
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("select * from username1");
while(rs.next())
{
out.print("Content1: " + rs.getString("content1") + " || " + "Content2: " + rs.getString("content2")+ " || " + "Content1: "+ + rs.getString("content1"));
}
rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
问题出现在while语句里面。当我把content1拿出来以后,在后面想再拿多一次的时候,页面就报了这个错误:description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: Unable to compile class for JSP: An error occurred at line: 26 in the jsp file: /test1.jsp
The operator + is undefined for the argument type(s) String
23:
24: while(rs.next())
25: {
26: out.print("Content1: " + rs.getString("content1") + " || " + "Content2: " + rs.getString("content2")+ " || " + "Content1: "+ + rs.getString("content1"));
27: }
28:
29: rs.close();
Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:439)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:334)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:312)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:299)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
如果我把后面 + "Content1: "+ + rs.getString("content1")删除,是没有任何问题的。请问各位有遇到这个问题吗?大家是如何解决的呢?请各位大侠分享分享心得~其实这个问题是我的一个朋友提出来的,他说他最后用了JTBC解决的。我上网搜过,好像只有.net,php,asp的版本。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head><body>
<%
Connection conn=null;
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test1";
String user="sa";
String pass="1";
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
conn=DriverManager.getConnection(url,user,pass);
Statement stmt=conn.createStatement();
ResultSet rs=stmt.executeQuery("select * from username1");
while(rs.next())
{
out.print("Content1: " + rs.getString("content1") + " || " + "Content2: " + rs.getString("content2")+ " || " + "Content1: "+ + rs.getString("content1"));
}
rs.close();
stmt.close();
conn.close();
%>
</body>
</html>
问题出现在while语句里面。当我把content1拿出来以后,在后面想再拿多一次的时候,页面就报了这个错误:description The server encountered an internal error () that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: Unable to compile class for JSP: An error occurred at line: 26 in the jsp file: /test1.jsp
The operator + is undefined for the argument type(s) String
23:
24: while(rs.next())
25: {
26: out.print("Content1: " + rs.getString("content1") + " || " + "Content2: " + rs.getString("content2")+ " || " + "Content1: "+ + rs.getString("content1"));
27: }
28:
29: rs.close();
Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:439)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:334)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:312)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:299)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:586)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
如果我把后面 + "Content1: "+ + rs.getString("content1")删除,是没有任何问题的。请问各位有遇到这个问题吗?大家是如何解决的呢?请各位大侠分享分享心得~其实这个问题是我的一个朋友提出来的,他说他最后用了JTBC解决的。我上网搜过,好像只有.net,php,asp的版本。
out.print("Content1: " + rs.getString("content1")
out.print("Content2: " + rs.getString("content2")
out.print("Content3: " + rs.getString("content3") 在组合输出试试
要和数据库类型对应
JDBC没有bug的
你的代码错误
试过了,不过是以这样的形式:
out.print("Content1: " + rs.getString("content1")
out.print("Content2: " + rs.getString("content2")
out.print("Content1: " + rs.getString("content1")结果是不行的。唯一我想到可行的是把要重复的content1扔进一个变量。ResultSet rs=stmt.executeQuery("select * from username1"); String temp=null;while(rs.next())
{
temp=rs.getString("content1");
out.print("Content1: " + temp + " || " + "Content2: " + rs.getString("content2")+ " || " + "Content1: "+ + temp);
} 这样就不会报错。不过我在寻找比这个更好的解决方法。
out.print("Content2: " + rs.getString("content2")
out.print("Content1: " + rs.getString("content1")
ResutlSet 这个是顺序读取的 用这个类就要遵守规则 要是想不按顺序去 可以用javax.servlet.jsp.jstl.sql 包下的 Result 类 这个类 可以不按顺序取数据
第一次听说就应该记住 ResultSet 是顺序读取 不能回头读取
首先,你要建一个表。那个表的content1和content2的类型都是text的,这个bug是针对text类型的数据。varchar是没有问题的。第二,你要把那个+号删除了。本来我想编辑一下原帖,可是找不到哪里可以编辑,都说我限权不够。
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=test1";
String user="sa";
String pass="1"; Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); conn=DriverManager.getConnection(url,user,pass); Statement stmt=conn.createStatement(); ResultSet rs=stmt.executeQuery("select * from username1"); Result result = ResultSupport.toResult(rs);
for(int i = 0 ; i < result.getRowCount() ; i ++){
Map map = result.getRows()[i];
System.out.println("content3"+map.get("content3"));
System.out.println("content1"+map.get("content1"));
}说明:
ResultSupport.toResult(rs); 把ResultSet结果集转换成Result 结果集
Result 结果集里是以Map 方式存储数据的 每一行数据是一个Map 字段名为Key字段值为value
你试试看
Result result = ResultSupport.toResult(rs);
这里是Result 还是ResultSet?
Result 这个是javax.servlet.jstl.jsp.sql包下的类 Result result = ResultSupport.toResult(rs); 就是把 上面的ResultSet 对象转化程Result 对象