2011-04-13 4 views
1

J'ai le code suivant sur Tomcat et la boucle ne fonctionne pas. Chaque fois que j'essaie de vérifier de nouvelles données dans la table appelée "enero", les conditions ne sont pas suivies correctement et seule la première action est terminée ... se terminant par des doublons des enregistrements entrés dans la table.Récupération des données de la base de données et écriture de nouvelles données dans mysql

Pouvez-vous aider s'il vous plaît!

<%-- <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> 

Répondre

0

Vérifiez la condition. Il y a beaucoup de & & dedans.

Si la première action est terminée chaque fois qu'il y a une possibilité que les chaînes du jeu de résultats et des paramètres remplissent la condition if.

+0

devrais-je avoir une seule condition? – Sheeyla

+0

Je n'ai laissé qu'une seule condition, et j'entre une valeur en double, mais il crée toujours une nouvelle entrée sur la table ... je ne sais pas quoi faire d'autre! – Sheeyla

+0

Je veux dire que selon votre logique. vous pouvez utiliser || dans votre condition si. –

0

Je ne suis pas sûr que ce soit la bonne approche ici. Vous semblez sélectionner toutes les lignes de la table et les comparer une à la fois aux détails à venir en tant que paramètres de demande. Si elles correspondent toutes, vous dites que les données existent déjà, sinon si les valeurs transmises ne correspondent pas vous redirigez vers une autre page. À moins que votre table ne comporte qu'une seule ligne, vous obtiendrez des résultats étranges.

Ce qui aurait plus de sens serait de sélectionner dans votre table où col1 = REF et col2 = DATE et col3 = UBC. Si rs.next() == false, pageContext.forward(), sinon out.println ("Datos ya han sido adjuntados anteriormente!")

+0

Merci DaveHowes .... comment est-ce que je m'assure que toutes les données dans la table sont vérifiées et pas seulement une rangée? alors vous dites que la boucle while est incorrecte? comment puis-je incorporer col1 = REF et col2 = DATE et col3 = UBC dans mon code? désolé de demander autant, mais je suis nouveau sur ce point et je suis le point que je ne peux pas voir la réponse en face de moi ... J'ai essayé de résoudre ce problème au cours des 2 derniers jours! – Sheeyla

+0

DaveHowes ... c'est ce que j'ai changé, mais maintenant je reçois une erreur de syntaxe ... le nouveau code est: et l'erreur est la suivante: Une erreur est survenue à la ligne: 31 dans le fichier jsp: /CreateE.jsp incompatibles types d'opérandes ResultSet et booléen 28: \t \t while (resultSet.next()) 29: \t \t { 30: \t \t 31: \t \t if (resultSet == false) \t \t 32: \t \t \t { 33: \t \t \t pageContext.forward ("InsertE.jsp"); 34: \t \t \t} – Sheeyla

+0

C'est un grand sujet sans réponse courte. Vous avez besoin d'une clause "WHERE" dans votre instruction SQL et vous devez envisager d'utiliser PreparedStatement pour fournir les valeurs à la clause WHERE. Il y a beaucoup d'exemples sur le web pour savoir comment faire cela, donc Google est probablement votre ami ici. – DaveH

Questions connexes