2017-10-17 320 views
0

任何帮助,将不胜感激。一直坚持这一点,似乎越来越混淆了我自己!JDBC MySQL的设置和检索数据从数据库

我有一个简单的数据库与表'VowelCount',它有列(A,E,I,O和U)和一行下面存储每个元音已被用户键入了多少。

元音的数量,需要每个用户输入新的句子,然后元音当前输入的时间进行更新,所有以前的输入需要显示。

我已经找到了如何显示当前元音。但有麻烦的数据更新到数据库表,然后再返回取回并存入一个变量,以便它可以被添加到正在运行的总

如果让任何意义!

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

Thankyou。没错,需要调用next()方法。 – RiceCrispy