2014-06-19 8 views
-2

업데이트를 실행 중이고 getter에서 반환 된 값을 내 테이블에 삽입하려고합니다.JDBC에서 getter를 호출하려면 어떻게해야합니까?

statement.executeUpdate("INSERT INTO my_table " + 
      "VALUES(myClass.getValue(), 'abcd',now())"); 

디버깅을 시도했으며 String 값과 datetime이 올바르게 실행됩니다. 그러나 그것은 내가 getter에게 전화 할 때 예외를 준다. 그것이 나타내는 세부 메시지는 FUNCTION myClass.getValue가 존재하지 않습니다.

내 수입품이 주문되었습니다. 어떤 아이디어?

+3

'PreparedStatement'를 사용하고'set' 메소드를 사용하십시오. –

답변

3
statement.executeUpdate("INSERT INTO my_table " + "VALUES("+myClass.getValue() + ", 'abcd',now())"); 
귀하의 GET-호출이 때문에 ' "'없는 문자열로 해석되었다

. 이 prepared statements를 살펴 보자, 그들은 읽고 사용하기 쉬운 그리고 당신은 투쟁하지 않아도 이러한 문제

준비된 문 버전 (그들은 preventing SQL Injection이다 또한 훨씬 더 안전하기 때문). 이것은 당신이 실행하려는 SQL입니다

PreparedStatement pst = yourconnection.prepareStatement("INSERT INTO my_table VALUES(?,?,now())"; 
pst.setString(1,myClass.getValue()); 
pst.setString(2,"abcd"); 
pst.executeUpdate(); 
+2

OP에 SQL 인젝션을 피하기 위해 준비된 문장을 사용하도록 촉구하십시오! –

+1

고마워. 도움이 된 – sidds224

0

문자열이 아닌 myClass 개체에 대한 메서드 호출을 만들어야합니다. 문자열은 실행되지 않으며, 코드가 아니라 단지 단어입니다.

statement.executeUpdate("INSERT INTO my_table VALUES(" + myClass.getValue() + ", 'abcd',now())"); 
1

.

INSERT INTO my_table VALUES(myClass.getValue(), 'abcd',now()) 

당신은 그것을 실행하기위한 위해 executeUpdate 방법에 유효한 SQL을 통과해야합니다. Java는 변수와 메소드 호출을 문자열로 보간하지 않습니다. 값을 executeUpdate에 전달하는 SQL 문자열에 연결하거나 대신 Prepared Statements을 사용해야합니다.

0

내가 어떻게 다른 답변 당신을 보여주지 않았기 때문에 준비된 문으로 그것을 수행하는 방법을 보여 드리겠습니다 :

PreparedStatement prepStmt = con.prepareStatement("INSERT INTO my_table VALUES(? , 'abcd',now())")); 
prepStmt.setString(1, myClass.getValue()); 
prepStmt.executeUpdate(); 

을 주목 ?. Java 호출이 myClass.getValue()으로 바뀝니다.

SQL 문자열을 연결하지 마십시오.

관련 문제