2013-05-28 3 views
1

Сначала я покажу вам код, а затем задал несколько вопросов. у меня есть связь с базами данных класса, как это (не обращайте внимания на синтаксическую ошибку, если любой)Связь с базой данных в java

class DatabaseConnection { 
private static Connection connection = null; 
private static String driverName=""; 
private static String userName=""; 
private static String passwrod=""; 
private static String url=""; 

private DatabaseConnection() { } 

public static void createConnection() { 

    if (connection == null) { 
    // read database credentials from xml file and set values of driverName, userName, passowrd and url 

    //create connection with database and set store this connection in connection object created a class level. 
    } 
} 
public static void closeConnection1() throws Exception{ 
    if (connection != null) { 
     connection.close(); 
     connection == null 
    } 

} 

public static void closeConnection2() throws Exception{ 
    if (connection != null) { 
     connection.close(); 
    } 
} 
public void insertData(Object data) { 
    // insetData in database 
} 
} 

Я хочу знать, какая тесная связь более оптимизировать в связи с базой данных. Давайте предположим, у меня есть тестовый класс, как этот

class Test { 
public static void main(String args[]) { 
    DatabaseConnection.createConnection(); 
    DatabaseConnection.insertData(data); 
    DatabaseConnection.closeConnection2(); // we call also called close connection method within the insertData method after inserting the data 

} 
} 

После создания подключения к базе данных я вставить данные в базу данных, а затем закрыть соединение с помощью closeConnection2 метод. таким образом, соединение было закрыто, поэтому, если я хочу вставить еще какой-нибудь метод, то мне нужно воссоздать соединение с базой данных, но я не могу этого сделать, потому что объект соединения не равен нулю, а createConnection не выполнил код внутри если утверждение. Теперь, если я позвонил closeConnection1 метод закрытия соединения, то при этом мне нужно проанализировать xml файл снова для учетных данных, который не является оптимизационным решением. можете ли вы сказать мне, какой метод хорош, и если оба хуже, то, пожалуйста, скажите мне более эффективный способ создания и закрытия соединения с базой данных.

+0

Почему вы не используете пул соединений? (google: dbcp) – vikingsteve

+0

вы можете дать мне ссылку, например, используя пул соединений –

+1

Начать здесь: http://www.google.no/search?q=dbcp+example – vikingsteve

ответ

5

Я вижу две основные проблемы, связанные с этим:

  • Тот факт, что все (в том числе Connection объекта) является статическим означает, что вы никогда не можете использовать этот класс из более чем одного потока одновременно.
  • Разбор данных конфигурации и открытие соединения являются отдельными проблемами и не должны смешиваться. По крайней мере, переместить их в отдельные методы, конфигурация, вероятно, может идти даже в другом классе.

Во-вторых, во избежание одновременного разбора информации о соединении.

Еще лучше будет использовать DataSource вместо открытия соединений каждый раз. И затем используйте DataSource, который на самом деле является пулом соединений!

+0

У меня уже есть метод sperate для разбора xml и в этот метод я получаю все учетные данные и устанавливаю его в соответствующие члены данных. Я не понял, почему вы указываете модификатор доступа для членов данных. –

+0

@WaqasAli: 'static' не является модификатором доступа. Это означает, что вы всегда будете иметь только объект 'Connection'. Но если два потока попытаются взаимодействовать с базой данных одновременно, возникнет проблема. –

+0

извините, извините, его моя ошибка. Я пишу статику в качестве модификатора доступа. –

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