2013-05-26 2 views
3

내가 넷빈즈를 사용하여 내장 데이터베이스를 생성하고 데이터를 추가했습니다. 그래서 지금은 데이터베이스를 쿼리하려는 코드가 원활하게 실행되지만 데이터를 표시하지 않습니다. 여기 내 코드는 다음과 같습니다.질의 임베디드 데이터베이스는 더비

import java.sql.*; 
public class EmbeddedDB 
{ 

public static void main(String[] args) 
{ 
    Connection con = null; 
    Statement st = null; 
    ResultSet rs = null; 
    try 
    { 
     Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); 
     con = DriverManager.getConnection("jdbc:derby:CustDB;create=true", "app", "app"); 
     System.out.println("connected"); 
     st = con.createStatement(); 
     System.out.println("statement created"); 

     rs = st.executeQuery("select * from APP.TABLEX"); 
     System.out.println("retrieving ..."); 
     System.out.println(rs.getString(1)); 

    } 
    catch(ClassNotFoundException | SQLException c) 
    { 
    } 
} 
} 

그래서 무엇이 문제입니까? 데이터베이스가 임베디드 모드로 작성되었습니다.

+0

데이터를 추가 한 CustDB 데이터베이스가이 기본 메소드가 실행될 때 클래스 경로에있는 것과 동일한 지 확인하십시오. – Tap

+0

@Tap, 예. 코드를 작성하기 전에 CustDB를 작성했습니다. –

+0

그래도 파일 시스템에서 CustDB를 검색합니다. 두 번 나타나면 프로그램이 새로운 빈 데이터베이스를 만들었습니다. – Tap

답변

3

이 데이터베이스는 넷빈즈 서비스에서 볼 수 있어야합니다, I have created an embedded database ... and added data to it.

따라서 우리에게 말했다.

enter image description here

NO ;create=true!
당신은 당신이 속성에서 볼 수있는 동일한 URL로 연결해야합니다. 아무것도 더.
데이터베이스 URL을 확장하거나 하단을보십시오.

enter image description here

더비 응용 프로그램의 JVM (자바 가상 머신) 내에서 실행되는 임베디드 모드에서
con = DriverManager.getConnection("jdbc:derby:C:/Dokumente und Einstellungen/Administrator/.netbeans-derby/sample","app","app"); 

. 이 모드에서는 응용 프로그램 만 데이터베이스에 액세스 할 수 있습니다. 다른 사용자/응용 프로그램은 데이터베이스에 액세스 할 수 없습니다. 데이터베이스를 액세서 수

하나의 응용 프로그램.
그래서, 넷빈즈 서비스에 당신이 당신의 응용 프로그램에 연결하고자하는 데이터베이스를 분리합니다.

+0

괜찮아요.하지만 배포 용으로 패키지하기 때문에 다른 시스템에서 실행할 수는 없습니다. –

0
나 자신이 일을 작동 할 수 있도록 노력 시간 동안 손실 약간 발견하기 때문에 나는 이전의 대답에 중요한 설명을 추가 하시겠습니까

. 제 요점은 Netbeans 서비스 탭이 내장 된 Derby 데이터베이스와 어떻게 작동하는지 이해하는 것입니다. 사용하는 경우 :

con = DriverManager.getConnection("jdbc:derby:CustDB;create=true", "app", "app"); 

그것은 당신의 넷빈즈 프로젝트와 같은 디렉토리에 데이터베이스를 만듭니다. 당신은 디렉토리 경로를 추가하여이 동작을 변경할 수 있습니다 : 당신이 당신의 프로그램을 실행할 때

jdbc:derby:directory_path/CustDB;create=true 

는 그래서 지정된 경로에서 데이터베이스를 생성합니다. 이 서비스 탭에 포함 된 데이터베이스에 대한 연결을 만들 때

지금, 당신은 기존 데이터베이스에 연결하거나 새로 만들 수 있습니다. 당신이

jdbc:derby:CustDB;create=true 

와 함께 첫 번째 게시물에서 처음으로 코드를 실행하면 당신은 프로젝트의 디렉토리 경로에서 데이터베이스를 만들

: 나는 녹색의 예제를 사용하는거야. 서비스 탭에서이 데이터베이스를 편집하려면 내장 데이터베이스에 대한 새 연결을 만들어야합니다. CustDB라는 이름, 동일한 사용자 app 및 동일한 암호 app을 사용해야합니다.

여기에서 매우 중요한 것은 URL 필드에서 연결을 만들 때 사용해야하는 창에, 그래서 URL에서 프로젝트의 디렉토리 경로를 사용하는 것입니다 : 이제

jdbc:derby:directory_path_of_the_project/CustDB; 

을 요 눌러 테스트하는 경우 연결 버튼, 모든게 잘되어야합니다.

여기에서 프로젝트의 디렉터리 경로를 사용하지 않고 create=true을 사용하면 같은 이름, 동일한 사용자 및 암호이지만 다른 위치에 다른 데이터베이스가 생성됩니다. 나중에 코드에서 데이터베이스를 변경하고 서비스 탭의 데이터베이스에서 해당 데이터베이스를 볼 수 없습니다.

관련 문제