Java EE DataSource & DriverManager

Материал из Wiki.crossplatform.ru

(Различия между версиями)
Перейти к: навигация, поиск
(Новая: <h1>DataSource & DriverManager</h1> In this part of the JEE 5 tutorials, we will compare <b>DataSource</b> object with the <b>DriverManager</b> object. DataSource and the DriverMa...)
(нарушало авторские права)
 
Строка 1: Строка 1:
-
<h1>DataSource &amp; DriverManager</h1>
 
-
In this part of the JEE 5 tutorials, we will compare <b>DataSource</b> object with the <b>DriverManager</b> object.
 
-
 
-
DataSource and the DriverManager are the two basic ways to connect to a database in a JEE application. The DriverManager is  older facility, DataSource is newer. It is recommended to use the new DataSource facility to connect to databases and other resources. DataSource facility has several advantages over DriverManager facility. Using DataSource increases portability.
 
-
The DataSource enables connection pooling and distributed transactions, the DriverManager does not allow such techniques. Properties of a DataSource are kept in a configuration file. Any changes to the data source or database drivers are made in the configuration file. In case of a DriverManager, these properties are hard coded in the application and for any changes we must recompile the code.
 
-
 
-
In this chapter, we will have two examples. One of the examples will use a DriverManager, the other one will use a DataSource to connect to a MySQL database.
 
-
 
-
<source lang="java">
 
-
mysql> describe books;
 
-
+--------+--------------+------+-----+---------+----------------+
 
-
| Field  | Type        | Null | Key | Default | Extra          |
 
-
+--------+--------------+------+-----+---------+----------------+
 
-
| id    | int(11)      | NO  | PRI | NULL    | auto_increment |
 
-
| author | varchar(30)  | YES  |    | NULL    |                |
 
-
| title  | varchar(40)  | YES  |    | NULL    |                |
 
-
| year  | int(11)      | YES  |    | NULL    |                |
 
-
| remark | varchar(100) | YES  |    | NULL    |                |
 
-
+--------+--------------+------+-----+---------+----------------+
 
-
5 rows in set (0.27 sec)
 
-
</source>
 
-
 
-
We will use a books table.
 
-
 
-
== DriverManager ==
 
-
The first example will use a DriverManager.
 
-
<source lang="java">
 
-
* { font-size: 12px; font-family: Verdana }
 
-
 
