2016-09-08 4 views
-2

문자열이 포함 된 sqlite 데이터베이스가 있습니다. 내 javafx 인터페이스에서 해당 문자열을 읽고있다. 모든 것이 순조롭게 진행되고 있지만 문제는 아포스트로피로 문자열을 읽으려고 할 때입니다. 내가 질문 문자열을 반환하고 라벨 gui.question에 추가 할 수있는 쿼리를 peform받는 위의 코드에서아포스트로피가있는 Sqlite 텍스트 읽기

String sql = "select * from Questions where Subject = ? and Grade = ? and Level = ? and questionId = ?"; 
PreparedStatement pst = gui.connectionQuestions.prepareStatement(sql); 
pst.setString(1,gui.textSubjectQTest); 
pst.setString(2,gui.showGradeLabel.getText()); 
pst.setString(3,gui.showCurrentLevelLabel.getText()) 
pst.setString(4,list.get(counter)); 
ResultSet rs = pst.executeQuery(); 
if(rs.next()) 
{ 
     String temp = rs.getString("Question"); 
     gui.question.setText(temp); 
     ... 
     sql = "Update Questions set Used ='"+1+"' where Question = '"+gui.question.getText().replaceAll("'", "/'")+"'"; 
     pst = gui.connectionQuestions.prepareStatement(sql); 
     pst.execute(); 

: 문자열을 읽어 내 코드는 다음과 같다. 그러나 아포스트로피에 나는 다음과 같은 오류가 발생하고 인해 (I 인해 마지막 줄에 오류가 발생했습니다) :

[SQLITE_ERROR] SQL 오류 또는 누락 된 데이터베이스 (근처 "(": 구문 오류)

. 나는이 방식이 작동 이중 아포스트로피를 사용하여 문자를 탈출을 시도하지만 내 문자열을 변경합니다?.

는 그러나 나는 내 확률값은 아직도 내가 아포스트로피와 함께 일을 해결할 수있는 방법 남아 솔루션 from here을 따라

수정을 시도 아포스트로피를 두 배로하는 것은 유용하지 않습니다.

+2

어디서 오류가 발생하며 여기에 어떤 값이 있습니까? –

+0

내 질문을 편집 할 때 pst.execute(); 오류가 발생했습니다. – konstantin

+1

아 - 전에 전혀 게시하지 않은 코드입니다. 그렇습니다. 매개 변수화 된 SQL을 사용해야합니다. 항상 * 알 수없는 값을 SQL 문자열에 직접 포함하는 대신 매개 변수화 된 SQL을 사용하십시오. 첫 번째 쿼리에 대해 매개 변수화 된 SQL을 사용하는 이유는 확실하지 않지만 두 번째 쿼리에 대해서는 중지해야합니다 ... –

답변

1

인용 부호 또는 아포스트로피 문자는 doubling it으로 이스케이프됩니다.

현재 if (temp.contains("'"))은 필요하지 않습니다.

+0

이중 어포 스트로피가 작동하지만 질문은 수학 질문이므로이 질문은 저의 재앙입니다. 질문들. 아포스트로피는 파생 상품입니다. – konstantin

+0

@ konstantin 죄송합니다. 원래 질문을 너무 빨리 읽고 문제를 오해 한 것 같습니다. 나중에 다시 시도하겠습니다. BTW 나는 귀하의 질문에 의견에 요청 정보를 제공하는 것이 좋습니다. – SantiBailors

+0

@ konstantin 귀하의 코드 예제에 혼란스러워합니다. SQL 문을 작성할 때 인용 부호를 이스케이프 처리해야합니다. 대신에 SQL이 생성되고 실행 된 후 _ 탈출하고 있습니다. 따라서 나는 도망 치는 코드에 대한 도피 또는 다른 변경이 SQL의 실행에 어떻게 영향을 미칠 수 있는지 알지 못합니다. 이스케이프 된 문자열은 GUI 필드를 설정하는 데만 사용됩니다. 당신은 정말로 당신의 질문에 코멘트에 질문 된 정보를 추가해야합니다. – SantiBailors

관련 문제