2016-03-16 2 views
2

Вот мой код:Глобальное поле в методе Java

public void actionPerformed(ActionEvent e) 
{ 
JButton source = (JButton)e.getSource(); 
if(source == buttonShop) 
{ 
try 
{ 
Connection myConn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database?autoReconnect=true&useSSL=false", "xxx", "xxx"); 
Statement myStmt = myConn.createStatement();    
ResultSet myRs1 = myStmt.executeQuery("select * from shop"); 

while(myRs1.next()) 
{ 
shop += myRs1.getString("ID_SHOP")+" "+myRs1.getString("NAME")+" "+myRs1.getString("ADRESS")+" "+myRs1.getString("PHONE")+"\n"; 
}  
}catch(Exception exc){ 
exc.printStackTrace(); 
}; 
notifyObserver1(); 
shop = ""; 
} 
else if(source == buttonEmployee) 
{ 
try 
{ 
Connection myConn = DriverManager.getConnection("jdbc:mysql://localhost:3306/database?autoReconnect=true&useSSL=false", "xxx", "xxx"); 
Statement myStmt = myConn.createStatement();    
ResultSet myRs2 = myStmt.executeQuery("select * from employee"); 

while(myRs2.next()) 
{ 
employee += myRs2.getString("ID_EMPLOYEE")+" "+myRs2.getString("ID_SHOP")+" "+myRs2.getString("NAME")+" "+myRs2.getString("SURNAME")+"\n"; 
}  
}catch(Exception exc){ 
exc.printStackTrace(); 
}; 
notifyObserver2(); 
employee = ""; 
} 
} 

Это приложение базы данных. Я не хочу копировать-вставлять все соединения myConn = ... и Statement myStmt = ... на все источники кнопок. Как сделать его «глобальным», чтобы быть видимым из действияПереформированный метод?

+0

Именно поэтому у java есть методы – ControlAltDel

+3

Ознакомьтесь с концепцией, называемой пулом соединений. –

+0

@MichaelGantman Да, действительно очень хорошее предложение. – user2004685

ответ

0

Сначала у вас должна быть служебная программа Db сказать класс «DBUtil», по крайней мере, с методом getConnection. Это getConnection должно создать соединение или вернуть его из пула в зависимости от вашей реализации.

DBUtil Class: 
static Connection getConnection() 

После этого создать два вспомогательных методов для обработки обоих сценариев, что-то вроде:

getEmployeeDetails(){} 
getShopDetails(){} 

Внутри этих методов вы должны в идеале использовать:

try(Connection conn = DBUtil.getConnection(); 
    PreparedStatement st = conn.prepareStatement("Your Qry"); 
    ResultSet rs = st.executeQuery()){ 

    // Do Something 

} 

Некоторые хорошие моменты:

  1. Использование PreparedStateme nts
  2. Использование Попробуйте использовать ресурс, чтобы предотвратить утечку ресурсов или вручную обработать его.
  3. Как хорошая практика, создайте, инициализируйте и закройте ресурс в рамках одного метода. Вы не должны передавать ресурсы другим методам обработки, этот тип дизайна может привести к серьезным проблемам утечки.

Вы также можете сделать один обобщенный метод, передать строку запроса этому, выполнить некоторую условную обработку и затем вернуть конечный результат вызывающему. Этот обобщенный метод будет обрабатывать db-связь.

+0

Ответит ли это на ваш вопрос @ Марии? – nickspol

Смежные вопросы