无法比较Java中的String和SQL数据库中的String

时间:2017-05-04 18:50:20

标签: java sql jsp

我目前正在使用java编写JSP页面。我遇到的问题是我无法将字符串CNICCNICc进行比较。我基本上比较了不超过两个具有相同CNIC(社会安全号码)的条目。我编码不是那么好,所以请详细说明问题所在。

 String uname=request.getParameter("UName");
        String name=request.getParameter("Name");
        String age=request.getParameter("Age");
        String address=request.getParameter("Address");
        String CNIC=request.getParameter("CNIC");
        Class.forName("com.mysql.jdbc.Driver");
       Connection c=DriverManager.getConnection("jdbc:mysql://localhost:3306/mysql1","root", "");
       Statement s= c.createStatement();
       PreparedStatement ps=c.prepareStatement("insert into hitchhikerdetails(Uname,Name,Age,Address,CNIC) values(?,?,?,?,?)" );

       ResultSet rs=s.executeQuery("select * from hitchhikerdetails");
       ps.setString(1, uname);
       ps.setString(2, name);
       ps.setString(3, age);
       ps.setString(4, address);
       ps.setString(5, CNIC);
       String CNICc;

      rs.beforeFirst();
       while(rs.next())
       {    
           CNICc=rs.getString(5);
           //out.println(CNIC);
           //UNamec=rs.getString(1);
           if(CNIC.equals(CNICc))
           {
               pageContext.forward("Hitchhiker-error.jsp");
           }
           else
           {
               ps.executeUpdate();
                pageContext.forward("Hitchhiker-success-register.jsp");
           }
       }


    %>

3 个答案:

答案 0 :(得分:0)

您可能遇到的问题是,select *可能会返回n个结果,其中一个可能会匹配。

因此,它将运行一次更新并创建剩余时间。 您可以将其修改为:

 boolean isCNICFound = false;
 while(rs.next())
   {    


       CNICc=rs.getString(5);
       //out.println(CNIC);
       //UNamec=rs.getString(1)
           System.out.println("From Result Set : " + CNICc + " -comparing this with : " + CNIC);
           if(null != CNICc) {
               if(CNIC.equals(CNICc)) {
                  isCNICFound = true;
                   break;
                }
           }           
      }

if(isCNICFound ){
 pageContext.forward("Hitchhiker-error.jsp");
} else {
ps.executeUpdate();
                pageContext.forward("Hitchhiker-success-register.jsp");
}

答案 1 :(得分:0)

应该关闭Connection,Statement和ResultSet。为此,请自动使用try-with-resources,如下所示。

然后在SELECT *上,rs.getString(5)可能会选择错误的列(不知道列出哪些列); 或rs.getString("CNIC")或更好,再做一次查询。

同样将这些陈述分开,即使出现错误也要将其表现得很好。

forward更好的返回后,不再向浏览器写入输出。

    try (Connection c = DriverManager.getConnection(
            "jdbc:mysql://localhost:3306/mysql1", "root", "")) {

        try (Statement s = c.createStatement();
                ResultSet rs = s.executeQuery("select * from hitchhikerdetails")) {

            while (rs.next()) {
                String CNICc = rs.getString("CNIC");
                if (CNIC.equals(CNICc)) {
                    pageContext.forward("Hitchhiker-error.jsp");
                    return;
                }
            }
        }

        try (PreparedStatement ps = c.prepareStatement(
                "insert into hitchhikerdetails(Uname,Name,Age,Address,CNIC)"
                + " values(?,?,?,?,?)")) {
            ps.setString(1, uname);
            ps.setString(2, name);
            ps.setString(3, age);
            ps.setString(4, address);
            ps.setString(5, CNIC);
            ps.executeUpdate();
            pageContext.forward("Hitchhiker-success-register.jsp");
            return;
        }
    }

立即查询重复的CNIC:

        try (PreparedStatement s = c.prepareStatement(
                "select UName from hitchhikerdetails where CNIC = ?")) {
            s.setString(1, CNIC);
            try (ResultSet rs = s.executeQuery()) {
                if (rs.next()) {
                    pageContext.forward("Hitchhiker-error.jsp");
                    return;
                }
            }
        }

答案 2 :(得分:0)

事实证明我必须将列索引递增1才能使其与值正确比较。像CNICc=rs.getstring(5)指向错误的列,这是奇怪的,因为我在数据库中设置的值是相同的索引。但是,当我想显示值时,我必须使用递增的索引。比如CNICc=rs.getstring(6)