您好我想从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;
}
答案 0 :(得分:0)
来自java.sql.Statement
的文档:
默认情况下,每个
ResultSet
对象只能同时打开一个Statement
个对象。因此,如果一个ResultSet
对象的读取与另一个Statement
对象的读取交错,则每个对象必须由不同的Statement
对象生成。ResultSet
接口中的所有执行方法都会隐式关闭一个语句的当前ResultSet
对象(如果存在开放的对象)。
如果要执行另一个语句,在迭代Statement
时,需要使用不同的ResultSet
对象来执行该语句,否则将关闭第一个INNER JOIN
。
另外:使用GARAZ
和AUTA
之间SELECT *
FROM GARAZ g
INNER JOIN AUTA a ON a.G_ID = g.G_ID
的单个语句可以轻松实现您正在做的事情,这通常会提高性能。类似的东西:
PreparedStatement
不要在语句中连接值,因为它容易受到SQL注入,转换问题等的影响。请使用带参数占位符的{{1}}。