0

嗨,我想从 Garaz 表中选择所有记录并将其添加到 ArrayList(现在它只给我一个来自 Garaz 表的 Garaz),然后返回 ArrayList。此外,如果任何 Garaz 包含汽车(Auta),我也想列出它们 - 对于特定的 Garaz(Garaz,Auta - 波兰语名称)。

public class connection {

private static final String DB_DRIVER = "com.mysql.jdbc.Driver";
private static final String DB_CONNECTION = "jdbc:mysql://localhost/garaz";
private static final String DB_USER = "root";
private static final String DB_PASSWORD = "";
static ArrayList <Garaz> lista = new ArrayList <Garaz>();
static ArrayList <Auto> lista2 = new ArrayList <Auto>();

public static ArrayList <Garaz> selectRecords() throws SQLException {

    Connection dbConnection = null;
    Statement statement = null;

    String selectTableSQL = "SELECT * from GARAZ";


            try {
        dbConnection = getDBConnection();
        statement = dbConnection.createStatement();

        System.out.println(selectTableSQL);

        // execute select SQL stetement
        ResultSet rs = statement.executeQuery(selectTableSQL);

        while (rs.next()) {
                        int g_id = rs.getInt("G_ID");
        String nazwa = rs.getString("NAZWA");
        String adres = rs.getString("ADRES");
                        int lmiejsc = rs.getInt("LICZBAMIEJSC");
        int lpoz = rs.getInt("LICZBAPOZIOMOW");
                        boolean czynny = rs.getBoolean("CZYNNY");

            ArrayList lista2 = new ArrayList <Auto>();


        int a_id = rs.getInt("A_Id");
            String model = rs.getString("Model");
            String kolor = rs.getString("Kolor");
            int ildrzwi = rs.getInt("IloscDrzwi");
            String rejestracja = rs.getString("Rejestracja");

            Auto d = new Auto(a_id, model, kolor, ildrzwi, rejestracja);
            if (a_id !=0){
            lista2.add(d);
            }
            Garaz f = new Garaz(g_id, nazwa, lista2, adres, lmiejsc, lpoz, czynny);
            lista.add(f);
                   // return lista;
                    }

    } catch (SQLException e) {

        System.out.println(e.getMessage());

    } finally {

        if (statement != null) {
            statement.close();
        }

        if (dbConnection != null) {
            dbConnection.close();
        }

    }
    return lista;

}
4

1 回答 1

0

从以下文档java.sql.Statement

默认情况下,ResultSet每个Statement对象只能同时打开一个对象。因此,如果一个ResultSet对象的读取与另一个对象的读取交错,则每个对象都必须由不同的Statement对象生成。如果存在打开的对象,则接口中的所有执行方法Statement都会隐式关闭语句的当前对象。ResultSet

如果要执行另一条语句,在迭代 aResultSet时,您需要使用不同的Statement对象来执行该语句,否则第一个ResultSet将被关闭。

另外:您正在做的事情可以通过使用INNER JOINbetween GARAZand的单个语句轻松实现AUTA,这通常对性能更好。就像是:

SELECT * 
FROM GARAZ g
INNER JOIN AUTA a ON a.G_ID = g.G_ID

不要在语句中连接值,因为这容易受到 SQL 注入、转换问题等的影响。使用PreparedStatement带有参数的占位符。

于 2013-11-12T09:48:43.043 回答