2017-10-17 6 views
0

toute aide serait grandement appréciée. Été bloqué sur cela pendant un moment et semble me confondre de plus en plus!JDBC mysql Réglage et récupération des données à partir d'une base de données

J'ai simple base de données avec une table 'VowelCount' qui a les colonnes (A, E, I, O et U) et une rangée en dessous qui stocke combien de voyelle ont été tapés par un utilisateur.

Le nombre de voyelles doit être mis à jour chaque fois que l'utilisateur entre une nouvelle phrase et ensuite les voyelles pour l'entrée actuelle, et toutes les entrées précédentes doivent être affichées.

J'ai compris comment montrer les voyelles actuelles. Mais ayant du mal à mettre à jour les données dans la table de la base de données et à les récupérer et à les stocker dans une variable pour pouvoir les ajouter au total cumulé

Si cela a du sens!

package managed_bean; 

import javax.inject.Named; 
import javax.enterprise.context.RequestScoped; 
import java.sql.*; 



@Named(value = "dataVowelBean") 
@RequestScoped 
public class dataVowelBean 
{ 
private String name; 
private int numberOfA; 
private int numberOfE; 
private int numberOfI; 
private int numberOfO; 
private int numberOfU; 
private int totalA; 
private int totalE; 
private int totalI; 
private int totalO; 
private int totalU; 




public String getName() 
{ 
    return name; 
} 

public void setName(String name) 
{ 
    this.name = name; 
    numberOfA(); 
    numberOfE(); 
    numberOfI(); 
    numberOfO(); 
    numberOfU(); 
    storeVowelsInDatabase(); 

} 

public int getNumberOfA() 
{ 
    return numberOfA; 
} 

public int getNumberOfE() 
{ 
    return numberOfE; 
} 

public int getNumberOfI() 
{ 
    return numberOfI; 
} 

public int getNumberOfO() 
{ 
    return numberOfO; 
} 

public int getNumberOfU() 
{ 
    return numberOfU; 
} 

public int getTotalOfA() 
{ 
    return totalA; 
} 

public int getTotalOfE() 
{ 
    return totalE; 
} 

public int getTotalOfI() 
{ 
    return totalI; 
} 

public int getTotalOfO() 
{ 
    return totalO; 
} 

public int getTotalOfU() 
{ 
    return totalU; 
} 



public void storeVowelsInDatabase() 
{ 
    int countA; 
    int countE; 
    int countI; 
    int countO; 
    int countU; 

try 
    { 
     DriverManager.registerDriver(new()); 
     Connection con; 
     con = DriverManager.getConnection(url, "user", "pass"); 

     PreparedStatement stmtGet = con.prepareStatement("SELECT A, E, I, O, 
     U FROM vowelCountTable"); 
     //countA = stmtGet.executeQuery(); 
     ResultSet rs = stmtGet.executeQuery(); 

     countA = (rs.getInt("A") + getNumberOfA()); 
     totalA = countA; 

     countE = (rs.getInt("E") + getNumberOfE()); 
     totalE = countE; 

     countI = (rs.getInt("I") + getNumberOfI()); 
     totalI = countI; 

     countO = (rs.getInt("O") + getNumberOfO()); 
     totalO = countO; 

     countU = (rs.getInt("U") + getNumberOfU()); 
     totalU = countU; 

     PreparedStatement stmtSet = con.prepareStatement("UPDATE 
     vowelCountTable SET A = ?, E = ?, I = ?, O = ?, U = ?"); 



    stmtSet.setInt(1, totalA); 
    stmtSet.setInt(2, totalE); 
    stmtSet.setInt(3, totalI); 
    stmtSet.setInt(4, totalO); 
    stmtSet.setInt(5, totalU); 
    stmtSet.executeUpdate(); 



     stmtSet.close(); 
     con.close(); 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 
} 

private void numberOfA() 
{ 
    for (int i = 0; i < name.length(); i++) 
    { 
     if (name.charAt(i) == 'a') 
      { 
       numberOfA++; 
      } 
    } 
} 

private void numberOfE() 
{ 
    for (int i = 0; i < name.length(); i++) 
    { 
     if (name.charAt(i) == 'e') 
      { 
       numberOfE++; 
      } 
    } 
} 

private void numberOfI() 
{ 
    for (int i = 0; i < name.length(); i++) 
    { 
     if (name.charAt(i) == 'i') 
      { 
       numberOfI++; 
      } 
    } 
} 

private void numberOfO() 
{ 
    for (int i = 0; i < name.length(); i++) 
    { 
     if (name.charAt(i) == 'o') 
      { 
       numberOfO++; 
      } 
    } 
} 

private void numberOfU() 
{ 
    for (int i = 0; i < name.length(); i++) 
    { 
     if (name.charAt(i) == 'u' || name.charAt(i) == 'U') 
      { 
       numberOfU++; 
      } 
    } 
} 

}

Voici l'écran xhtml d'entrée:

<h:head> 
    <title>Vowel Count Example</title> 
</h:head> 
<h:body> 
    <h1>This is a vowel count example</h1> 
    <h:form> 
     <h2> Please type your name in the box and I will tell you how many vowels were used: </h2> 
     <h:inputText value="#{dataVowelBean.name}" /> <p> </p> 
      <h:commandButton type="submit" value="Submit" action="databaseVowelCount" /> 
    </h:form> 
</h:body> 

est ici la sortie xhtml:

<?xml version='1.0' encoding='UTF-8' ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:h="http://xmlns.jcp.org/jsf/html"> 
<h:head> 
    <title>Vowel Count Output</title> 
</h:head> 
<h:body> 
    <h1>Vowel count output</h1> 
    <h2>You typed: <h:outputText value="#{dataVowelBean.name}" /></h2> 

    <p> The number of A's: <h:outputText value="#{dataVowelBean.numberOfA}" /></p> 
    <p> The number of E's: <h:outputText value="#{dataVowelBean.numberOfE}" /></p> 
    <p> The number of I's: <h:outputText value="#{dataVowelBean.numberOfI}" /></p> 
    <p> The number of O's: <h:outputText value="#{dataVowelBean.numberOfO}" /></p> 
    <p> The number of U's: <h:outputText value="#{dataVowelBean.numberOfU}" /></p> 

    <p> The total number of A's: <h:outputText value="#{dataVowelBean.totalOfA}" /></p> 
    <p> The total number of E's: <h:outputText value="#{dataVowelBean.totalOfE}" /></p> 
    <p> The total number of I's: <h:outputText value="#{dataVowelBean.totalOfI}" /></p> 
    <p> The total number of O's: <h:outputText value="#{dataVowelBean.totalOfO}" /></p> 
    <p> The total number of U's: <h:outputText value="#{dataVowelBean.totalOfU}" /></p> 

</h:body> 

+0

Quel genre de "problème" avez-vous? S'il vous plaît être plus précis quel problème vous rencontrez –

+0

Salut, j'ai du mal à mettre à jour la table dans la base de données et à récupérer des données. Je ne reçois aucune erreur, mais dans l'écran de sortie xhtml, le nombre total de voyelles apparaît comme '0'. J'ai même manuellement inséré un nombre de voyelle dans la table pour différentes voyelles bien qu'il montre toujours comme 0. Ainsi ne sont même pas récupérées. Je vous remercie! – RiceCrispy

Répondre

0

Vous devez appeler la méthode next() sur la variable ResultSet. Le ResultSet dans JDBC fonctionne comme une sorte de pointeur et ce pointeur commence avant le premier résultat. Puisque vous ne parcourez pas le jeu de résultats, vous obtiendrez probablement une valeur par défaut pour int, c'est-à-dire la valeur zéro.

P.S. Je suggérerais d'avoir un modèle plus simple pour votre table, comme juste vowelCountTable (lettre, compte). Vous pouvez ensuite restreindre le domaine de la colonne des lettres uniquement aux vogals.

+0

Merci. Nous avions raison et la méthode next() devait être appelée. – RiceCrispy