如何在Java中将ResultSet转换为字符串

5

我想将结果集转换为字符串。然后,我将使用该字符串编写HTML文件。Course是一个包含courseid(字符串),name(字符串),prerequisites(字符串)的表格,连接数据库已经成功。这是我的代码和想法。您能评估我的想法或给我一些更好的解决方案吗?

private static void printRecordFromCourse() throws SQLException {
    Connection dbConnection = null;
    Statement stmt = null;
    String printSQL = "SELECT * FROM course";

    try {
        dbConnection = getDBConnection();
        stmt = dbConnection.createStatement();
                    ResultSet rs=stmt.executeQuery(printSQL);
        while(rs.next()){
            //Retrieve by column name
            String courseid  = rs.getString("courseid");
            String name = rs.getString("name");
            String prerequisites = rs.getString("prerequisites");

            String result+ = "<tr><td>"+courseid+"</td><td>"+name+"</td><td>"+prerequisites"</td></tr>";
        }
        rs.close();
    } catch (SQLException e) {
        System.out.println(e.getMessage());
    } finally {
        if (stmt != null) {
            dbConnection.close();
        }
        if (dbConnection != null) {
            dbConnection.close();
        }
    }
}

1
你在上面的代码中遇到了一些错误吗?你可以使用一个类 - Course,并使用相应的getter/setter方法来访问/更新值。 - Excel
不,我的意思是如何将结果集 rs 转换为字符串。我的程序正常工作。 - ʚïɞ Gemini ʚïɞ
https://dev59.com/hkzSa4cB1Zd3GeqPkCcd - Excel
我不建议您直接在结果集上调用toString。您应该在Course类中填充它,并在Course类中定义自定义toString,然后可以调用toString。请确保将Java标签添加到您的问题中。 - SMA
1
ResultSet不是字符串,也不像字符串。从逻辑上讲,它是一个映射数组。您需要遍历它,获取每行的列值,并对这些值进行必要的操作。 - user207421
显示剩余2条评论
2个回答

4
你可以使用ArrayList并将列存储在其中,例如:
List allRows = new ArrayList();
    while(rs.next()){
        String[] currentRow = new String[numberColumns];
        for(int i = 1;i<=numberColumns;i++){
            row[i-1]=rs.getString(i);
        }
        rows.add(row);
    }

您的ArrayList现在包含字符串数组,其中每个数组代表一行。现在,您可以将字符串数组条目简单地转换为字符串,例如使用Arrays.toString(allRows.get(i));


2
我还没有尝试你的代码,但是乍一看它似乎可行。
在设计上,我们通常希望将数据库访问与其他逻辑分离。
很可能你还要定义一个名为“Course”的类来保存这些数据并实现你的业务逻辑。例如,你可以选择在“Course”类上实现一个名为“toHtmlTableRow”的方法来生成HTML源代码。(在更复杂或高级的环境中,你可能还需要将该HTML生成功能移动到另一个类中。)类似这样:
class Course {
    String id, name, prereq;

    public Course ( String id , String name , String prereq ) {
        this.id = id;
        this.name = name;
        this.prereq = prereq;
    }

    public CharSequence toHtmlTableRow () {
        StringBuilder html = new StringBuilder();
        html.append( "<tr>\n" );
        html.append( "<td>" + this.id + "</td><td>" + this.name + "</td><td>" + this.prereq + "</td>\n" );
        html.append( "</tr>\n" );
        return html;
    }

    // Override `Object`.
    @Override
    public String toString () {
        return "Course{ " +
        "id='" + id + '\'' +
        " | name='" + name + '\'' +
        " | prereq='" + prereq + '\'' +
        " }";
    }
}

这是一个完整的工作示例应用程序。为了演示方便,我将所有内容都塞到了一个单独的.java文件中。在实际工作中,我不会这样做。
此示例使用H2数据库引擎。该示例创建了一个内存数据库,从未写入存储器,因为这只是一个示例。
请注意,在较新版本的Java中使用了try-with-resourceAutoCloseable语法,简化了使用JDBC的工作。
package com.basilbourque.example;

