站内搜索: 请输入搜索关键词

当前页面: 开发资料首页JSP 专题数据库查询的奇怪错误,附代码,请教大侠们。。。

数据库查询的奇怪错误,附代码,请教大侠们。。。

摘要: 数据库查询的奇怪错误,附代码,请教大侠们。。。


代码如下,但是在NeatBeans5.0里编译运行的时候出错,总是说找不到结果集rs
但是如果不用If直接用ResultSet rs = stmt.executeQuery(sql); 就没问题。
真是怪了,请教大家 !!!
还有顺便问问怎么老是说警告:编码 GBK 的不可映射字符 ????


错误提示:
---------------------------------------------------------
C:/Documents and Settings/Administrator/demo/build/generated/src/org/apache/jsp/_01_jsp.java:146: 警告:编码 GBK 的不可映射字符
out.write("濡傛灉鎮ㄨ兘鐪嬪埌琛ㄦ牸涓殑鏁版嵁锛岃鏄庤繛鎺ユ暟鎹簱鎴愬姛锛?

/n");
^
C:/Documents and Settings/Administrator/demo/build/generated/src/org/apache/jsp/_01_jsp.java:110: 找不到符号
符号: 变量 rs
位置: 类 org.apache.jsp._01_jsp
while(rs.next())
^
C:/Documents and Settings/Administrator/demo/build/generated/src/org/apache/jsp/_01_jsp.java:116: 找不到符号
符号: 变量 rs
位置: 类 org.apache.jsp._01_jsp
out.print( rs.getString(1) );
C:/Documents and Settings/Administrator/demo/build/generated/src/org/apache/jsp/_01_jsp.java:119: 找不到符号
符号: 变量 rs
位置: 类 org.apache.jsp._01_jsp
out.print( rs.getString(2) );
C:/Documents and Settings/Administrator/demo/build/generated/src/org/apache/jsp/_01_jsp.java:122: 找不到符号
符号: 变量 rs
位置: 类 org.apache.jsp._01_jsp
out.print( rs.getString(3) );
C:/Documents and Settings/Administrator/demo/build/generated/src/org/apache/jsp/_01_jsp.java:125: 找不到符号
符号: 变量 rs
位置: 类 org.apache.jsp._01_jsp
out.print( rs.getString(4) );
C:/Documents and Settings/Administrator/demo/build/generated/src/org/apache/jsp/_01_jsp.java:128: 找不到符号
符号: 变量 rs
位置: 类 org.apache.jsp._01_jsp
out.print( rs.getString(5) );
C:/Documents and Settings/Administrator/demo/build/generated/src/org/apache/jsp/_01_jsp.java:131: 找不到符号
符号: 变量 rs
位置: 类 org.apache.jsp._01_jsp
out.print( rs.getString(6) );
C:/Documents and Settings/Administrator/demo/build/generated/src/org/apache/jsp/_01_jsp.java:134: 找不到符号
符号: 变量 rs
位置: 类 org.apache.jsp._01_jsp
out.print( rs.getString(7) );
C:/Documents and Settings/Administrator/demo/build/generated/src/org/apache/jsp/_01_jsp.java:139: 找不到符号
符号: 变量 rs
位置: 类 org.apache.jsp._01_jsp
rs.close();
^
9 错误
9 警告
C:/Documents and Settings/Administrator/demo/nbproject/build-impl.xml:353: The following error occurred while executing this line:
C:/Documents and Settings/Administrator/demo/nbproject/build-impl.xml:141: Compile failed; see the compiler error output for details.
生成失败(总时间:1 秒)
---------------------------------------------------------


代码如下:
---------------------------------------------------------
<%@page contentType="text/html"%>
<%@page pageEncoding="GB2312"%>
<%@page import="java.sql.*"%>


HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">


<head>

JSP Page
</head>
<body>

JSP Page !!!


<%
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); //载入驱动程序类别
Connection con = DriverManager.getConnection("jdbc:odbc:accessdb"); //建立数据库链接,accessdb为ODBC数据源名称
//建立Statement对象
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
String sql ="select * from 计算机类型";
request.setCharacterEncoding("GB2312");
String Selecter = request.getParameter("LIKE");
String valu = request.getParameter("valu");
out.print(Selecter+"和"+valu+"
");
String sqlgo = "select * from 计算机类型 where "+Selecter+ "="+valu;
out.print(sqlgo+"
");
if (valu==null | valu=="")
{
out.print("全部数据!!
");
ResultSet rs = stmt.executeQuery(sql); //建立ResultSet(结果集)对象,并执行SQL语句
}
else
{
out.print("查询结果如下:
");
ResultSet rs = stmt.executeQuery(sqlgo);
}
%>


<form action="01.jsp" method="post" name="ctype">

查询的字段:
<select NAME="LIKE">
<option VALUE="品牌">品牌
<option VALUE="型号">型号
<option VALUE="cpu型号">cpu型号
<option VALUE="cpu频率">cpu频率
<option VALUE="内存">内存
<option VALUE="硬盘">硬盘
</select>
<input name="valu" type="text">
<input name="submit1" type="submit" value="查询">
</form>

计算机类型数据表中记录如下


<table width="640" border="1" align="center" bordercolor="#7188e0">
<tr bgcolor="d1d1ff">
<th >编号</th>
<th >品牌</th>
<th >型号</th>
<th >cpu类型</th>
<th >cpu频率</th>
<th >内存</th>
<th >硬盘</th>
</tr>
<%
while(rs.next())
{
%>
<tr bgcolor="#f8f8f8">
<td><%= rs.getString(1) %></td>
<td><%= rs.getString(2) %></td>
<td><%= rs.getString(3) %></td>
<td><%= rs.getString(4) %></td>
<td><%= rs.getString(5) %></td>
<td><%= rs.getString(6) %></td>
<td><%= rs.getString(7) %></td>
</tr>
<%
}
rs.close();
stmt.close();
con.close();
%>
</table>



如果您能看到表格中的数据,说明连接数据库成功!



</body>



ResultSet rs =null;
if (valu=="")
{
out.print("全部数据!!
");
rs = stmt.executeQuery(sql); //建立ResultSet(结果集)对象,并执行SQL语句
}
先声明后引用

还有request得到的不会为null只会""


if (valu==null | valu=="")
{
out.print("全部数据!!
");
ResultSet rs = stmt.executeQuery(sql); //建立ResultSet(结果集)对象,并执行SQL语句
}
else
{
out.print("查询结果如下:
");
ResultSet rs = stmt.executeQuery(sqlgo);
}

//rs的作用域仅仅在它所在的括号中间,出了括号,它就不存在了,
ResultSet rs 的定义写到if外面去

至于编码问题,就不清楚了,把它改成utf-8试试看. 俺从来不用NetBeans

/////
String executeSql = sql;
if (valu==null | valu==""){
out.print("全部数据!!
");
}
else{
out.print("查询结果如下:
");
executeSql = sqlgo;
}
ResultSet rs = stmt.executeQuery(sqlgo);

....



帮顶


补:
String valu = request.getParameter("valu");
out.print(Selecter+"和"+valu+"
");
String sqlgo = "select * from 计算机类型 where "+Selecter+ "="+valu;

若没有传入valu ,那valu就是null,输出语句是会报错的

valu=="" 也是错误的, 应该是 value.trim().equals("")
再就是注意"||"与"|"的区别,虽然都表示"or"关系,但实际上是有很大区别


如果把ResultSet放在If外面就没问题了,但是我的Sqlgo肯定写的不对
String sql ="select * from 计算机类型";
ResultSet rs = stmt.executeQuery(sql);
就没问题,但是
String sqlgo = "select * from 计算机类型 where "+Selecter+ "="+valu;
ResultSet rs = stmt.executeQuery(sqlgo);
在输入查询条件之后就出错,错误的提示如下:正确的sqlgo应该怎么写!?

HTTP Status 500 -

--------------------------------------------------------------------------------

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: [Microsoft][ODBC Microsoft Access Driver] 参数不足,期待是 1。
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
org.apache.jsp._01_jsp._jspService(_01_jsp.java:147)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)


root cause

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 参数不足,期待是 1。
sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958)
sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)
sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3111)
sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338)
sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(JdbcOdbcStatement.java:253)
org.apache.jsp._01_jsp._jspService(_01_jsp.java:71)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:291)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:241)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362)



String sqlgo = "select * from 计算机类型 where Selecter="+valu;


String sqlgo = "select * from 计算机类型 where Selecter="+valu;

这个肯定也不对啊! Selecter本来就是request得到的 。。。。
String Selecter = request.getParameter("LIKE");
String valu = request.getParameter("valu");



String sqlgo = "select * from 计算机类型 where "+Selecter+ "='"+valu + "'";



不好意思看错了。
楼主你如果要实现动态的条件你可以这样写:
String sqlgo String sqlgo = "select * from 计算机类型 where 1=1";
然后你开始取参数里面的值
String Selecter = request.getParameter("LIKE");
String valu = request.getParameter("valu");
从你的程序里面可以看出你这两个参数应该是如果有的话应该是全部有值吧!
if(Selecter!=&&valu!=null)
{
sqlgo=sqlgo+" and "+Selecter+"='"+valu+"'";
}
这样下面直接ResultSet rs = stmt.executeQuery(sqlgo);就可以了
不用写的那么复杂!



我现在修改了一下,还是不通过 。。。
我都要晕了,真是想不通,为啥不能给sqlgo赋值
提示:C:/Documents and Settings/Administrator/demo/build/generated/src/org/apache/jsp/_01_jsp.java:70: 已在 _jspService(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse) 中定义 sqlgo
String sqlgo = sqlgo+ " where "+Selecter+ "='"+valu+"'";
^
1 错误
6 警告
C:/Documents and Settings/Administrator/demo/nbproject/build-impl.xml:353: The following error occurred while executing this line:
C:/Documents and Settings/Administrator/demo/nbproject/build-impl.xml:141: Compile failed; see the compiler error output for details.
生成失败(总时间:1 秒)
-------------------------------------------------------------------------------------

<%
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:accessdb");
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
String sqlgo ="select * from 计算机类型";
request.setCharacterEncoding("UTF-8");
String Selecter = request.getParameter("LIKE");
String valu = request.getParameter("valu");
out.print(Selecter+"和"+valu+"
");
if (valu!=null | valu !="" )
{
String sqlgo = sqlgo+ " where "+Selecter+ "='"+valu+"'";
}
out.print(sqlgo+"
");
ResultSet rs = stmt.executeQuery(sqlgo);
%>


String sqlgo = sqlgo+ " where "+Selecter+ "='"+valu+"'";这句话.
你的sqlgo在这个语句的左边定义的,你右边就在使用了,不行的
而且你前面也有String sqlgo ="select * from 计算机类型";让sqlgo 有定义了.
你改成:sqlgo = sqlgo+ " where "+Selecter+ "='"+valu+"'";就可以了!


Sorry
犯了一个低级错误
应该没有String


呵呵


↑返回目录
前一篇: 如何做session监听,查看是否已登陆,和是否已退出,请高手帮忙。
后一篇: 谁有vss,提供下载地址也行,50分不少吧