实现:点击“登录”以后,到数据库里查用户名是否正确。
我的目前的代码是这样的:        if (e.getSource() == ok) {
        try{
          String url = "jdbc:sqlserver://localhost:1433; DatabaseName=MessageStore";
          Connection con;
  Statement stmt;
          con = DriverManager.getConnection(url, "sa","12345");
          String Sql = "select * from UserList where UserName= "+nameText.getText();
          ResultSet rs = stmt.executeQuery(Sql);
          stmt.close();
  con.close();
        }
                       }我这样写是否缺东西啊?我似乎这样写出来,IDE不会报错,但是似乎这个过程直接就被跳过去了,没有验证数据库的过程
请问还应该加入哪些东西?谢谢

解决方案 »

  1.   

    检查SQL里面的用户名和密码是否正确,只要能连接上数据库,那说明你已经连上数据库并且用户名和密码正确。
    IDE里面try{}catch{}抛出异常也是可以判断的。
      

  2.   

    SQL用户名和密码都是正确的。我主要是不知道我要实现这个功能所用的代码是否已经足够,因为之前没怎么做过这样的东西,很不熟悉
      

  3.   

    下面这个类应该可以测试出来,,换一下就能用:
    public class DBConnection {

    //数据库驱动
    private static final String DRIVER = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
    //数据库连接字符串
    private static final String URL = "jdbc:sqlserver://localhost:1433;dataBaseName=data";
    //数据库帐号
    private static final String NAME = "sa";
    //数据库密码
    private static final String PASS = "sa";

    /**
     * 得到数据库连接
     */
    public Connection getConn() throws ClassNotFoundException,SQLException{
    Class.forName(DRIVER); //注册驱动
    Connection con = DriverManager.getConnection(URL, NAME, PASS);
    return con;
    } /**
     * 释放资源
     */
    public void closeAll(Connection con,PreparedStatement pstmt,ResultSet rs){
    if(rs != null){
    try {
    rs.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }

    if(pstmt != null){
    try {
    pstmt.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }

    if(con != null){
    try {
    con.close();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }

    /**
     * 测试数据库连接
     */
    public static void main(String [] args){
    DBConnection connection = new DBConnection();
    try {
    System.out.println(connection.getConn());
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }
      

  4.   

    你上面的代码不够,基本的验证功能也没有实现完整,楼主要验证登录的用户名称,数据库的连接,sql语句的执行都有了,但是你还没有对执行之后的结果进行判断,到底是查到了,还是没有查到,并针对不同的结果进行不同的处理:
    1.信息对了,那让用登陆系统,跳转到系统的主页;
    2.信息错误,一般是再次转向登录页面,并对用户弹出提示信息,告诉用户哪儿出现了错误,是用户输入的信息不对,还是执行sql时出现了错误,这些是要告诉用户的
    这些加上了,那基本的验证功能才算是实现了但要是在实际的应用中做这个功能,这些代码还不够
    1.数据库的操作,如获取连接、获取Statement或PreparedStatement、ResultSet,以及相关对象的关闭等一般是封装到一个Java类里,如3楼的代码,也是通常说的封装一个数据库操作的工具类,当然封装的好与差,这是工作经验的问题了,当然了也不是说一定要封装,这里只是一般的开发习惯,推荐如此
    2.sql语句的执行,对其抛出的异常你一定要进行处理,并要将Exception信息在后台打印输出出来,以方便维护人员差错,使用到的相关对象一定要关闭,不管sql是否执行成功,所以应该把它放到finally中去执行,因为获取到的数据对象用完之后不关闭或放回到池中去,时间长了会造成服务器的宕机,而且查起错来相当困难,楼主上面的代码有欠考虑
    3.最好不要将你的数据库操作代码与web层的代码放到一起,这样不推荐,不管你是使用struts还是直接servlet来实现都不推荐
    4.数据操作执行完毕之后一定要返回一个结果,告诉web层的调用代码,是执行成功了,还是失败了:验证的话一般返回一个boolean值,查数据那就把查到的结果封装到对象里返回或者返回null
    5.前台jsp传递过来的参数,一般是封装到一个你自己定义的javabean对象里去的,当然你的参数比较少,直接传过去也没有什么关系,单参数多的话,一个个的写了一遍又一遍,是很麻烦的好了,我暂时就想到就这么多,希望对楼主有所帮助……
      

  5.   

    忘了说了,还有一点,最好不要使用Statement,使用PreparedStatement:
    1.PreparedStatement它的执行效率要比Statement高
    2.使用Statement时,条件查询时,你自己要手动的拼Sql,这是很危险的:(1)会使你的安全验证机制失效而直接进入系统,这是很严重的(2)让你的这个验证程序报错,虽然不影响整个应用的运行,但留着这么一个Bug总是不太好