import java.sql.*;
import java.time.LocalDate;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;

public class DbToText {

    public static void main ( String[] args ) {
        DbToText app = new DbToText();
        app.doIt();
    }

    private void doIt () {

        try {
            Class.forName( "org.h2.Driver" );
        } catch ( ClassNotFoundException e ) {
            e.printStackTrace();
        }

        List< Course > courses = new ArrayList();

        try (
        Connection conn = DriverManager.getConnection( "jdbc:h2:mem:db_to_text" ) ;
        Statement stmt = conn.createStatement() ;
        ) {
            String sql = "CREATE TABLE course_ ( \n" +
            "  id_ VARCHAR NOT NULL PRIMARY KEY , \n" +
            "  name_ VARCHAR NOT NULL , \n" +
            "  prereq_ VARCHAR NOT NULL \n" +
            ");";
            stmt.execute( sql );

            // Insert row.
            sql = "INSERT INTO course_ ( id_ , name_ , prereq_ ) VALUES ( ? , ? , ? ) ;";
            try (
            PreparedStatement preparedStatement = conn.prepareStatement( sql ) ;
            ) {
                preparedStatement.setString( 1 , "C01" );
                preparedStatement.setString( 2 , "Course 1" );
                preparedStatement.setString( 3 , "None" );
                preparedStatement.executeUpdate();

                preparedStatement.setString( 1 , "C02" );
                preparedStatement.setString( 2 , "Course 2" );
                preparedStatement.setString( 3 , "C01" );
                preparedStatement.executeUpdate();

                preparedStatement.setString( 1 , "C03" );
                preparedStatement.setString( 2 , "Course 3" );
                preparedStatement.setString( 3 , "C02" );
                preparedStatement.executeUpdate();
            }

            // Query all.
            sql = "SELECT * FROM course_";
            try ( ResultSet rs = stmt.executeQuery( sql ) ; ) {
                while ( rs.next() ) {
                    //Retrieve by column name
                    String id = rs.getString( "id_" );
                    String name = rs.getString( "name_" );
                    String prereq = rs.getString( "prereq_" );

                    // Instantiate a `Course` object for this data.
                    Course c = new Course( id , name , prereq );
                    courses.add( c );
                }
            }
        } catch ( SQLException e ) {
            e.printStackTrace();
        }

        System.out.println( "List of courses: \n" + courses );

        System.out.println( "Courses as HTML table rows: " );
        for ( Course course : courses ) {
            System.out.println( course.toHtmlTableRow() );
        }
    }

    class Course {
        String id, name, prereq;

        public Course ( String id , String name , String prereq ) {
            this.id = id;
            this.name = name;
            this.prereq = prereq;
        }

        public CharSequence toHtmlTableRow () {
            StringBuilder html = new StringBuilder();
            html.append( "<tr>\n" );
            html.append( "<td>" + this.id + "</td><td>" + this.name + "</td><td>" + this.prereq + "</td>\n" );
            html.append( "</tr>\n" );
            return html;
        }

        // Override `Object`.
        @Override
        public String toString () {
            return "Course{ " +
            "id='" + id + '\'' +
            " | name='" + name + '\'' +
            " | prereq='" + prereq + '\'' +
            " }";
        }
    }
}

运行时。

List of courses: 
[Course{ id='C01' | name='Course 1' | prereq='None' }, Course{ id='C02' | name='Course 2' | prereq='C01' }, Course{ id='C03' | name='Course 3' | prereq='C02' }]
Courses as HTML table rows: 
<tr>
<td>C01</td><td>Course 1</td><td>None</td>
</tr>

<tr>
<td>C02</td><td>Course 2</td><td>C01</td>
</tr>

<tr>
<td>C03</td><td>Course 3</td><td>C02</td>
</tr>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接