У меня есть база данных с двумя объектами: Магазины, Продукты. Каждый продукт получил несколько столбцов с описанием и идентификатором магазина, где вы можете получить его как FK. В магазинах также есть колонки с описанием.Эффективный способ чтения из базы данных PostgreSQL на сайте
Я хочу список магазинов TreeTable. Когда u будет развернуть дерево под каждым магазином, у вас будет список продуктов в этом магазине.
Как я сказал им, используя драйвер Vaadin TreeTable, JDBC для подключения к базе данных PostgreSQL.
Выбор магазинов (около 900 строк) является экстремальным быстро. Менее 1 с. Однако открытие заявления, выбирая все продукты в магазине и закрывая его, убивает мою БД.
Страница загружается 7-11 s даже если у меня будет 1 продукт в одном магазине. Поэтому я предполагаю, что заявление о закрытии и закрытии является основной проблемой.
EDIT: общая ситуация в том, что в одном магазине есть только 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
Сколько продуктов в магазине? 1000 строк в 1s для магазинов не звучат быстро. Возможно, уже возникла проблема с вашим каналом в БД или в вашей БД в целом. Ну, все зависит от данных, и это очень широкий вопрос ... – cfrick
@houari code – ilovkatie