当前位置: 代码迷 >> Java Web开发 >> [求助]为什么我在sql中执行execute返回的都是true呢?
  详细解决方案

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

热度:298   发布时间:2008-09-03 15:57:57.0
[求助]为什么我在sql中执行execute返回的都是true呢?
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。。
谢谢大家帮忙看看 !
搜索更多相关主题的帖子: execute  sql  

----------------解决方案--------------------------------------------------------
execute
boolean execute(String sql)
                throws SQLException执行给定的 SQL 语句,该语句可能返回多个结果。在某些(不常见)情形下,单个 SQL 语句可能返回多个结果集合和/或更新计数。这一点通常可以忽略,除非正在 (1) 执行已知可能返回多个结果的存储过程或者 (2) 动态执行未知 SQL 字符串。
execute 方法执行 SQL 语句并指示第一个结果的形式。然后,必须使用方法 getResultSet 或 getUpdateCount 来获取结果,使用 getMoreResults 来移动后续结果。


参数:
sql - 任何 SQL 语句
返回:
如果第一个结果为 ResultSet 对象,则返回 true;如果其为更新计数或者不存在任何结果,则返回 false
----------------解决方案--------------------------------------------------------
版主,那么要验证用户名和密码该如何验证呢?
----------------解决方案--------------------------------------------------------
你怎么做的?只用了Jsp么?
----------------解决方案--------------------------------------------------------
看下resultset里面有没有值就行了
----------------解决方案--------------------------------------------------------
jsp+servlet+javabean
----------------解决方案--------------------------------------------------------
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]]
----------------解决方案--------------------------------------------------------
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");
        }
----------------解决方案--------------------------------------------------------
你这样b只能是true,ResultSet你没用啊。用它来存储返回结果,然后在这个结果中读出username和passsword,再进行判断,再看是否验证成功来设置b就好了
----------------解决方案--------------------------------------------------------
多谢版主了,我用resultset对象做出来了,但是如果不用resultset能不能做呢?我以前是做asp的,直接就可以execute就能判断了!不用resultset。要是不用resultset对象,可以不可以判断呢?

[[it] 本帖最后由 yc12 于 2008-9-5 09:45 编辑 [/it]]
----------------解决方案--------------------------------------------------------
  相关解决方案