问这样一个问题,谢谢大家回答
时间:2008-08-29 18:01:25
来源:论坛整理 作者: 编辑:chinaitzhe
<%@ page language="java" contentType="text/html; charset=gbk"
pageEncoding="gbk"%>
<%@ page import="java.sql.*"%>
<%!
String str = "";
private void tree(Connection conn, int id, int level) {
Statement stmt = null;
ResultSet rs = null;
String prestr = "";
for (int i = 0; i < level; i ) {
prestr = "----";
}
try {
stmt = conn.createStatement();
String sql = "select * from article where pid =" id;
rs = stmt.executeQuery(sql);
while (rs.next()) {
str = " <tr> <td>" rs.getInt("id") " </td> <td>" prestr
" <a href = 'showdetail.jsp?id=" rs.getInt("id")
"'>" rs.getString("title") " </a>" " </td> </tr>";
if (rs.getInt("isleaf") != 0) {
tree(conn, rs.getInt("id"), level 1);
}
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) {
rs.close();
rs = null;
}
if (stmt != null) {
stmt.close();
stmt = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}%>
<%
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost/bbs?user=root&password=root";
Connection conn = DriverManager.getConnection(url);
Statement stmt = conn.createStatement();
ResultSet rs = stmt
.executeQuery("Select * from article where pid = 0");
while (rs.next()) {
str = " <tr> <td>" rs.getInt("id") " </td> <td>"
" <a href = 'showdetile.jsp?id=" rs.getInt("id")
"'>" rs.getString("title") " </a>" " </td> </tr>";
if (rs.getInt("isleaf") != 0) {
tree(conn, rs.getInt("id"), 1);
}
}
rs.close();
stmt.close();
conn.close();
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>Insert title here </title>
</head>
<body>
<table border="1">
<%=str%>
</table>
<%str = ""; %>
</body>
</html>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我的问题是:之前我的程序在最后的地方没加 <%str = ""; %> 程序每次读取数据库中的10条记录,但是每次我在页面上刷新一次,页面重新读取数据库,在上次显示的10条记录后面重复显示那10条记录,在刷新一次,又接着上次的记录后面重复显示10条,变成了30条记录,后来我在最后加上了 <%str = ""; %>,不会出现上面的问题了,但是我想想问问,这样对程序有什么影响,道理是什么?我这样理解对不对:str是一个全局变量,把数据库中的记录全输入到str中,关闭数据库的连接之后用 <%=str%>输出,之后给str用 <%str = ""; %>,这个问题是解决了,但是因为str已经被清空,但是输出到浏览器的每条记录都是一个连接,这样会对这些连接或者说以后的操作有什么影响?小弟是新人,好多问题不明白,请大侠指点!谢谢了先!
网友回复:该回复于2008-08-07 20:02:50被版主删除
网友回复:这不老马的例子么。。
他好像对这个问题说了吧。
----------
这样会对这些连接或者说以后的操作有什么影响?-
-----------
没有影响,因为以后的连接和操作与它无关。
网友回复:就如下面:
- Java code
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ <%! int i = 0; %> <body> <%=i %> </body>
这样你每次刷新i都会增1,道理和你的str一样。。
网友回复:你的基础知识确实需要加强。 <%! 这个是全局声明, <%! String str="" %>等于定义了一个全局变量str,所有的页面都可以用到它并改变它。你每打开一次页面,str的值就发生一次变化,所以你开始每刷新一次,str就多10条。你加上 <% str="" %>等于把str的值改变并使用了以后,再把它的值清空了。至于你说的影响是没有的。只是不明白你定义全局变量的用意。你可以把 <%! String str="" %> 换成 <% String str="" %>,这样就不需要 <% str="" %>了。
网友回复:楼上正解
网友回复:专业路过.....
网友回复:楼上的,我换成了 <% String str="" ;%> 但是无法被 <%!%>中的private void tree(Connection conn, int id, int level) str引用
网友回复:
正解
网友回复:楼上的,我换成了 <% String str="" ;%> 但是无法被 <%!%>中的private void tree(Connection conn, int id, int level) str引用,这样写在str = " <tr> <td>" rs.getInt("id") " </td> <td>" prestr
这个地方报错啊
网友回复:同意四楼的.
网友回复:jsp页面不要特殊对待它 实际上他就是个普通的java程序。。所以全局的概念仍然存在。。
网友回复:我开始说过了,不明白你用全局声明的意义。你可以先说下你的意图。
你把所有 <%!%>包含的东西都换成 <%%>就可以了。当然这是在没考虑你的意图的情况下,去掉 <%str=""%>的途径之一。
网友回复:要定义成全局变量。不过在下次刷新时候要清空下。。
str = “”;
网友回复:楼主,你代码逻辑有问题吧,怎么自身访问自身?
- Java code
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ <%! String str = ""; private void tree(Connection conn, int id, int level) { Statement stmt = null; ResultSet rs = null; String prestr = ""; for (int i = 0; i < level; i ) { prestr = "----"; } try { stmt = conn.createStatement(); String sql = "select * from article where pid =" id; rs = stmt.executeQuery(sql); while (rs.next()) { str = " <tr> <td>" rs.getInt("id") " </td> <td>" prestr " <a href = 'showdetail.jsp?id=" rs.getInt("id") "'>" rs.getString("title") " </a>" " </td> </tr>"; if (rs.getInt("isleaf") != 0) { [color=#FF0000]tree(conn, rs.getInt("id"), level 1);[/color] } } } catch (SQLException e) { e.printStackTrace(); } finally { try { if (rs != null) { rs.close(); rs = null; } if (stmt != null) { stmt.close(); stmt = null; } } catch (SQLException e) { e.printStackTrace(); } } } %>
网友回复:递归啊
网友回复:好像你这个递归运行起来没完没了啊.
关键字:问题,
上一篇:这个问题怎么解决先谢谢大家了
下一篇:下面没有链接了











文章评论
共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面