2017-10-17 5 views
0

何か助けがあれば幸いです。これにしばらくお待ちしており、ますます混乱しているようです。JDBC mysqlデータベースからのデータの設定と取得

私は列(A、E、I、O、U)と各母音の数がユーザーによって入力された1つの行を持つテーブル 'VowelCount'を持つ単純なデータベースを持っています。

母音の数は、ユーザーが新しい文章を入力した後、現在の入力の母音とその前のすべての入力を表示する必要があるたびに更新する必要があります。

現在の母音をどのように表示するかを考えました。しかし、データベーステーブルにデータを更新して再度検索し、それを変数に格納して実行中の合計に追加することができない場合

これは意味があるのですか?ここ

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++; 
      } 
    } 
} 

}

入力XHTML画面である:ここ

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

は、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

どのような「トラブル」がありますか?何が問題になっていますか –

+0

こんにちは、私はデータベースのテーブルを更新し、そこからデータを取得するのに問題があります。 xhtml出力画面で、母音の総数が「0」と表示されますが、エラーは表示されません。 私は手動で母音を別の母音のためにテーブルに挿入しましたが、母音はまだ0として表示されます。ありがとうございました! – RiceCrispy

答えて

0

ResultSet変数でnext()メソッドを呼び出す必要があります。 JDBCのResultSetは一種のポインタとして機能し、このポインタは最初の結果の前に開始します。 結果セットを反復処理しないので、intのデフォルト値を取得している可能性があります。これは値ゼロです。

P.S. vowelCountTable(letter、count)のように、テーブルのモデルを単純化することをお勧めします。文字列のドメインをvogalsに制限することができます。

+0

ありがとうございます。正しいもので、next()メソッドを呼び出す必要がありました。 – RiceCrispy

関連する問題