<!-- dataSource는 context.xml에 있는 name과 같아야함 -->
<!-- transaction 구간을 한번에 처리, 중복 사용을 해도 문제 생기지 않음 -->
<sql:transaction dataSource="jdbc/webshop">
<sql:query var="results" sql="select * from images where id=?">
<sql:param>${param.image}</sql:param> <!-- ?에 들어갈 변수 -->
</sql:query>
<c:set var="image" scope="page" value="${results.rows[0]}" /> <!-- 한개만 출력 -->
<c:set var="picName" scope="page" value="${image.stem}.${image.image_extension}"/>
<c:set var="average_ranking" scope="page" value="${image.average_ranking}"/>
<!-- action이 "rate"이면 rankings 와 average_ranking을 Update 한다. -->
<c:if test='${param.action == "rate"}'>
<c:set scope="page" var="newRating"
value="${(image.average_ranking * image.rankings + param.rating)/(image.rankings + 1)}" />
<c:set scope="page" var="average_ranking" value="${newRating}" />
<sql:update sql="update images set average_ranking=?, rankings=? where id=?">
<sql:param>${newRating}</sql:param> <!-- 첫번째 ?에 들어갈 변수 -->
<sql:param>${image.rankings + 1}</sql:param> <!-- 두번째 ?에 들어갈 변수 -->
<sql:param>${param.image}</sql:param> <!-- 세번째 ?에 들어갈 변수 -->
</sql:update>
</c:if>
</sql:transaction>