Topic: 另一个CallableStatement的问题 |
Print this page |
1.另一个CallableStatement的问题 | Copy to clipboard |
Posted by: Jsharp Posted on: 2006-08-03 02:18 数据库:sqlserver2000 操作系统 winxp 2 存储过程如下 CREATE proc adduser @name varchar(20),@pwd varchar(20) as insert into users values(@name,@pwd) 程式代码如下 public void reg() { System.out.println("请输入你的用户名:"); String username = input();//input()方法返回一个控制台输入的字符串 System.out.println("请输入你的密码:"); String passwd = input(); System.out.println("请再次输入你的密码:"); String passwd2 = input(); String id1 = String.valueOf((int) (Math.random() * 10)); String id2 = String.valueOf((int) (Math.random() * 10)); String id3 = String.valueOf((int) (Math.random() * 10)); String id4 = String.valueOf((int) (Math.random() * 10)); String id = id1 + id2 + id3 + id4; System.out.println("请输入你看到的右边的验证码:" + id); String idd = input(); regCheck(username, passwd, passwd2, idd, id); } public void regCheck(String username, String passwd, String passwd2, String idd, String id) { if (passwd.compareTo(passwd2) != 0) { System.out.println("两次输入密码不同"); reg(); } else if (passwd.compareTo(passwd2) == 0 && idd.compareTo(id) == 0) { ConnectBean conBean = new ConnectBean(); Connection conn = conBean.getConnection(); if (conn == null) { System.out.println("连接数据库失败"); } try { cst = conn.prepareCall("{call adduser(?,?)}"); cst.setString(1, username); cst.setString(2, passwd); cst.executeUpdate(); System.out.println("注册成功!"); login(); } catch (SQLException ex) { } finally { try { cst.close(); } catch (SQLException ex1) { } } } else if (idd.compareTo(id) != 0) { System.out.println("验证码输入错误"); reg(); } } 这样之后数据库中的确加入了一个username 和passwd 提出passwd数据后和在控制台输入的密码数据无论用equals或compareTo方法比较结果都是false但如果直接在数据库中添加数据则能判断为true或直接在数据库中调用存储过程做判断结果都是true实在搞不明白 请帮帮我 谢谢大家 |
2.Re:另一个CallableStatement的问题 [Re: Jsharp] | Copy to clipboard |
Posted by: why Posted on: 2006-08-03 08:57 最後那句很難看明白 請說清楚閣下怎樣判断 不相信equals會不行 |
3.Re:另一个CallableStatement的问题 [Re: Jsharp] | Copy to clipboard |
Posted by: Jsharp Posted on: 2006-08-03 14:36 谢谢why 对你仰慕很久了. **************************************************** 这样之后数据库中的确加入了一个username 和passwd 提出passwd数据后和在控制台输入的密码数据无论用equals或compareTo方法比较结果都是false但如果直接在数据库中添加数据则能判断为true或直接在数据库中调用存储过程做判断结果都是true实在搞不明白 **************************************************** 我的意思是:这样就会在数据库的users表中添加上一个用户名和密码.然后用这个用户名和密码登陆系统.当在执行程序我用刚添加的username和passwd登陆,总提示我我输入的passwd和数据库中的(也就是我刚添加的)passwd不等(试了equals和compareTo方法). 如果直接在数据库中exec proc的话也能在users表中添加一个username和passwd 用这样添加的username和passwd登陆 就能通过 如果在数据库中直接用insert也能在users表中添加一个username和passwd 用这样添加的username和passwd登陆 也能通过 惟独在程式中调用存储过程添加进去的username和passwd不能用 于是我把在控制台登陆时输入的username和passwd System.out.prinltln了一下并把在数据库中用程式调用存储过程创建的username和passwd打印了一下 肉眼看上去一样 无空格 无其他符号 length也一样 但就是equals false |
4.Re:另一个CallableStatement的问题 [Re: Jsharp] | Copy to clipboard |
Posted by: Jsharp Posted on: 2006-08-03 15:29 关于这个问题我又重新写了一个方法如下
情况是这样 如果用reg()方法添加的用户 则在login()里面判断为false; 如果手工在 users表中写如一条记录 用那条记录的username 和 passwd调用 login()方法 就为true 帮帮我吧 |
5.Re:另一个CallableStatement的问题 [Re: Jsharp] | Copy to clipboard |
Posted by: why Posted on: 2006-08-03 15:33 >> System.out.prinltln了一下并把在数据库中用程式调用存储过程创建的username和passwd打印了一下 肉眼看上去一样 无空格 无其他符号 length也一样 >> 如何知道length也一样? 那個table中的username和passwd是char還是varchar? 是char可能要trim |
6.Re:另一个CallableStatement的问题 [Re: Jsharp] | Copy to clipboard |
Posted by: Jsharp Posted on: 2006-08-03 15:41 回答 why老师 是varchar(50) 是我不对问题描述不全面对不起了 |
7.Re:另一个CallableStatement的问题 [Re: Jsharp] | Copy to clipboard |
Posted by: Jsharp Posted on: 2006-08-03 16:22 新发现,将reg()方法里的prepareStatment换成用Statement来执行sql 插入数据后 然后调用login 用新用reg()方法生成的username和passwd判断就为true了 期待ing |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |