注册 登录
编程论坛 J2EE论坛

[求助]为什么我在sql中执行execute返回的都是true呢?

yc12 发布于 2008-09-03 15:57, 1681 次点击
Class.forName("oracle.jdbc.driver.OracleDriver");
            String url = "jdbc:oracle:thin:@127.0.0.1:1521:yuanchao";
            con = DriverManager.getConnection(url,"scott","tiger");
            st = con.createStatement();
            String sql = "select * from emp where empno="+p+" and ename='"+name+"'";
            System.out.println(sql);
            b = st.execute(sql);
            System.out.println(p+name);
            System.out.println(b);
我就是想做一个用户名和密码验证的例子,但好像返回的都是true。。
谢谢大家帮忙看看 !
9 回复
#2
hwoarangzk2008-09-04 09:34
execute
boolean execute(String sql)
                throws SQLException执行给定的 SQL 语句,该语句可能返回多个结果。在某些(不常见)情形下,单个 SQL 语句可能返回多个结果集合和/或更新计数。这一点通常可以忽略,除非正在 (1) 执行已知可能返回多个结果的存储过程或者 (2) 动态执行未知 SQL 字符串。
execute 方法执行 SQL 语句并指示第一个结果的形式。然后,必须使用方法 getResultSet 或 getUpdateCount 来获取结果,使用 getMoreResults 来移动后续结果。


参数:
sql - 任何 SQL 语句
返回:
如果第一个结果为 ResultSet 对象,则返回 true;如果其为更新计数或者不存在任何结果,则返回 false
#3
yc122008-09-04 12:56
版主,那么要验证用户名和密码该如何验证呢?
#4
hwoarangzk2008-09-04 13:23
你怎么做的?只用了Jsp么?
#5
w3620347102008-09-04 16:28
看下resultset里面有没有值就行了
#6
yc122008-09-04 16:33
jsp+servlet+javabean
#7
yc122008-09-04 16:35
javabean:


public class CheckUser {
    Connection con = null;
    PreparedStatement st = null;
    ResultSet rs = null;
    boolean b = true;
    public boolean checkUser(String name,int p)
    {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            String url = "jdbc:oracle:thin:@127.0.0.1:1521:yuanchao";
            con = DriverManager.getConnection(url,"scott","tiger");
            String sql = "select * from emp where empno=? and ename= ?";
            st = con.prepareStatement(sql);
        
            st.setInt(1, p);
            st.setString(2, name);
            System.out.println(sql);
            System.out.println(st.execute());
            boolean b  = st.execute();
            
            
            
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally
        {
            if(rs!=null)
            {
                try {
                    rs.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(st!=null)
            {
                try {
                    st.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
            if(con!=null)
            {
                try {
                    con.close();
                } catch (SQLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        
            if(b==true)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    }

}
问题好像出在红色的地方!只要赋值,返回的结果就是赋的直的结果

[[it] 本帖最后由 yc12 于 2008-9-4 16:36 编辑 [/it]]
#8
yc122008-09-04 16:36
servlet:应该没什么问题?
response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        String strname = request.getParameter("name");
        String pwd = request.getParameter("pwd");
        int p = Integer.parseInt(pwd);
        CheckUser c = new CheckUser();
        boolean b = c.checkUser(strname, p);
        if(b==true)
        {
            out.println("ok");
        }
        else
        {
            out.println("out");
        }
#9
hwoarangzk2008-09-04 17:27
你这样b只能是true,ResultSet你没用啊。用它来存储返回结果,然后在这个结果中读出username和passsword,再进行判断,再看是否验证成功来设置b就好了
#10
yc122008-09-05 09:05
多谢版主了,我用resultset对象做出来了,但是如果不用resultset能不能做呢?我以前是做asp的,直接就可以execute就能判断了!不用resultset。要是不用resultset对象,可以不可以判断呢?

[[it] 本帖最后由 yc12 于 2008-9-5 09:45 编辑 [/it]]
1