好奇怪的javabean

bowlder 2002-03-20 04:37:11
我在网上当的一个javabean的程序,调试的时候出现非常奇怪的问题。
checkUser()方法用于返回用户是否已经存在,表中暂时只有一条记录,用户名是test。当我在bean中检查test用户时,checkUser()方法返回的值是true,但在jsp中checkUser()方法返回的值却是false,而且在jsp中显示用户名确实是test。唯一不同的是jsp中的test是通过页面中提交赋值给bean中的变量的,而在javabean中调试的test是程序中赋予的,同样的参数确得到不同的结果,难道是字符集的问题吗,谁能告诉我为什么,怎么解决?
...全文
59 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
bowlder 2002-03-20
  • 打赏
  • 举报
回复
文件太长,以下续

//-----------------------------------------user.jsp

<%@ page contentType="text/html;charset=gb2312"%>
<% response.setHeader("Expires","0"); %>
<html>
<head>
<title>新用户注册</title>
</head>
<body bgcolor="#FFFAD9">
<p align="center"><font color="#8484FF"><span class="main1"><strong><big>新个人用户注册</big></strong></span></font></p>
<span class="main1">
<form method="POST" name="formreg" action="douser.jsp">
<div align="center">
<center>
<table border="1" width="50%" borderColorDark="#FFFFFF" borderColorLight="#000000" cellspacing="0">
<tr>
<td width="27%" bgcolor="#DDDDFF" align="center"><span class="main1">用户名:</td>
<td width="73%" bgcolor="#DDDDFF"><span class="main1"><input type="text" name="username" size="20" tabindex="1"><font color="#FF0000"><b>*</b></font></span></td>
</tr>
<tr>
<td width="30%" bgcolor="#DDDDFF" colspan="2">
<div align="center"><center><p>
<input type="submit" value="递交" onclick="return checkmsg();" name="B1" tabindex="10">
<input type="reset" value="清除" name="B2" tabindex="11">
</td>
</tr>
</table>
</center>
</div>
</form>
</body>
</html>

//-----------------------------------------douser.jsp

<%@ page contentType="text/html;charset=gb2312"%>
<% response.setHeader("Expires","0"); %>
<!--生成一个JavaBean:lyf.adduser的实例,id为adduser,生存范围为page-->
<jsp:useBean id="adduser" class="db.adduser" scope="page"/>
<!--设置JavaBean中各个属性的值,这会调用JavaBean中各个属性的set方法,以便JavaBean得到正确的属性值,”*”代表进行所有属性的匹配-->
<jsp:setProperty name="adduser" property="username"/>
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>用户添加</title>
</head>
<body bgcolor="#FFEBBD">
<div align="center"><center>
<%
//调用lyf.adduser的checkUser()方法检查是否有重复的用户名
//如果有重复就显示对应的信息
out.println(adduser.checkUser()+"用户名"+adduser.getUsername()+"!"+adduser.checkUser());
out.println(adduser.checkSql());
/*
if(!adduser.checkUser())
{
//页面文字输出信息,使用jsp内置对象out的println方法,相当于asp中的response.write方法
out.println("对不起,这个用户名"+adduser.getUsername()+"已经被申请了,请重新选择!");
//return代表返回,运行时候碰到return就不会进行下面的处理了,功能相当于asp中的response.end
//return;
}
*/
%>
</BODY>
</HTML>
bowlder 2002-03-20
  • 打赏
  • 举报
回复
我已经用getUsername()方法在jsp页面中将用户名显示出现来了,是test,显示前后还加入其他字符,保证不是存在空格的问题。我已经在这个牛角尖里钻了一天了,各位帮帮忙吧,谢谢了。
首文件:user.jsp

//-----------------------------------------db.java
package db;
/**
* A Class class.
* <P>
* @author liuyufeng
*/
//声明类库文件
import oracle.jdbc.driver.*;
import java.net.*;
import java.sql.*;
import java.lang.*;
import java.io.*;
import java.util.*;
public class db
{ //成员变量初始化
Connection conn = null; //数据库连接,如同asp中所写的include文件
ResultSet rs = null; //记录集,set rs = Server.CreateObject("ADODB.Recordset")
String username=""; //用户名
String password=""; //密码
String email=""; //email
String homepage=""; //主页
String signs=""; //签名
//db的构建器
public db()
{
try
{
//注册数据库驱动程序为Oracle驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
}
catch(java.lang.ClassNotFoundException e)
{
//违例处理。这样写是为了方便调试程序,出错打印mydb()就知道在什么地方出错了
System.err.println("mydb(): " + e.getMessage());
}
}
//executeQuery方法用于进行记录的查询操作
//入口参数为sql语句,返回ResultSet对象
public ResultSet executeQuery(String sql)
{
rs = null;
try
{
//建立数据库连接,使用Oracle的一种thin连接方式,demo为主机名字,demodb为数据库,后面的两个demo为用户名和密码
conn = DriverManager.getConnection("jdbc:oracle:thin:@shimin:1521:oracle","test","test");
Statement stmt = conn.createStatement();
//执行数据库查询操作
rs = stmt.executeQuery(sql);
}
catch(SQLException ex)
{
System.err.println("db.executeQuery: 123456" + ex.getMessage());
}
return rs;
}
//executeUpdate方法用于进行add或者update记录的操作
//入口参数为sql语句,成功返回true,否则为false
public boolean executeUpdate(String sql)
{
boolean bupdate=false;
rs = null;
try
{
//建立数据库连接,其它参数说明同上面的一样
conn = DriverManager.getConnection("jdbc:oracle:thin:@shimin:1521:oracle","test","test");
Statement stmt = conn.createStatement();
int rowCount = stmt.executeUpdate(sql);
//如果不成功,bupdate就会返回0
if(rowCount!=0)bupdate=true;
}
catch(SQLException ex)
{
//打印出错信息
System.err.println("db.executeUpdate: " + ex.getMessage());
}
return bupdate;
}
//toChinese方法用于将一个字符串进行中文处理
//否则将会是???这样的字符串
public static String toChinese(String strvalue)
{
try
{
if(strvalue==null)
{
return null;
}
else
{
strvalue = new String(strvalue.getBytes("ISO8859_1"), "GBK");
return strvalue;
}
}
catch(Exception e)
{
return null;
}
}
/*
public static void main(String args[])
{
ResultSet rset = new db().executeQuery ("select * from test");

// Iterate through the result and print the employee names
try
{
while (rset.next ())
System.out.println (rset.getString (1));
}
catch(SQLException ex)
{
System.err.println("db.executeQuery.next: " + ex.getMessage());
}

}
*/
}


