2011-04-13 106 views
1

我在Tomcat上运行以下代码并且循环无法正常工作。每次我试图检查表中的新数据,名为“enero”,条件没有正确遵守,只有第一个动作完成...结束在表中输入的重复记录。从数据库中检索数据并将新数据写入mysql

请你帮忙!

<%-- <jsp:getProperty name="beanInstanceName" property="propertyName"/> --%> 
<%@page import="java.sql.*"%> 
<% 
String REF=request.getParameter("d_ref"); 
String DATE=request.getParameter("i_date"); 
String UBC=request.getParameter("i_ubc"); 
%> 
<% 

    try 
    { 
     //Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
     //Connection connection=DriverManager.getConnection("jdbc:odbc:db1","",""); 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
     Connection connection=DriverManager.getConnection("jdbc:mysql://localhost/labacacias?user=root&password=letmein"); 
     Statement statement=connection.createStatement(); 
     String query; 
     query="SELECT * FROM enero"; 
     boolean b=false; 
     ResultSet resultSet=statement.executeQuery(query);  
     while (resultSet.next()) 
     { 

     if (REF.equals(resultSet.getString(1)) && DATE.equals(resultSet.getString(2)) && UBC.equals(resultSet.getString(3))) 

      { 
      out.println("Datos ya han sido adjuntados anteriormente!"); 
      out.println("<a href=\"EneroU.jsp\">Click Aqui para Adjuntar nuevos Resultados</a>"); 
      break;     
      }    
     if (!REF.equals(resultSet.getString(1)) && !DATE.equals(resultSet.getString(2)) && !UBC.equals(resultSet.getString(3))) 
      { 
      pageContext.forward("InsertE.jsp"); 
      break;   
      } 

     } 
    } 
    catch (Exception e) 
    { 
     //e.printStackTrace(); 
     out.println(e.toString()); 
    } 

%> 

</body> 

回答

0

检查你是否有条件。其中有很多& &。

如果第一个操作每次都完成,结果集和参数中的字符串可能会满足if条件。

+0

我应该只有一个条件吗? – Sheeyla 2011-04-13 14:35:48

+0

我只剩下一个条件,而且我输入了一个重复的值,但它仍然在桌面上创建了一个新条目....不知道还有什么要做! – Sheeyla 2011-04-13 14:40:16

+0

我的意思是根据你的逻辑。你可以使用||在你的条件。 – 2011-04-14 10:32:14

0

我不确定这是否是正确的方法。您似乎选择了表中的所有行,并逐个比较它们作为请求参数的详细信息。如果它们全部匹配,则表示数据已经存在,否则如果传入的值不匹配,则转发到其他页面。除非你的桌子只有一排,否则你会得到奇怪的结果。

什么会更有意义的是从您的表中选择col1 = REF和col2 = DATE和col3 = UBC。如果rs.next()== false,pageContext.forward(),否则out.println(“Datos ya han sido adjuntados anteriormente!”)

+0

感谢DaveHowes ....我如何确保表中的所有数据都被检查,而不仅仅是一行?所以你说while循环不正确?我如何在我的代码中加入col1 = REF和col2 = DATE和col3 = UBC?对不起,请求这么多,但我是新的这一点,我的观点是我看不到在我面前的答案...我一直在试图解决这个问题在过去的两天! – Sheeyla 2011-04-13 15:02:21

+0

DaveHowes ...这是我改变它的,但现在我得到一个语法错误...新的代码是:和错误是这样的:一个错误发生在行:31在jsp文件:/CreateE.jsp 不兼容的操作数类型的结果集和布尔 28:\t \t而(resultSet.next()) 29:\t \t { 30:\t \t 31:\t \t如果(的resultSet == FALSE)\t \t 32:\t \t \t { 33:\t \t \t pageContext.forward(“InsertE.jsp”); 34:\t \t \t} – Sheeyla 2011-04-13 15:19:11

+0

这是一个很大的话题,没有简短的答案。您需要在SQL语句中使用“WHERE”子句,并且应该考虑使用PreparedStatement将值提供给WHERE子句。网上有很多关于如何做到这一点的例子,所以谷歌可能是你的朋友。 – DaveH 2011-04-13 15:19:48