-
td { border: 1px solid #ccc; padding: 3px }
 
-
th { border: 1px solid #ccc; padding: 3px;
 
-
    background: #009999; color: white }
 
-
 
-
</source>
 
-
 
-
This is the stylesheet file.
 
-
 
-
<source lang="java">
 
-
 
-
<?xml version="1.0" encoding="UTF-8"?>
 
-
<web-app>
 
-
    <servlet>
 
-
 
-
        <servlet-name>DriverManager</servlet-name>
 
-
        <servlet-class>com.zetcode.DriverManagerExample</servlet-class>
 
-
    </servlet>
 
-
    <servlet-mapping>
 
-
        <servlet-name>DriverManager</servlet-name>
 
-
 
-
        <url-pattern>/DriverManager</url-pattern>
 
-
    </servlet-mapping>
 
-
    <session-config>
 
-
        <session-timeout>
 
-
            30
 
-
        </session-timeout>
 
-
 
-
    </session-config>
 
-
</web-app>
 
-
</source>
 
-
 
-
In the <b>web.xml</b> configuration file, we configure our servlet.
 
-
 
-
<source lang="java">
 
-
 
-
 
-
package com.zetcode;
 
-
 
-
import java.io.*;
 
-
import java.net.*;
 
-
 
-
import java.sql.Connection;
 
-
import java.sql.DriverManager;
 
-
import java.sql.ResultSet;
 
-
import java.sql.SQLException;
 
-
import java.sql.Statement;
 
-
import java.util.logging.Level;
 
-
import java.util.logging.Logger;
 
-
import javax.servlet.*;
 
-
import javax.servlet.http.*;
 
-
 
-
 
-
public class DriverManagerExample extends HttpServlet {
 
-
 
-
  static final String url = "jdbc:mysql://localhost:3306/books";
 
-
 
-
 
-
  protected void processRequest(HttpServletRequest request,
 
-
          HttpServletResponse response)
 
-
          throws ServletException, IOException {
 
-
 
-
      response.setContentType("text/html;charset=UTF-8");
 
-
      PrintWriter out = response.getWriter();
 
-
 
-
      try {
 
-
 
-
 
-
        Class.forName("com.mysql.jdbc.Driver");
 
-
        Connection con = DriverManager.getConnection(url, "root", "");
 
-
 
-
        Statement stmt = con.createStatement();
 
-
        ResultSet result = stmt.executeQuery("SELECT * FROM books");
 
-
 
-
        out.print("<html>");
 
-
        out.print("<head>");
 
-
        out.print("<title>Servlet NewServlet</title>");
 
-
        out.print("<link rel='stylesheet' href='style.css' type='text/css'>");
 
-
        out.print("</head>");
 
-
        out.print("<body>");
 
-
 
-
        out.print("<table>");
 
-
        out.print("<tr>");
 
-
        out.print("<th>Author</th>");
 
-
        out.print("<th>Title</th>");
 
-
        out.print("<th>Year</th>");
 
-
        out.print("<th>Remark</th>");
 
-
        out.print("</tr>");
 
-
 
-
 
-
        while (result.next()) {
 
-
            out.print("<tr>");
 
-
            out.print("<td>");
 
-
            out.print(result.getString("author"));
 
-
            out.print("</td>");
 
-
            out.print("<td>");
 
-
            out.print(result.getString("title"));
 
-
            out.print("</td>");
 
-
            out.print("<td>");
 
-
            out.print(result.getString("year"));
 
-
            out.print("</td>");
 
-
            out.print("<td>");
 
-
            out.print(result.getString("remark"));
 
-
            out.print("</td>");
 
-
            out.print("</tr>");
 
-
        }
 
-
 
-
        con.close();
 
-
 
-
        } catch (SQLException ex) {
 
-
            Logger.getLogger(DriverManagerExample.class.getName()).log(
 
-
                    Level.SEVERE, null, ex);
 
-
        } catch (ClassNotFoundException ex) {
 
-
            Logger.getLogger(DriverManagerExample.class.getName()).log(
 
-
                    Level.SEVERE, null, ex);
 
-
        } finally {
 
-
            out.close();
 
-
        }
 
-
    }
 
-
 
-
 
-
    protected void doGet(HttpServletRequest request,
 
-
        HttpServletResponse response)
 
-
        throws ServletException, IOException {
 
-
 
-
          processRequest(request, response);
 
-
    }
 
-
 
-
 
-
    protected void doPost(HttpServletRequest request,
 
-
        HttpServletResponse response) 
 
-
        throws ServletException, IOException {
 
-
 
-
          processRequest(request, response);
 
-
    }
 
-
 
-
}
 
-
 
-
</source>
 
-
 
-
The example will display a books table from the books database in a html table.
 
-
 
-
<source lang="java">
 
-
static final String url = "jdbc:mysql://localhost:3306/books";
 
-
</source>
 
-
 
-
We provide the connection url. This is an url for a MySQL database.
 
-
 
-
<source lang="java">
 
-
Class.forName("com.mysql.jdbc.Driver");
 
-
Connection con = DriverManager.getConnection(url, "root", "");
 
-
</source>
 
-
 
-
We load the driver and get the connection to the database.
 
-
 
-
[[image: java_ee_faq_drivermanager.png| center]]
 
-
 
-
== DataSource ==
 
-
The next example uses the DataSource facility. We use the same data.
 
-
<source lang="java">
 
-
* { font-size: 12px; font-family: Verdana }
 
-
 
-
td { border: 1px solid #ccc; padding: 3px }
 
-
th { border: 1px solid #ccc; padding: 3px;
 
-
    background: #009999; color: white }
 
-
</source>
 
-
 
-
Simple stylesheet.
 
-
 
-
<source lang="java">
 
-
<web-app xmlns="http://caucho.com/ns/resin">
 
-
  <!--
 
-
    - Configures the database.
 
-
    -
 
-
    - jndi-name specifies the JNDI name
 
-
    - type      specifies the driver class
 
-
    - path      is a driver-specific configuration parameter
 
-
    -->
 
-
<database>
 
-
<jndi-name>jdbc/mysql</jndi-name>
 
-
 
-
  <driver>
 
-
    <type>com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource</type>
 
-
    <url>jdbc:mysql://localhost:3306/books</url>
 
-
    <user>root</user>
 
-
 
-
    <password></password>
 
-
  </driver>
 
-
  </database>
 
-
 
-
  <!--
 
-
    - Configures the initialization servlet.  The bean-style init
 
-
    - it used to look up the JNDI DataSource in the configuration file.
 
-
    -->
 
-
 
-
  <servlet>
 
-
 
-
    <servlet-name>datasource</servlet-name>
 
-
    <servlet-class>com.zetcode.DataSourceExample</servlet-class>
 
-
        <init>
 
-
      <data-source>${jndi:lookup('jdbc/mysql')}</data-source>
 
-
 
-
    </init>
 
-
  </servlet>
 
-
 
-
  <servlet-mapping>
 
-
    <url-pattern>/DataSource</url-pattern>
 
-
    <servlet-name>datasource</servlet-name>
 
-
 
-
  </servlet-mapping>
 
-
 
-
</web-app>
 
-
</source>
 
-
 
-
This is the <b>resin-web.xml</b> configuration style. It is Resin specific. It overrides the  configuration in the <b>web.xml</b> file.
 
-
In our file, we configure the datasource and the servlet mapping.
 
-
 
-
The DataSource configuration is done within the <database> tags. We specify the driver type, connection url, user name and password.
 
-
 
-
In our example, we use the JNDI (The Java Naming and Directory Interface) API. This API is used to look up data and objects via a name. The JNDI enables separation of resource configuration from the application code.
 
-
 
-
<source lang="java">
 
-
package com.zetcode;
 
-
 
-
import java.io.*;
 
-
import java.net.*;
 
-
 
-
import java.sql.Connection;
 
-
import java.sql.ResultSet;
 
-
import java.sql.SQLException;
 
-
import java.sql.Statement;
 
-
import java.util.logging.Level;
 
-
import java.util.logging.Logger;
 
-
import javax.servlet.*;
 
-
import javax.servlet.http.*;
 
-
import javax.sql.DataSource;
 
-
 
-
public class DataSourceExample extends HttpServlet {
 
-
 
-
    private DataSource _ds = null;
 
-
 
-
 
-
    public void setDataSource(DataSource ds) {
 
-
        _ds = ds;
 
-
    }
 
-
 
-
 
-
    public void init()
 
-
            throws ServletException {
 
-
        if (_ds == null) {
 
-
 
-
            throw new ServletException("datasource not properly configured");
 
-
        }
 
-
    }
 
-
 
-
    protected void processRequest(HttpServletRequest request,
 
-
            HttpServletResponse response)
 
-
            throws ServletException, IOException {
 
-
 
-
        response.setContentType("text/html;charset=UTF-8");
 
-
        PrintWriter out = response.getWriter();
 
-
 
-
 
-
        try {
 
-
 
-
          Connection conn = _ds.getConnection();
 
-
 
-
          Statement stmt = conn.createStatement();
 
-
          ResultSet result = stmt.executeQuery("SELECT * FROM books");
 
-
 
-
          out.print("<html>");
 
-
          out.print("<head>");
 
-
          out.print("<title>DataSource</title>");
 
-
          out.print("<link rel='stylesheet' href='style.css' type='text/css'>");
 
-
          out.print("</head>");
 
-
          out.print("<body>");
 
-
 
-
          out.print("<table>");
 
-
          out.print("<tr>");
 
-
          out.print("<th>Author</th>");
 
-
          out.print("<th>Title</th>");
 
-
          out.print("<th>Year</th>");
 
-
          out.print("<th>Remark</th>");
 
-
          out.print("</tr>");
 
-
 
-
 
-
          while (result.next()) {
 
-
              out.print("<tr>");
 
-
              out.print("<td>");
 
-
              out.print(result.getString("author"));
 
-
              out.print("</td>");
 
-
              out.print("<td>");
 
-
              out.print(result.getString("title"));
 
-
              out.print("</td>");
 
-
              out.print("<td>");
 
-
              out.print(result.getString("year"));
 
-
              out.print("</td>");
 
-
              out.print("<td>");
 
-
              out.print(result.getString("remark"));
 
-
              out.print("</td>");
 
-
              out.print("</tr>");
 
-
          }
 
-
 
-
 
-
          out.print("</table>");
 
-
          out.println("</body>");
 
-
          out.println("</html>");
 
-
 
-
          result.close();
 
-
          stmt.close();
 
-
          conn.close();
 
-
 
-
        } catch (SQLException ex) {
 
-
            Logger.getLogger(DataSourceExample.class.getName()).log(
 
-
                    Level.SEVERE, null, ex);
 
-
        } finally {
 
-
            out.close();
 
-
        }
 
-
    }
 
-
 
-
    protected void doGet(HttpServletRequest request,
 
-
            HttpServletResponse response)
 
-
            throws ServletException, IOException {
 
-
 
-
        processRequest(request, response);
 
-
    }
 
-
 
-
    protected void doPost(HttpServletRequest request,
 
-
            HttpServletResponse response)
 
-
            throws ServletException, IOException {
 
-
 
-
        processRequest(request, response);
 
-
    }
 
-
}
 
-
 
-
</source>
 
-
 
-
The example will display a books table from the books database in a html table too.
 
-
 
-
<source lang="java">
 
-
public void setDataSource(DataSource ds) {
 
-
    _ds = ds;
 
-
}
 
-
</source>
 
-
 
-
The method is called by the Resin application server at configuration time.
 
-
 
-
<source lang="java">
 
-
public void init()
 
-
        throws ServletException {
 
-
    if (_ds == null) {
 
-
 
-
        throw new ServletException("datasource not properly configured");
 
-
    }
 
-
}
 
-
</source>
 
-
 
-
The <b>init()</b> method checks whether the datasource was configured properly.
 
-
 
-
<source lang="java">
 
-
Connection conn = _ds.getConnection();
 
-
</source>
 
-
 
-
We get the connection from the datasource object.
 
-
 
-
[[image: java_ee_faq_datasource.png| center]]
 
-
 
-
[[Категория:Java]]
 

Текущая версия на 11:36, 7 апреля 2009