1~

Minter Coder's Blog

14-Jsp, Jstl'de SQL Tags(Sql Tagları)

2021-01-24

Arkadaşlar merhabalar bu bölümde sql taglarını göreceğiz.Sql taglarını dahil edebilmek için ;
    <%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %> 

kullanmalıyız.

Şimdi ben oluşturduğum bir database sahibim , adı users ve bunun içinde de tablom var adı user içerisinde de veriler var.Tabi bu verileri almak için öncelikle mysql connector de lib olarak eklememiz gerekiyor . Bunlar sadece 1 fotoda aşağıda göstericem.

 

Bu verileri almak için ; bir kaç tag göstericem sırasıyla ;

<sql:setDataSource var="database" driver="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost/users" user="root" password="4321"
/>

Öncelikle setDataSource ile veri kaynağımızı ayarlıyoruz.Burada bu veri kaynağını kullanabilmek için değişken adı olarak ben database verdim driver olarak com.mysql.cj.jdbc.Driver , ve url olarak da benim database kaynağımı evrdim user ve şifremi de girdim.

<sql:query dataSource="${database}" var="resultSet">
Select * from user
</sql:query>

Sql query adından da anlaşılacağı gibi bir sorgu oluşturcam burada , en üstte ayarladığımız dataSource'in değişken ismini verdim , sonra variable olarak da resultSet verdim ve içerisine sorgumu yazdım.

<c:forEach var="table" items="${resultSet.rows}">
<tr>
<td><c:out value="${table.id}"/></td>
<td><c:out value="${table.username}"/></td>
</tr>
<br/>
</c:forEach>

Yukarıdaki kodda ise c:forEach bildiğiniz gibi bir core tag, verileri çekip göstericem bu bu yüzden items kısmına query de yazdığımız değişken adını kullanıp .rows yani satırları al diyoruz ve buna da table adını atadım , sonra <c:out value="${table.id}" ile tablodaki id adlı sütunun satırını getir diyorum hemen altında da username'yi getir diyorum.

Şimdi de <sql:update sorgusuna bakalım bu tagda arkadaşlar delete , insert , update işlemlerini her türlü yapabilirsiniz ben sadece size insert gösterecem tabi isterseniz bir kayıt silebilrisniz yada güncelleyebilirsiniz.

<sql:setDataSource var="database" driver="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost/users" user="root" password="4321"
/>
<sql:update var="dsa" dataSource="${database}" >
insert into user(username,password) values('Göktürk',4321);
</sql:update>
<sql:query dataSource="${database}" var="resultSet">
Select * from user
</sql:query>
<c:forEach var="table" items="${resultSet.rows}">
<tr>
<td><c:out value="${table.id}"/></td>
<td><c:out value="${table.username}"/></td>
</tr>
<br/>
</c:forEach>

 

 

Arkadaşlar yukarıda bir şeyi fark etmiş olabilirsiniz , biz sorguya parametre vermeden direk strictly olarak katı bir şekilde verdik ama bunun yerine parametre vermemiz çok daha akıllıca olacaktır . sql:param tagı burada devreye giriyor hemen bakalım.

<sql:setDataSource var="database" driver="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost/users" user="root" password="4321"
/>
<sql:update var="dsa" dataSource="${database}" >
insert into user(username,password) values(?,?);
<sql:param value="WhoAmI?"/>
<sql:param value="IdontKnow"/>
</sql:update>
<sql:query dataSource="${database}" var="resultSet">
Select * from user
</sql:query>
<c:forEach var="table" items="${resultSet.rows}">
<tr>
<td><c:out value="${table.id}"/></td>
<td><c:out value="${table.username}"/></td>
</tr>
<br/>
</c:forEach>

Bu sefer farklı bir sebepten ötürü söylemek istediğim bir şey var . Fark edileceği gibi hep sadece bir update yapıyoruz bunun yerine birden fazla update işlemi kullanmak için ne yapacağız ? Bunun için de <sql:transaction tagını kullanacağız ve bunun sayesinde database tek bir işi toplu şekilde yapmış olucaz diğerlerinde tek tek yazmak veritabanına birden fazla iş yükü bindirmiş olacaktık.Hemen örnek ;
 

Önce

Sonrası

 

Kodlar

<sql:setDataSource var="database" driver="com.mysql.cj.jdbc.Driver"
url="jdbc:mysql://localhost/users" user="root" password="4321" />
<sql:transaction dataSource="${database}">
<sql:update>
update user set username=? where id=?
<sql:param value="Spring" />
<sql:param value="2" />
</sql:update>
<sql:update>
delete from user where id=?
<sql:param value="6" />
</sql:update>
</sql:transaction>
 
<sql:query dataSource="${database}" var="resultSet">
Select * from user
</sql:query>
<c:forEach var="table" items="${resultSet.rows}">
<tr>
<td><c:out value="${table.id}" /></td>
<td><c:out value="${table.username}" /></td>
</tr>
<br />
</c:forEach>

Jspde jstl tags bitti herkese görüşürüz umarım anlaşılır olmuştur herkese :) Jsp ile devam edelim.