2013-03-18 4 views
0

postgresql을 java에 연결할 수있었습니다. 사용자가 java의 텍스트 상자에 이름을 입력하고 검색을 수행하고 이름이 데이터베이스에 있는지 확인합니다. 지금까지postgreSQL에서 검색

내 코드 : 나는 테이블 hostdetails에 연결하는 문제가 무엇입니까

String hostname=this.hostNameText.getText(); 
try 
{ 
s = connection.createStatement(); 
String q="SELECT * FROM hostdetails WHERE \"HOSTNAME\" = "+hostname; 

rs = s.executeQuery(q); 
}catch(Exception e) 
{ 
System.out.println("Problem in searching the database 1"); 
} 

. hostdetails에는 HOSTNAME이라는 이름의 필드가 들어 있습니다 (대문자로 표시). 위 코드를 실행하면 "데이터베이스 1 검색 중 문제점"이 표시됩니다. 친절하게 도와주세요 :)

+1

e.printstackTrace()를 사용하고 stacktrace를 사용하십시오. –

+0

또한, PostgreSQL에는 식별자의 [case] (http://stackoverflow.com/questions/2878248/postgresql-naming-conventions/2878408#2878408)의 특정 처리가 있음을 기억하십시오. 혼동을 피하기 위해 식별자 (테이블과 필드 이름)에 소문자를 사용하는 것이 가장 좋습니다. – leonbloy

답변

-1

SQL 인젝션으로부터 보호하기 위해 매개 변수가있는 쿼리를 사용해보십시오. 다음과 같이 사용하십시오.

String hostname=this.hostNameText.getText(); 
try 
{ 
String q="SELECT * FROM hostdetails WHERE \"HOSTNAME\" = ?"; //notice change here 

//and use params like this 
PreparedStatement pStmnt = connection.prepareStatement(q); 
pStmnt.setString(1, hostname); 

rs = pStmnt.executeQuery(q); 
}catch(Exception e) 
{ 
//error handling here 
} 
+0

PostgreSQL에서 열 이름에 대문자를 포함하려면 큰 따옴표가 필요합니다. 만약 당신이 나를 위해 downvoted, 제발 친절하게 downvote를 제거하고 PostgreSQL을 명명 규칙을 읽어 보시기 바랍니다. 실제로, 당신의 방법에 당신을 시작할 포스트는 여기에서있다 : http://stackoverflow.com/questions/6331504/omitting-the-double-quote-to-do-query-on-postgresql –

관련 문제