JDBC mysql 在数据库中设置和检索数据

JDBC mysql Setting and retrieving data from a database

如有任何帮助,我们将不胜感激。坚持了一段时间,似乎越来越迷惑自己!

我有一个简单的数据库,其中包含 table 'VowelCount' 列(A、E、I、O 和 U),下面一行存储每个元音的输入数量由用户。

每次用户输入一个新句子时需要更新元音的数量,然后是当前输入的元音,并且需要显示所有以前的输入。

我想出了如何显示当前元音的方法。但是无法将数据更新到数据库 table 并再次将其检索回来并将其存储到变量中,以便可以将其添加到 运行 总数中

如果这有任何意义!

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>

您必须对 ResultSet 变量调用 next() 方法。 JDBC 中的 ResultSet 用作一种指针,该指针在第一个结果之前开始。 由于您不遍历结果集,您可能会得到一些 int 的默认值,即零值。

P.S。我建议为您的 table 使用一个更简单的模型,例如 vowelCountTable(letter, count)。然后,您可以将字母列的域限制为仅 vogals。