JDBC从表中选择所有记录,仅返回1

时间:2013-11-12 09:37:20

标签: mysql jdbc

您好我想从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;

}

1 个答案:

答案 0 :(得分:0)

来自java.sql.Statement的文档:

  

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

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

另外:使用GARAZAUTA之间SELECT * FROM GARAZ g INNER JOIN AUTA a ON a.G_ID = g.G_ID 的单个语句可以轻松实现您正在做的事情,这通常会提高性能。类似的东西:

PreparedStatement

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