2014-11-05 6 views
0

나는 이것에 관해서 질문을 하였지만, 이것은 조금 다릅니다.여러 명의 사용자가 동시에 데이터베이스에 액세스 할 수있게하는 좋은 방법입니까?

지금 당장 필자는 데이터베이스에서 읽거나 데이터베이스에 쓰는 쿼리를 삽입하고 변경 내용을 커밋 한 후 즉시 연결을 닫도록 프로그램을 설정했습니다. 이렇게하면 매우 짧은 시간 동안 데이터베이스를 잠글 수 있습니다. 내 데이터베이스에 H2를 사용하고 있는데 "AUTO_SERVER = TRUE"가 설정되어 있으므로 데이터베이스가 네트워크를 통해 실행될 수 있고 여러 연결을 동시에 허용 할 수 있습니다.

이제 내 딜레마가 있습니다. 어떤 이유로 사용자가 잠금 파일이있는 정확한 시간에 데이터베이스에 액세스하려고하면 어떻게 처리해야합니까? 데이터베이스가 현재 다른 사용자에 의해 잠겨 있다는 것을 알려주는 JOptionPane을 표시해야하며 다른 모든 연결이 닫혀 있는지 확인하고 다시 시도해야합니다. 그렇다면 어떤 Java 코드를 사용하여 잠금 파일이 존재하는지 (또는 단순히 데이터베이스가 실제로 잠겨 있는지)를 결정할 수 있습니까?

평상시처럼. 도움이되는 응답을 미리 보내 주셔서 감사합니다.

답변

0

H2 데몬 스레드가 다른 데몬 스레드가 들어오지 않도록하고 현재 사용중인 데이터베이스 파일을 조작하려고 시도하기 위해 잠금을 생성합니다. 자동 서버 모드를 사용하는 경우 H2 데몬 스레드는 잠금의 존재를 확인하고 잠금이있는 경우 잠금 파일에 지정된 서버에 연결을 시도합니다.

두 명의 사용자가 동일한 데이터베이스에 연결하려고하면 첫 번째 서버는 잠금을 얻고 H2 서버를 시작하고 두 번째 서버는 첫 번째 서버가 시작된 서버에 연결합니다.

체크 아웃 나는 그것이 "AUTO_SERVER = TRUE"로 설정하고, 나는 데이터베이스에 추가 시작할 때 잠금 파일을 생성했다 auto mixed mode

+0

데이터베이스에 대한 액세스가 공유 폴더를 통해 네트워크를 통해 수행되는 경우이 방법이 효과가 있습니까? – Ryan

+0

그들은 모두 동일한 IP를 사용하기 때문에, 맞습니까? – Ryan

+0

두 컴퓨터가 잠금 파일에 지정된 포트를 통해 서로 통신 할 수없는 경우 실패합니다. 두 시스템이 동일한 공유에 액세스 할 수는 있지만 서로 직접 통신 할 수는 없습니다. –

1

아마도 내가 틀렸지 만 H2베이스가 서버 모드에 있다면 잠금이없고 여러 사용자를 동시에 연결할 수 있습니다 (서버 모드와 내장 모드에 대한 데이터 소스를 구성해야합니다).

+0

에 대한 설명서를. 그런 다음 변경 내용을 적용하는 코드 줄을 추가하고 잠금 파일을 삭제하기 위해 연결을 닫는 코드 줄을 추가해야했습니다. – Ryan

+0

이 연결 문자열 구문을 사용 했습니까? jdbc : h2 : tcp : // [: ]/[] marcolopes

관련 문제