login()登陆检测,函数不能进来if(rs.next)中,求解释

login()登陆检测,函数不能进入if(rs.next)中,求解释public boolean login(String account,String password

login()登陆检测,函数不能进入if(rs.next)中,求解释
public boolean login(String account,String password){
boolean check = false;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
try {
Connection conn = DriverManager.getConnection( 
"jdbc:oracle:thin:@localhost:1521:orcl", "system", "oracle");
String sql = "SELECT account,password from manager where account=? and password=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, account);
ps.setString(2, password);
ResultSet rs = ps.executeQuery();
if(rs.next()){
//System.out.println(rs.getString("account"));
//System.out.println(rs.getString("password"));
check = true;
}
ps.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return check;
}
为什么函数不能进入if()里面呢?也就是说我初始化check是什么值,返回就是什么值。请大神帮我看看啊!
[最优解释]

引用:
为什么这样可以?求解释!


char是定长,不足的用空格补。
Java里用String Oracle数据库用varchar2对应。
[其他解释]


char(18)....char....ca

我才看到。。。
[其他解释]



SELECT account,password from manager where account=? and password=?查不到值当然进不去了


[其他解释]
ResultSet rs = ps.executeQuery();

结果集 rs  里没有东东
那么
if(rs.next()){
}
就进不去了 
debug 下 看看吧 应该是select 没有查询到数据
[其他解释]
但是我是用数据库已有的账号密码验证的啊,那么rs有数据啊?
[其他解释]
 你把ResultSet rs 定义到try catch外面去试试看.
[其他解释]
确定是这个错误!!!
[其他解释]
首先我觉得看着你的sql语句感觉怪怪的...建表的时候应该有主键值吧,你试着把where后面的语句改为id=?,然后set一下试试...
[其他解释]
引用:
你把ResultSet rs 定义到try catch外面去试试看.
为什么要定义到外面?解释一下
[其他解释]
引用:
public boolean login(String account,String password){
boolean check = false;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
try {
Connection conn = DriverManager.getConnecti……



如果没报异常的话  那么就是你传递的账户和密码和数据库对应不上、

查看你传递的账户密码是否与数据库表里的数据对应、

在oracle里执行

SELECT account,password from manager where account="你传递的账户" and password="你传递的密码"

是否有返回结果

------其他解决方案--------------------


quote=引用:]
引用:public boolean login(String account,String password){
boolean check = false;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
try {
Connection conn = Dri……[/quote]没有报异常,在数据库中也有返回结果
[这是查看从servlet传过来的账号和密码,
这是输出结果
这是从数据库中查询的结果

[其他解释]

引用:
首先我觉得看着你的sql语句感觉怪怪的...建表的时候应该有主键值吧,你试着把where后面的语句改为id=?,然后set一下试试...
主键就是account,因为不能重复注册,所以就把account设为主键了。
[其他解释]
引用:
quote=引用:]
引用:public boolean login(String account,String password){
boolean check = false;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");……




account 和password 取值附近是不是有空格、

程序也看不出什么毛病、sql就得多瞧瞧了、

ps.setString(1, account.trim());
ps.setString(2, password.trim());

[其他解释]
把你的程序赋值了改了改配置、我是mysql数据库、不过返回的是true

public static void main(String[] args) throws Exception {
System.out.println(login("123123", "123123"));;
}


public static boolean login(String account,String password){
boolean check = false;
try {
Class.forName("com.mysql.jdbc.Driver");
try {
Connection conn = DriverManager.getConnection( 
"jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8", "root", "123456");
String sql = "SELECT username,password from t_test where username=? and password=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, account);
ps.setString(2, password);
ResultSet rs = ps.executeQuery();
if(rs.next()){
//System.out.println(rs.getString("account"));
//System.out.println(rs.getString("password"));
check = true;
}
ps.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return check;
}




[其他解释]
引用:
把你的程序赋值了改了改配置、我是mysql数据库、不过返回的是true

Java code12345678910111213141516171819202122232425262728293031323334public static void main(String[] args) throws Exception {        System.out.prin……
崩溃了
[其他解释]
引用:
崩溃了


感觉还是传递的账户和密码的问题。debug看下吧、
也拿个main方法测试下、自己传递
[其他解释]
System.out.println("["+account+"]");
System.out.println("["+password+"]");

程序开始的时候输出看看  ,是否是空格的影响
[其他解释]

引用:
System.out.println("["+account+"]");
System.out.println("["+password+"]");

程序开始的时候输出看看  ,是否是空格的影响
没有。。。
[其他解释]
引用:
引用:引用:System.out.println("["+account+"]");
System.out.println("["+password+"]");

程序开始的时候输出看看  ,是否是空格的影响没有。。。

那试着换个表  起个  t_manager 表   ……
还是不行。。。
这是我建的表,不知道是不是表的问题(没有设主键,应该没区别吧)
[其他解释]
引用:
引用:System.out.println("["+account+"]");
System.out.println("["+password+"]");

程序开始的时候输出看看  ,是否是空格的影响没有。。。


那试着换个表  起个  t_manager 表    字段也区分出来 t_account t_password

然后在试试、 也不知道是不是关键字的问题、
[其他解释]
引用:
引用:引用:引用:引用:System.out.println("["+account+"]");
System.out.println("["+password+"]");

程序开始的时候输出看看……
这个能查到
[其他解释]
引用:
引用:引用:引用:System.out.println("["+account+"]");
System.out.println("["+password+"]");

程序开始的时候输出看看  ,是否是空格的影响没有。。。

那试着换……




改成查询全部sql 不绑定参数 看能查到不、奇了怪了、

select * from t_manager  
while(rs.next()){    }


[其他解释]
引用:
引用:引用:引用:引用:引用:引用:System.out.println("["+account+"]");
System……
那要怎么修改呢
[其他解释]
引用:
引用:引用:引用:引用:引用:System.out.println("["+account+"]");
System.out.println("["+passwor……


感觉只能是传递过来的账户密码问题了、
[其他解释]
引用:
建表用char(18)搞笑呢。

给你的account和password各加上15个空格,凑齐18位再去查询。
为什么这样可以?求解释!
[其他解释]
建表用char(18)搞笑呢。

给你的account和password各加上15个空格,凑齐18位再去查询。
[其他解释]
引用:
引用:为什么这样可以?求解释!

char是定长,不足的用空格补。
Java里用String Oracle数据库用varchar2对应。
哦,原来是这样,多谢但是我做删除操作的时候为什么成功删除呢?(也是用char(18))这个有什么区别么?
[其他解释]
引用:
引用:哦,原来是这样,多谢但是我做删除操作的时候为什么成功删除呢?(也是用char(18))这个有什么区别么?

没区别,你用"delete from manager where account=? and password=?"在JDBC里一样删不掉。

用别的方式删掉了证明两种删除操作有区别。
受教了,看来数据库建表有很多细节啊!多谢
[其他解释]
引用:
哦,原来是这样,多谢但是我做删除操作的时候为什么成功删除呢?(也是用char(18))这个有什么区别么?


没区别,你用"delete from manager where account=? and password=?"在JDBC里一样删不掉。



用别的方式删掉了证明两种删除操作有区别。
[其他解释]

引用:
引用:引用:哦,原来是这样,多谢但是我做删除操作的时候为什么成功删除呢?(也是用char(18))这个有什么区别么?

没区别,你用"delete from manager where account=? and password=?"在JDBC里一样删不掉。

用别的方式删掉了证明两……

[其他解释]
引用:
char(18)....char....ca

我才看到。。。
这个。。。还是要多谢你