This post helps you understand how to use the <sql:query> tag in the JSTL SQL tags library with code example.
You know, the <sql:query> tag executes a SQL query and stores the query result in the scoped variable.
<sql:query
var="<string>"
scope="<string>"
sql="<string>"
dataSource="<string>"
startRow="<string>"
maxRows="<string>"/>
Name | Required | Description |
var | True | Name of the variable to store the query result. This variable is of type javax.servlet.jsp.jstl.sql.Result. |
scope | False | Scope of the var to be placed in. |
sql | False | SQL query to execute. |
dataSource | False | Datasource relative path in the JNDI tree. |
startRow | False | Starting index to show the results. If specified, the results from the index specified here will be displayed. |
maxRows | False | The maximum number of rows to be fetched from the query. |
The following JSP code retrieves the records from the citizens table and shows them in tabular form.
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title><sql:query> Demo</title> </head> <body> <h1><sql:query> Demo</h1> <sql:setDataSource var="myDS" driver="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/test" user="root" password=""/> <sql:query dataSource="${myDS}" var="citizens"> SELECT * from citizens; </sql:query> <table border="1"> <c:forEach var="row" items="${citizens.rows}"> <tr> <td><c:out value="${row.ssn}"/></td> <td><c:out value="${row.first_name}"/></td> <td><c:out value="${row.last_name}"/></td> <td><c:out value="${row.address}"/></td> <td><c:out value="${row.telephone}"/></td> </tr> </c:forEach> </table> </body> </html>
The following snippet is the MySQL database sample table and sample data used for the above query.
CREATE TABLE IF NOT EXISTS citizens ( ssn VARCHAR(10), first_name VARCHAR(30), last_name VARCHAR(30), address VARCHAR(255), telephone VARCHAR(20) ) engine=InnoDB DEFAULT CHARSET=utf8; INSERT INTO citizens (ssn, first_name, last_name, address, telephone) values('Z345T','Cheryl','Johnson','1502 West, MA, USA','990-008-1234'); INSERT INTO citizens (ssn, first_name, last_name, address, telephone) values('Z446T','John','Smith','1502 Coast Way, CA, USA','123-678-7786'); INSERT INTO citizens (ssn, first_name, last_name, address, telephone) values('Z335T','Justin','Claire','889 Park Ave, GA, USA','430-048-4264'); INSERT INTO citizens (ssn, first_name, last_name, address, telephone) values('Z389T','Clark','Rick','8777 Down ST, MA, USA','946-068-1644');
Having database specific logic in the JSPs (in the presentation layer to be precise) is not a best practice in modern web application development. However, we can take little liberty to do so, provided the application is intended for prototyping or proof of concept (POC).
dateParam | param | setDataSource | transaction | update