JSP для цикла с результатами базы данных

Я использую JSP для приложения для колледжа. В соответствии с JSP существует подключение к базе данных, из которой я должен получить информацию и отобразить ее в раскрывающемся списке, чтобы пользователь мог выбрать один вариант, чтобы продолжить регистрационную форму. Я могу без проблем подключиться к БД и вывести информацию в раскрывающемся списке, но он получает только самую первую строку, которая была введена в базу данных.

String[] course_codes = dbclass.SelectRow("SELECT DISTINCT Course_code FROM Stream ;");
                %><form action="successtwo.jsp">
                    <label>Select Course code</label> 
                    <select name="stream">
                         <%for(String course_code: course_codes){
                         out.println("<option value="+course_code+">"+course_code+"</option>");
}%>
                   </select><br>

Так что я сделал что-то вроде этого, но я также сделал это.

String[] course_codes = dbclass.SelectRow("SELECT DISTINCT Course_code FROM Stream ;");
                %><form action="successtwo.jsp">
                    <label>Select Course code</label> 
                    <select name="stream">
                         <%for(String course_code: course_codes){%>

                       <option value="<%=course_code%>"><%=course_code%></option> 

                           <%}%>
                   </select><br>

В базе данных есть более одного Course_code, а также может появиться один и тот же Course_code, поэтому я использую разные. Вот dbClass.java, где находится метод SelectRow.

 public String[] SelectRow(String SQLquery)
{
    String Result[];
    // Send an SQL query to a database and return the *single column* result in an array of strings
    try {// Make connection to database
        statementObject = connectionObject.createStatement();

        ResultSet statementResult = statementObject.executeQuery(SQLquery); //Should connection be left open?

        ResultSetMetaData rsmd = statementResult.getMetaData();
        int nrOfColumns = rsmd.getColumnCount();

        Result = new String[nrOfColumns];

        statementResult.next();

        int currentCounter = 0;

        while (currentCounter<nrOfColumns) // While there are rows to process
        {
            // Get the first cell in the current row
            Result[currentCounter] = statementResult.getString(currentCounter+1);
            currentCounter++;

        }
        // Close the link to the database when finished

    } catch (Exception e) {
        System.err.println("Select problems with SQL " + SQLquery);
        System.err.println("Select problem is " + e.getMessage());
        Result = new String[0]; //Need to setup result array to avoid initialisation error
        writeLogSQL(SQLquery + " caused error " + e.getMessage());
        }
    writeLogSQL(SQLquery + "worked ");
    return Result;
} // End SelectRow

Любые идеи?


person SirLarryBot    schedule 17.02.2015    source источник


Ответы (2)


public String[] SelectColumn(String SQLquery)
{
    String Result[];
    // Send an SQL query to a database and return the *single column* result in an array of strings
    try {// Make connection to database
        statementObject = connectionObject.createStatement(); //Should connection be left open?

        ResultSet statementResult = statementObject.executeQuery(SQLquery);

        // Start solution from http://www.coderanch.com/t/303346/JDBC/java/find-number-rows-resultset
        int rowcount = 0;
        if (statementResult.last()) {
            rowcount = statementResult.getRow();
            statementResult.beforeFirst(); // not rs.first() because the rs.next() below will move on, missing the first element
            }
        // End solution from http://www.coderanch.com/t/303346/JDBC/java/find-number-rows-resultset

        Result = new String[rowcount];

        int currentCounter = 0;

        while (statementResult.next()) // While there are rows to process
        {
            // Get the first cell in the current row
            Result[currentCounter] = statementResult.getString(1);
            currentCounter++;

        }
        // Close the link to the database when finished
    } catch (Exception e) {
        System.err.println("Select problems with SQL " + SQLquery);
        System.err.println("Select problem is " + e.getMessage());
        Result = new String[0]; //Need to setup result array to avoid initialisation error
        writeLogSQL(SQLquery + " caused error " + e.getMessage());
        }
    writeLogSQL(SQLquery + "worked ");
    return Result;
} // End Select

Это сработало...

person SirLarryBot    schedule 17.02.2015

Используйте resultSet.next(), чтобы переместить набор результатов в следующую строку.

Чтобы пройти через результирующий набор, вы можете использовать что-то вроде этого

while (rs.next()) {
    Result[currentCounter] = statementResult.getString("columnName");
}

Вот пример http://docs.oracle.com/javase/tutorial/jdbc/basics/retrieving.html

person Paul John    schedule 17.02.2015
comment
Ваш ответ работал для другой части, но я нашел причину, по которой это не сработает. Я получал строку, когда хотел столбец. вот код столбца. Тем не менее спасибо :-) - person SirLarryBot; 17.02.2015