Connettere una applicazione Java ad un database SQL tramite JDBC

Connettere una applicazione Java ad un database SQL tramite JDBC

In questo articolo vedremo come poter recuperare dei record da un database SQL (utilizziamo PostgreSQL) da una Web Application Java utilizzando le JavaServer Pages (JSP) come tecnologia Web. Per poter accedere ad un Database SQL da codice Java è necessario ottenere un driver JDBC.

MySQL Installer for Windows: un pacchetto software per installare e configurare MySQL su Windows
Come reimpostare la password di root di MySQL Server
IBM Data Studio

Creiamo le pagine JSP

La prima pagina utilizza le taglib jstl; la JavaServer Pages Standard Library (JSTL) è una raccolta di utili tag JSP che incapsulano le funzionalità di base comune a molte applicazioni JSP.  JSTL ha il supporto per  i costrutti di controllo di flusso come le iterazioni e le condizioni, i tag per la manipolazione di documenti XML, tag di internazionalizzazione e tag SQL. I tag JSTL possono essere classificati, in base alle loro funzioni, nei seguenti gruppi:

  • Core Tags
  • Formatting tags
  • SQL tags
  • XML tags
  • JSTL Functions

Quelli che andremo ad utilizzare nel nostro esempio sono i Core Tags e gli SQL tags. Prima di procedere scarichiamo la libreria dal seguente indirizzo:

http://central.maven.org/maven2/javax/servlet/jstl/1.2/jstl-1.2.jar

Una volta scaricata la libreria .jar, la inseriamo (insieme a quella dei driver JDBC per PostgreSQL ) nella cartella WEB-INF/lib.

Dall’IDE Eclipse creiamo una pagina JSP dal nome taglib.jsp, la quale importerà i due gruppi Core ed SQL tramite la direttiva jsp import:

<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

così facendo possiamo utilizzare i tag all’interno della pagina jsp. Per poter eseguire una query SQL utilizziamo la taglib sql, effettuando una select sulla tabella Anagrafica, all’interno del suo body:

<sql:query var="rs" dataSource="jdbc/postgres">
select nome, cognome, eta from anagrafica order by id
</sql:query>

la variabile rs (di tipo Result) dell’attibuto var, contiene i risultati della query. Utilizzando il metodo getRows() della classe Result otteniamo le righe della tabella Anagrafica (per esser precisi un array di oggetti Map), per fare ciò utilizziamo le taglib Core:

<ul>
<c:forEach var="row" items="${rs.rows}">
<li>
    Nome: ${row.nome}<br/>
    Cognome: ${row.cognome}<br/>
    Età: ${row.eta}<br/>
</li>
</c:forEach>
</ul>

il linguaggio JSTL converte automaticamente la sintassi ${rs.rows} in una chiamata a rs.getRows(). Quando forniamo un array di Map al tag forEach, l’attributo var del tag è di tipo Map. Per recuperare le informazioni da una Map, bisogna utilizzare il metodo get(“nomeColonna”) per ottenere un valore di una data colonna. Il linguaggio JSTL converte la sintassi ${map.nomeColonna} in una chiamata a map.get (“nomeColonna”).

La pagina JSP completa taglib.jsp è riportata di seguito (da copiare nella cartella WebContent):

<?xml version="1.0" encoding="ISO-8859-1" ?>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Esempio Taglib JSTL</title>
</head>
<body>
<sql:query var="rs" dataSource="jdbc/postgres">
select nome, cognome, eta from anagrafica order by id
</sql:query>

<h2>Anagrafica:</h2>

<ul>
<c:forEach var="row" items="${rs.rows}">
<li>
    Nome: ${row.nome}<br/>
    Cognome: ${row.cognome}<br/>
    Età: ${row.eta}<br/>
</li>
</c:forEach>
</ul>
  </body>
</html>

La seconda pagina JSP javacode.jsp di esempio utilizza del codice Java “puro” all’interno dei tag <% %> JSP. L’esempio completo è riportato di seguito:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="javax.naming.Context"%>
<%@page import="javax.naming.InitialContext"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Esempio Java Core</title>
</head>
	<body>
	<%
	Context initCtx = new InitialContext();
	Context envCtx = (Context) initCtx.lookup("java:comp/env");
	DataSource ds = (DataSource)
	envCtx.lookup("jdbc/postgres");
	Connection conn=null;
	PreparedStatement pstmt;
	String nome="";
	String cognome="";
	String eta="";
	try {
		conn = ds.getConnection();
		conn.setAutoCommit(false);
		pstmt = conn.prepareStatement("select nome,cognome,eta from anagrafica where id = ?");
		pstmt.setFloat(1, 1);
		pstmt.execute();
		
		ResultSet rs = pstmt.getResultSet();
		
		while (rs.next()) {
			nome = rs.getString(1);
			cognome = rs.getString(2);
			eta = rs.getString(3);
		}
		conn.commit();
		pstmt.close();
	}
	finally{
		conn.close();
	}
	%>
	<% //out.print("Risultato : "+result);
	%> 
	<ul>
	<li>
	<%=nome%>
	<%=cognome%>
	<%=eta%>
	</li>
	</ul>
	
	</body>
</html>

Infine possiamo creare una pagina iniziale index.html che ci permette di scegliere quale dei due esempi lanciare:

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Test JDBC Connection</title>
</head>
<body>
<h2>Test Connessioni JDBC</h2>
<p><a href="./taglib.jsp">Taglib JSTL Example</a></p>
<p><a href="./javacode.jsp">Java Code Example</a></p>
</body>
</html>

L’albero delle directory finale conterrà i seguenti file:

Struttura directory della Web Application realizzata
Struttura directory della Web Application realizzata

E’ possibile scaricare il .war dell’applicazione completa cliccando sul seguente link:

download

 Scarica Applicazione

E’ inoltre possibile visualizzare l’applicazione (attualmente è ospitata su Amazon Elastic Compute Cloud, Amazon EC2 ) cliccando sul seguente link:

run

 Avvia Applicazione

PAGES

1 2

COMMENTS

WORDPRESS: 3
  • comment-avatar

    Spiegazione molto utile, grazie!

  • comment-avatar

    Articolo interessante e molto esaustivo! Grazie mille!

  • comment-avatar

    Anche per me che sono una mezza schiappa con la tcnologia, ci ho capito quaalccosa! Quindi l’articolo è stato davvero esaustivo!