나는 상점, 제품 2 개의 엔티티가있는 데이터베이스를 가지고 있습니다. 모든 제품에는 그의 묘사와 상점의 이드가있는 칼럼이있어 어디에서 FK로 가져갈 수 있습니까? 상점에는 설명이있는 열도 있습니다.웹 사이트에서 PostgreSQL 데이터베이스를 읽는 효과적인 방법
내가 원하는 TreeTable 숍 목록입니다. u가 모든 상점 아래 나무를 확장 할 때이 상점에 제품 목록이 있습니다.
저는 Vaadin TreeTable을 사용하여 PostgreSQL 데이터베이스에 연결하는 JDBC 드라이버를 사용했습니다.
셀렉트 숍 (약 900 행)은 극도로 빠릅니다. 1 초 미만. 그러나 진술서를 열 때 상점 당 모든 제품을 선택하고 그것을 닫으면 내 DB가 죽습니다.
하나의 제품에 1 개의 제품이 있어도 7-11 초가 걸립니다. 그래서 개폐문이 주요한 문제라고 생각합니다.
편집 : 일반적인 상황은 한 상점에서 단 1-2 제품 만 있다는 것입니다. 더 이상은 없어.
내가 5 단계에서 수행 한 작업을 게시했습니다. 그러나 rly 코드가 필요한 경우 일부 부품을 게시합니다. JDBC의 일반적인 사용이지만, 많은 행을 가져 오거나 웹 사이트를 사용할 필요가 있는지 묻습니다. 많은 사용자. JDBC를 사용하여 신속하게 구현하는 것이 가장 좋은 방법입니다.
내 코드 :
열기 연결 :
//in db helper class
Connection conn = null;
void openConnection(){
static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost/shops";
static final String USER = "username";
static final String PASS = "password";
try{
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(DB_URL, USER, PASS);
}catch(SQLException se){
se.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
}
List<Shop> getAllShops(){
Statement stmt = null;
try{
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(sql);
while(rs.next()){
//save rs into Shop object
}
rs.close();
}catch(SQLException se){
se.printStackTrace();
}finally{
try{
if(stmt!=null)
conn.close();
}catch(SQLException se){
}
}
//method to get operations is exacly the same but im passing Shop int id into method
void closeConnection(){
if(connection != null)
conn.close();
}
//in some layout class
void createAndFillTableMethod(){
//create table
DatabaseHelper db = new DatabaseHelper();
List<Shop> ls = new ArrayList<Shop>();
ls = getAllShops();
for(Shop shop: ls){
List<Product> lp = new ArrayList<Product>();
lp = getAllProducts(shop.id);
//add shop to table
//add lp list as a childs of shop to table
}
db.closeConnection();
}
추신 : 내가 어떤 캐치를 시도 건너 뛸 수 있습니다.
좋아, 너 뭐 해봤 니? – Houari
상점 당 몇 개의 제품이 있습니까? 상점을위한 1의 1000의 줄은 전혀 빨리 소리가 나지 않는다. DB 또는 DB 전반에 대한 채널에 이미 문제가있을 수 있습니다. 글쎄 그것은 모두 데이터에 달려 있으며 매우 광범위한 질문입니다 ... – cfrick
@houari code 게시 – ilovkatie