//-----------------------------------------adduser.java

package db;
/**
* A Class class.
* <P>
* @author liuyufeng
*/
//导入java类库
import java.sql.*;
import java.lang.*;
import oracle.jdbc.driver.*;
//adduser由db派生出来,拥有db的成员变量和方法
public class adduser extends db
{
//构建器
public adduser(){}
public boolean addNewUser()
{
boolean boadduser=false;
try
{
//进行用户注册的记录添加操作,生成sql语句
String sSql=new String("insert into test(regtime,username,password,email,homepage,signs)");
sSql=sSql+" values(SYSDAYE,'"+username+"','"+password+"','"+email+"','"+homepage+"','"+signs+"')";
//一种调试的方法,可以打印出sql语句,以便于查看错误
System.out.println(sSql);
//调用父类的executeUpdate方法,并根据成功以否来设置返回值
//if(super.executeUpdate(sSql))boadduser=true;
}
catch(Exception ex)
{
//出错处理
System.err.println("adduser.addNewUser: " + ex.getMessage());
}
finally
{
//无论是否出错,都要返回值
return boadduser;
}
}

//checkUser()方法用来检查用户名是否重复
//如果重复返回一个false
public String checkSql()
{ return "select * from test where username='"+username+"'";
}
public boolean checkUser()
{
boolean boadduser=true;
try
{
//构建sql查询语句
String sSql="select * from test where username='"+username+"'";
System.out.println(sSql);
//调用父类的executeQuery方法
if((super.executeQuery(sSql)).next())
{
//查询出来的记录集为空
boadduser=false;
}
else
{
boadduser=true;
}
}
catch(Exception ex)
{
//出错处理
System.err.println("adduser.addNewUser: " + ex.getMessage());
}
finally
{
//返回值
return boadduser;
}
}

//属性的set/get方法,同请求的参数一致
/*
其实下面的所有get/set方法都是重复性劳动,为了避免重复性的拷贝粘贴工作,我写了个软件Jsp Code Faster,只要输入一系列的字段名,所有的get/set方法都可以自动生成,大家可以在我的网站http://jspbbs.yeah.net上下载这个软件
*/
//属性用户名username的get/set方法
public String getUsername()
{
return username;
}
public void setUsername(String newUsername)
{
//用户名有可能是中文,需要进行转换
//username =db.toChinese(newUsername);
username =newUsername;
}
//属性密码password的get/set方法
public String getPassword()
{
return password;
}
public void setPassword(String newPassword)
{
password = newPassword;
}
//属性email的get/set方法
public String getEmail()
{
return email;
}
public void setEmail(String newEmail)
{
email = newEmail;
}
//属性主页homepage的get/set方法
public String getHomepage()
{
return homepage;
}
public void setHomepage(String newHomepage)
{
homepage = newHomepage;
}
//属性主页signs的get/set方法
public String getSigns()
{
return signs;
}
public void setSigns(String newSigns)
{
//签名有可能是中文,需要进行转换
//signs = db.toChinese(newSigns);
signs = newSigns;
}

public static void main(String args[])
{
adduser rset = new adduser();
rset.setUsername("test");
//rset.executeQuery ("select * from test");
System.out.println("返回:"+rset.getUsername()+".");
System.out.println("结果:"+rset.checkUser());
// Iterate through the result and print the employee names
/*
try
{
while (rset.next ())
System.out.println (rset.getString (1));
}
catch(SQLException ex)
{
System.err.println("db.executeQuery.next: " + ex.getMessage());
}
*/
}

}

rpw 2002-03-20
  • 打赏
  • 举报
回复
建议加点输出检查,字符串两边别忘了放单引号之类的分割符。
MagicJohn 2002-03-20
  • 打赏
  • 举报
回复
如果用户名是test的话,不会有字符集的问题。
参数可能不一定相同,你要检查一下在javabean 的参变量的值。
supershot 2002-03-20
  • 打赏
  • 举报
回复
请一步一步检查,肯定哪里有疏忽,绝对是一样的,这样的程序我做的太多了
snowredfox 2002-03-20
  • 打赏
  • 举报
回复
空格有考虑吗?!~~

23,407

社区成员

发帖
与我相关
我的任务
社区描述
Java 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