2017-01-17 3 views
0

나는 다음과 같이 준비된 진술을 가지고 있다고 말한다.Sqlite Prepared Statement, 값을 변경하지 않거나 기존 값과 동일하게 유지 하시겠습니까? (안드로이드)

"UPDATE table1 SET column1 = ?, column2 = ? WHERE column3 = ?" 

이 문을 사용하여 column1 또는 column2의 값만 변경할 수 있습니까? 내 문제는 예제보다 조금 복잡하다고 생각할 수 있지만 기본적으로 업데이트 할 수있는 열 값 중 일부만 가져올 수 있으며 여러 가지 다양한 변수가 있으므로 각각의 경우에 대해 준비된 문을 작성하는 것이 상당히 지저분해질 수 있습니다 .

처음에는 매개 변수로 열 이름을 설정할 수 있다고 생각했지만 작동하지 않습니다. 매개 변수가 문자열로 이스케이프 처리되기 때문에 의심 스럽습니다.

하위 쿼리가 작동한다고 상상해 봅니다. 그러나 이것은 각 사례에 대한 진술을하는 것보다 프로그래밍 방식으로 달성하는 것이 더 효과적이고 이해하기 어려울 것입니다.

내 선택은 무엇입니까? 감사!

+0

달성하고자하는 것은 무엇입니까? 테이블의 일부 열을 업데이트하는 경우 위의 예가 작동합니다. – Dibzmania

+0

나는 테이블의 열을 업데이트하는 방법을 알고 있으며,이 작품은 이미 알고 있지만 구체적으로 준비된 명령문에 명시된 열 중 하나 이상을 남겨 둘 수 있다면 궁금하다. 그래서 원본 값을 그대로 유지한다. DB. – hamham

답변

1

매개 변수를 사용하는 경우 매개 변수 값은 리터럴 값입니다. 즉, 매개 변수 값은 어떠한 방식으로도 실행되거나 해석되지 않습니다.

이 명령문에 이전 값을 가져 오는 유일한 방법은 별도의 쿼리로 값을 읽은 다음 해당 쿼리의 결과를 매개 변수 값으로 사용하는 것입니다.

SQLite는 클라이언트/서버 데이터베이스가 아니므로 명령문 준비에 큰 오버 헤드가 없습니다. 준비된 문장을 여러 개 사용하거나 간단하게 항상 즉시 작성하십시오.

+0

감사합니다. 참으로 나는 이것이 사실 일 것이라고 생각했습니다. 나는 대신 많은 준비된 진술을 선택했습니다. 어쨌든 일부 서버 API 불일치 때문에이 작업을 수행해야합니다. 일단 다림질 한 번 더 정리하면 더 정리할 수 있습니다. 귀하의 회신에 감사드립니다. – hamham