Java开发网 Java开发网
注册 | 登录 | 帮助 | 搜索 | 排行榜 | 发帖统计  

您没有登录

» Java开发网 » Database/JDBC/SQL/JDO/Hibernate » MS SQL  

按打印兼容模式打印这个话题 打印话题    把这个话题寄给朋友 寄给朋友    该主题的所有更新都将Email到你的邮箱 订阅主题
flat modethreaded modego to previous topicgo to next topicgo to back
作者 另一个CallableStatement的问题
Jsharp





发贴: 30
积分: 0
于 2006-08-03 02:18 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
数据库: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实在搞不明白 请帮帮我 谢谢大家



作者 Re:另一个CallableStatement的问题 [Re:Jsharp]
why

問題兒童

总版主


发贴: 4629
积分: 388
于 2006-08-03 08:57 user profilesend a private message to usersend email to whysearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
最後那句很難看明白
請說清楚閣下怎樣判断

不相信equals會不行



作者 Re:另一个CallableStatement的问题 [Re:Jsharp]
Jsharp





发贴: 30
积分: 0
于 2006-08-03 14:36 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
谢谢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
SadSad



作者 Re:另一个CallableStatement的问题 [Re:Jsharp]
Jsharp





发贴: 30
积分: 0
于 2006-08-03 15:29 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
关于这个问题我又重新写了一个方法如下

import com.atm.tools.ConnectBean;
import java.sql.*;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Test {
private BufferedReader br = null;
private ResultSet rs = null;
private PreparedStatement ps=null;

public Test() {
}
public static void main(String[] args) {
Test t=new Test();
t.zhu();
}

public void zhu() {
System.out.println("**************ATM**************");
System.out.println("1.拥有帐户");
System.out.println("2.新用户注册");
String mm = input();
if ("1".equals(mm)) {
login();
} else if ("2".equals(mm)) {
reg();
} else {
System.out.println("输入有错误");
zhu();
}
//System.out.println("***********请选择功能************");
}

public void reg(){
System.out.println("注册");
System.out.println("username");
String name=input();
System.out.println("passwd");
String passwd=input();
ConnectBean conBean = new ConnectBean();//数据库连接类 ,没问题
Connection conn=conBean.getConnection();
if(conn==null){
System.out.println("连接数据库失败");
}
try {
ps = conn.prepareStatement("insert into users values(?,?)");
ps.setString(1,name);
ps.setString(2,passwd);
ps.executeUpdate();
} catch (SQLException ex) {
}finally{
try {
ps.close();
conn.close();
} catch (SQLException ex1) {
}
}

public void login(){
System.out.println("登陆");
System.out.println("username");
String name=input();
System.out.println("passwd");
String passwd=input();
ConnectBean conBean = new ConnectBean();
Connection conn=conBean.getConnection();
if(conn==null){
System.out.println("连接数据库失败");
}
try {
ps = conn.prepareStatement("select * from users where username=?");
ps.setString(1,name);
ResultSet rs=ps.executeQuery();
System.out.println("aaaa");
while(rs.next()){
String pwd=rs.getString(3);
System.out.println(pwd);
System.out.println(passwd);
System.out.println(passwd.equals(pwd));
}

} catch (SQLException ex) {
}finally{ //加与不加都试过了
try {
ps.close();
conn.close();
} catch (SQLException ex1) {
}
}

}

public String input() {
br = new BufferedReader(new InputStreamReader(System.in));
String s = new String();
try {
s = br.readLine();
} catch (IOException ex) {
}
return s;
}

}
}

情况是这样 如果用reg()方法添加的用户 则在login()里面判断为false;
如果手工在 users表中写如一条记录 用那条记录的username 和 passwd调用
login()方法 就为true
帮帮我吧


why edited on 2006-08-03 16:32

作者 Re:另一个CallableStatement的问题 [Re:Jsharp]
why

問題兒童

总版主


发贴: 4629
积分: 388
于 2006-08-03 15:33 user profilesend a private message to usersend email to whysearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
>> System.out.prinltln了一下并把在数据库中用程式调用存储过程创建的username和passwd打印了一下 肉眼看上去一样 无空格 无其他符号 length也一样
>>
如何知道length也一样?
那個table中的username和passwd是char還是varchar?
是char可能要trim



作者 Re:另一个CallableStatement的问题 [Re:Jsharp]
Jsharp





发贴: 30
积分: 0
于 2006-08-03 15:41 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
回答 why老师
是varchar(50)
是我不对问题描述不全面对不起了



作者 Re:另一个CallableStatement的问题 [Re:Jsharp]
Jsharp





发贴: 30
积分: 0
于 2006-08-03 16:22 user profilesend a private message to usersearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
新发现,将reg()方法里的prepareStatment换成用Statement来执行sql
插入数据后
然后调用login 用新用reg()方法生成的username和passwd判断就为true了
期待ing




flat modethreaded modego to previous topicgo to next topicgo to back
  已读帖子
  新的帖子
  被删除的帖子
Jump to the top of page

   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