[求助]为什么我在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]]
----------------解决方案--------------------------------------------------------