<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!-- NewPage -->
<html lang="en">
<head>
<!-- Generated by javadoc (1.8.0_112) on Sun Feb 26 17:08:11 EST 2017 -->
<title>JdbcStreams (Edgent v1.1.0)</title>
<meta name="date" content="2017-02-26">
<link rel="stylesheet" type="text/css" href="../../../../../stylesheet.css" title="Style">
<script type="text/javascript" src="../../../../../script.js"></script>
</head>
<body>
<script type="text/javascript"><!--
    try {
        if (location.href.indexOf('is-external=true') == -1) {
            parent.document.title="JdbcStreams (Edgent v1.1.0)";
        }
    }
    catch(err) {
    }
//-->
var methods = {"i0":10,"i1":10,"i2":10,"i3":10};
var tabs = {65535:["t0","All Methods"],2:["t2","Instance Methods"],8:["t4","Concrete Methods"]};
var altColor = "altColor";
var rowColor = "rowColor";
var tableTab = "tableTab";
var activeTableTab = "activeTableTab";
</script>
<noscript>
<div>JavaScript is disabled on your browser.</div>
</noscript>
<!-- ========= START OF TOP NAVBAR ======= -->
<div class="topNav"><a name="navbar.top">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.top" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.top.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/JdbcStreams.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/edgent/connectors/jdbc/CheckedSupplier.html" title="interface in org.apache.edgent.connectors.jdbc"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/edgent/connectors/jdbc/ParameterSetter.html" title="interface in org.apache.edgent.connectors.jdbc"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/edgent/connectors/jdbc/JdbcStreams.html" target="_top">Frames</a></li>
<li><a href="JdbcStreams.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_top">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_top");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.top">
<!--   -->
</a></div>
<!-- ========= END OF TOP NAVBAR ========= -->
<!-- ======== START OF CLASS DATA ======== -->
<div class="header">
<div class="subTitle">org.apache.edgent.connectors.jdbc</div>
<h2 title="Class JdbcStreams" class="title">Class JdbcStreams</h2>
</div>
<div class="contentContainer">
<ul class="inheritance">
<li>java.lang.Object</li>
<li>
<ul class="inheritance">
<li>org.apache.edgent.connectors.jdbc.JdbcStreams</li>
</ul>
</li>
</ul>
<div class="description">
<ul class="blockList">
<li class="blockList">
<hr>
<br>
<pre>public class <span class="typeNameLabel">JdbcStreams</span>
extends java.lang.Object</pre>
<div class="block"><code>JdbcStreams</code> is a streams connector to a database via the
 JDBC API <code>java.sql</code> package.
 <p>
 The connector provides general SQL access to a database, enabling
 writing of a stream's tuples to a database, creating a stream from
 database query results, and other operations.  
 Knowledge of the JDBC API is required.
 <p>
 Use of the connector involves:
 <ul>
 <li>constructing a streams connector to a database by providing it with:
     <ul>
     <li>a JDBC <code>DataSource</code></li>
     <li>a function that creates a JDBC <code>Connection</code> 
         from the <code>DataSource</code></li>
     </ul>
     </li>
 <li>defining SQL statement executions and results handling by calling one
     of the <code>executeStatement()</code> methods:
     <ul>
     <li>specify an SQL statement String or define a <a href="../../../../../org/apache/edgent/connectors/jdbc/StatementSupplier.html" title="interface in org.apache.edgent.connectors.jdbc"><code>StatementSupplier</code></a>.
         A <code>StatementSupplier</code> 
         creates a JDBC <code>PreparedStatement</code> for an SQL statement
         (e.g., a query, insert, update, etc operation).</li>
     <li>define a <a href="../../../../../org/apache/edgent/connectors/jdbc/ParameterSetter.html" title="interface in org.apache.edgent.connectors.jdbc"><code>ParameterSetter</code></a>.  A <code>ParameterSetter</code>
         sets the parameter values in a generic <code>PreparedStatement</code>.</li>
     <li>define a <a href="../../../../../org/apache/edgent/connectors/jdbc/ResultsHandler.html" title="interface in org.apache.edgent.connectors.jdbc"><code>ResultsHandler</code></a> as required.
         A <code>ResultsHandler</code> processes a JDBC
         <code>ResultSet</code> created by executing a SQL statement,
         optionally creating one or more tuples from the results
         and adding them to a stream.</li>
     </ul>
     </li>
 </ul>
 <p>
 Sample use:
 <pre><code>
  // construct a connector to the database
  JdbcStreams mydb = new JdbcStreams(
                // fn to create the javax.sql.DataSource to the db
                () -&gt; {
                       Context ctx = new javax.naming.InitialContext();
                       return (DataSource) ctx.lookup("jdbc/myDb");
                      },
                // fn to connect to the db (via the DataSource)
                (dataSource,cn) -&gt;  dataSource.getConnection(username,pw)
              );

  // ----------------------------------------------------
  //
  // Write a Person stream to a table
  //                       
  TStream&lt;Person&gt; persons = ...
  TSink sink = mydb.executeStatement(persons,
           () -&gt; "INSERT INTO persons VALUES(?,?,?)",
           (person,stmt) -&gt; {
               stmt.setInt(1, person.getId());
               stmt.setString(2, person.getFirstName());
               stmt.setString(3, person.getLastName());
               }, 
           );
           
  // ----------------------------------------------------
  //
  // Create a stream of Person from a PersonId tuple
  //
  TStream&lt;PersonId&gt; personIds = ...
  TStream&lt;Person&gt; persons = mydb.executeStatement(personIds,
            () -&gt; "SELECT id, firstname, lastname FROM persons WHERE id = ?",
            (personId,stmt) -&gt; stmt.setInt(1,personId.getId()),
            (personId,rs,exc,consumer) -&gt; {
                    if (exc != null) {
                        // statement failed, do something
                        int ecode = exc.getErrorCode();
                        String state = exc.getSQLState();
                        ...  // consumer.accept(...) if desired.
                    }
                    else {
                        rs.next();
                        int id = resultSet.getInt("id");
                        String firstName = resultSet.getString("firstname");
                        String lastName = resultSet.getString("lastname");
                        consumer.accept(new Person(id, firstName, lastName));
                    }
                }
            ); 
  persons.print();
    
  // ----------------------------------------------------
  //
  // Delete all the rows from a table
  //
  TStream&lt;String&gt; beacon = topology.strings("once");
  mydb.executeStatement(beacon,
               () -&gt; "DELETE FROM persons",
               (tuple,stmt) -&gt; { }  // no params to set
              ); 
 </code></pre></div>
</li>
</ul>
</div>
<div class="summary">
<ul class="blockList">
<li class="blockList">
<!-- ======== CONSTRUCTOR SUMMARY ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.summary">
<!--   -->
</a>
<h3>Constructor Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Constructor Summary table, listing constructors, and an explanation">
<caption><span>Constructors</span><span class="tabEnd">&nbsp;</span></caption>
<tr>
<th class="colOne" scope="col">Constructor and Description</th>
</tr>
<tr class="altColor">
<td class="colOne"><code><span class="memberNameLink"><a href="../../../../../org/apache/edgent/connectors/jdbc/JdbcStreams.html#JdbcStreams-org.apache.edgent.topology.Topology-org.apache.edgent.connectors.jdbc.CheckedSupplier-org.apache.edgent.connectors.jdbc.CheckedFunction-">JdbcStreams</a></span>(<a href="../../../../../org/apache/edgent/topology/Topology.html" title="interface in org.apache.edgent.topology">Topology</a>&nbsp;topology,
           <a href="../../../../../org/apache/edgent/connectors/jdbc/CheckedSupplier.html" title="interface in org.apache.edgent.connectors.jdbc">CheckedSupplier</a>&lt;javax.sql.DataSource&gt;&nbsp;dataSourceFn,
           <a href="../../../../../org/apache/edgent/connectors/jdbc/CheckedFunction.html" title="interface in org.apache.edgent.connectors.jdbc">CheckedFunction</a>&lt;javax.sql.DataSource,java.sql.Connection&gt;&nbsp;connFn)</code>
<div class="block">Create a connector that uses a JDBC <code>DataSource</code> object to get
 a database connection.</div>
</td>
</tr>
</table>
</li>
</ul>
<!-- ========== METHOD SUMMARY =========== -->
<ul class="blockList">
<li class="blockList"><a name="method.summary">
<!--   -->
</a>
<h3>Method Summary</h3>
<table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Method Summary table, listing methods, and an explanation">
<caption><span id="t0" class="activeTableTab"><span>All Methods</span><span class="tabEnd">&nbsp;</span></span><span id="t2" class="tableTab"><span><a href="javascript:show(2);">Instance Methods</a></span><span class="tabEnd">&nbsp;</span></span><span id="t4" class="tableTab"><span><a href="javascript:show(8);">Concrete Methods</a></span><span class="tabEnd">&nbsp;</span></span></caption>
<tr>
<th class="colFirst" scope="col">Modifier and Type</th>
<th class="colLast" scope="col">Method and Description</th>
</tr>
<tr id="i0" class="altColor">
<td class="colFirst"><code>&lt;T&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TSink.html" title="interface in org.apache.edgent.topology">TSink</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/edgent/connectors/jdbc/JdbcStreams.html#executeStatement-org.apache.edgent.topology.TStream-org.apache.edgent.connectors.jdbc.StatementSupplier-org.apache.edgent.connectors.jdbc.ParameterSetter-">executeStatement</a></span>(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
                <a href="../../../../../org/apache/edgent/connectors/jdbc/StatementSupplier.html" title="interface in org.apache.edgent.connectors.jdbc">StatementSupplier</a>&nbsp;stmtSupplier,
                <a href="../../../../../org/apache/edgent/connectors/jdbc/ParameterSetter.html" title="interface in org.apache.edgent.connectors.jdbc">ParameterSetter</a>&lt;T&gt;&nbsp;paramSetter)</code>
<div class="block">For each tuple on <code>stream</code> execute an SQL statement.</div>
</td>
</tr>
<tr id="i1" class="rowColor">
<td class="colFirst"><code>&lt;T,R&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;R&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/edgent/connectors/jdbc/JdbcStreams.html#executeStatement-org.apache.edgent.topology.TStream-org.apache.edgent.connectors.jdbc.StatementSupplier-org.apache.edgent.connectors.jdbc.ParameterSetter-org.apache.edgent.connectors.jdbc.ResultsHandler-">executeStatement</a></span>(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
                <a href="../../../../../org/apache/edgent/connectors/jdbc/StatementSupplier.html" title="interface in org.apache.edgent.connectors.jdbc">StatementSupplier</a>&nbsp;stmtSupplier,
                <a href="../../../../../org/apache/edgent/connectors/jdbc/ParameterSetter.html" title="interface in org.apache.edgent.connectors.jdbc">ParameterSetter</a>&lt;T&gt;&nbsp;paramSetter,
                <a href="../../../../../org/apache/edgent/connectors/jdbc/ResultsHandler.html" title="interface in org.apache.edgent.connectors.jdbc">ResultsHandler</a>&lt;T,R&gt;&nbsp;resultsHandler)</code>
<div class="block">For each tuple on <code>stream</code> execute an SQL statement and
 add 0 or more resulting tuples to a result stream.</div>
</td>
</tr>
<tr id="i2" class="altColor">
<td class="colFirst"><code>&lt;T&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TSink.html" title="interface in org.apache.edgent.topology">TSink</a>&lt;T&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/edgent/connectors/jdbc/JdbcStreams.html#executeStatement-org.apache.edgent.topology.TStream-org.apache.edgent.function.Supplier-org.apache.edgent.connectors.jdbc.ParameterSetter-">executeStatement</a></span>(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
                <a href="../../../../../org/apache/edgent/function/Supplier.html" title="interface in org.apache.edgent.function">Supplier</a>&lt;java.lang.String&gt;&nbsp;stmtSupplier,
                <a href="../../../../../org/apache/edgent/connectors/jdbc/ParameterSetter.html" title="interface in org.apache.edgent.connectors.jdbc">ParameterSetter</a>&lt;T&gt;&nbsp;paramSetter)</code>
<div class="block">For each tuple on <code>stream</code> execute an SQL statement.</div>
</td>
</tr>
<tr id="i3" class="rowColor">
<td class="colFirst"><code>&lt;T,R&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;R&gt;</code></td>
<td class="colLast"><code><span class="memberNameLink"><a href="../../../../../org/apache/edgent/connectors/jdbc/JdbcStreams.html#executeStatement-org.apache.edgent.topology.TStream-org.apache.edgent.function.Supplier-org.apache.edgent.connectors.jdbc.ParameterSetter-org.apache.edgent.connectors.jdbc.ResultsHandler-">executeStatement</a></span>(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
                <a href="../../../../../org/apache/edgent/function/Supplier.html" title="interface in org.apache.edgent.function">Supplier</a>&lt;java.lang.String&gt;&nbsp;stmtSupplier,
                <a href="../../../../../org/apache/edgent/connectors/jdbc/ParameterSetter.html" title="interface in org.apache.edgent.connectors.jdbc">ParameterSetter</a>&lt;T&gt;&nbsp;paramSetter,
                <a href="../../../../../org/apache/edgent/connectors/jdbc/ResultsHandler.html" title="interface in org.apache.edgent.connectors.jdbc">ResultsHandler</a>&lt;T,R&gt;&nbsp;resultsHandler)</code>
<div class="block">For each tuple on <code>stream</code> execute an SQL statement and
 add 0 or more resulting tuples to a result stream.</div>
</td>
</tr>
</table>
<ul class="blockList">
<li class="blockList"><a name="methods.inherited.from.class.java.lang.Object">
<!--   -->
</a>
<h3>Methods inherited from class&nbsp;java.lang.Object</h3>
<code>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</code></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
<div class="details">
<ul class="blockList">
<li class="blockList">
<!-- ========= CONSTRUCTOR DETAIL ======== -->
<ul class="blockList">
<li class="blockList"><a name="constructor.detail">
<!--   -->
</a>
<h3>Constructor Detail</h3>
<a name="JdbcStreams-org.apache.edgent.topology.Topology-org.apache.edgent.connectors.jdbc.CheckedSupplier-org.apache.edgent.connectors.jdbc.CheckedFunction-">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>JdbcStreams</h4>
<pre>public&nbsp;JdbcStreams(<a href="../../../../../org/apache/edgent/topology/Topology.html" title="interface in org.apache.edgent.topology">Topology</a>&nbsp;topology,
                   <a href="../../../../../org/apache/edgent/connectors/jdbc/CheckedSupplier.html" title="interface in org.apache.edgent.connectors.jdbc">CheckedSupplier</a>&lt;javax.sql.DataSource&gt;&nbsp;dataSourceFn,
                   <a href="../../../../../org/apache/edgent/connectors/jdbc/CheckedFunction.html" title="interface in org.apache.edgent.connectors.jdbc">CheckedFunction</a>&lt;javax.sql.DataSource,java.sql.Connection&gt;&nbsp;connFn)</pre>
<div class="block">Create a connector that uses a JDBC <code>DataSource</code> object to get
 a database connection.
 <p>
 In some environments it's common for JDBC DataSource objects to
 have been registered in JNDI. In such cases the dataSourceFn can be:
 <pre><code>
 () -&gt; {  Context ctx = new javax.naming.InitialContext();
          return (DataSource) ctx.lookup("jdbc/" + logicalDbName);
       }
 </code></pre>
 <p>
 Alternatively, a DataSource can be created using a dbms implementation's
 DataSource class.
 For example:
 <pre><code>
 () -&gt; { EmbeddedDataSource ds = new org.apache.derby.jdbc.EmbeddedDataSource();
         ds.setDatabaseName(dbName);
         ds.setCreateDatabase("create");
         return ds;
       }
 </code></pre>
 <p>
 Once <code>dataSourceFn</code> returns a DataSource it will not be called again. 
 <p>
 <code>connFn</code> is called only if a new JDBC connection is needed.
 It is not called per-processed-tuple.  JDBC failures in
 <code>executeStatement()</code> can result in a JDBC connection getting
 closed and <code>connFn</code> is subsequently called to reconnect.</div>
<dl>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>topology</code> - topology that this connector is for</dd>
<dd><code>dataSourceFn</code> - function that yields the <code>DataSource</code>
              for the database.</dd>
<dd><code>connFn</code> - function that yields a <code>Connection</code> from a <code>DataSource</code>.</dd>
</dl>
</li>
</ul>
</li>
</ul>
<!-- ============ METHOD DETAIL ========== -->
<ul class="blockList">
<li class="blockList"><a name="method.detail">
<!--   -->
</a>
<h3>Method Detail</h3>
<a name="executeStatement-org.apache.edgent.topology.TStream-org.apache.edgent.function.Supplier-org.apache.edgent.connectors.jdbc.ParameterSetter-org.apache.edgent.connectors.jdbc.ResultsHandler-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>executeStatement</h4>
<pre>public&nbsp;&lt;T,R&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;R&gt;&nbsp;executeStatement(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
                                         <a href="../../../../../org/apache/edgent/function/Supplier.html" title="interface in org.apache.edgent.function">Supplier</a>&lt;java.lang.String&gt;&nbsp;stmtSupplier,
                                         <a href="../../../../../org/apache/edgent/connectors/jdbc/ParameterSetter.html" title="interface in org.apache.edgent.connectors.jdbc">ParameterSetter</a>&lt;T&gt;&nbsp;paramSetter,
                                         <a href="../../../../../org/apache/edgent/connectors/jdbc/ResultsHandler.html" title="interface in org.apache.edgent.connectors.jdbc">ResultsHandler</a>&lt;T,R&gt;&nbsp;resultsHandler)</pre>
<div class="block">For each tuple on <code>stream</code> execute an SQL statement and
 add 0 or more resulting tuples to a result stream.
 <p>
 Same as using <a href="../../../../../org/apache/edgent/connectors/jdbc/JdbcStreams.html#executeStatement-org.apache.edgent.topology.TStream-org.apache.edgent.connectors.jdbc.StatementSupplier-org.apache.edgent.connectors.jdbc.ParameterSetter-org.apache.edgent.connectors.jdbc.ResultsHandler-"><code>executeStatement(TStream, StatementSupplier, ParameterSetter, ResultsHandler)</code></a>
 specifying <code>dataSource -&gt; dataSource.prepareStatement(stmtSupplier.get()</code>}
 for the <code>StatementSupplier</code>.</div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - Tuple type for input stream</dd>
<dd><code>R</code> - Tuple type of result stream</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>stream</code> - tuples to execute a SQL statement on behalf of</dd>
<dd><code>stmtSupplier</code> - an SQL statement</dd>
<dd><code>paramSetter</code> - function to set SQL statement parameters</dd>
<dd><code>resultsHandler</code> - SQL ResultSet handler</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>result Stream</dd>
</dl>
</li>
</ul>
<a name="executeStatement-org.apache.edgent.topology.TStream-org.apache.edgent.connectors.jdbc.StatementSupplier-org.apache.edgent.connectors.jdbc.ParameterSetter-org.apache.edgent.connectors.jdbc.ResultsHandler-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>executeStatement</h4>
<pre>public&nbsp;&lt;T,R&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;R&gt;&nbsp;executeStatement(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
                                         <a href="../../../../../org/apache/edgent/connectors/jdbc/StatementSupplier.html" title="interface in org.apache.edgent.connectors.jdbc">StatementSupplier</a>&nbsp;stmtSupplier,
                                         <a href="../../../../../org/apache/edgent/connectors/jdbc/ParameterSetter.html" title="interface in org.apache.edgent.connectors.jdbc">ParameterSetter</a>&lt;T&gt;&nbsp;paramSetter,
                                         <a href="../../../../../org/apache/edgent/connectors/jdbc/ResultsHandler.html" title="interface in org.apache.edgent.connectors.jdbc">ResultsHandler</a>&lt;T,R&gt;&nbsp;resultsHandler)</pre>
<div class="block">For each tuple on <code>stream</code> execute an SQL statement and
 add 0 or more resulting tuples to a result stream.
 <p>
 Use to transform T tuples to R tuples, or
 enrich/update T tuples with additional information from a database.
 It can also be used to load a table into stream, 
 using a T to trigger that.
 Or to execute non-ResultSet generating
 SQL statements and receive failure info and/or generate tuple(s)
 upon completion.
 <p>
 <code>stmtSupplier</code> is called only once per new JDBC connection/reconnect.
 It is not called per-tuple.  Hence, with the exception of statement
 parameters, the returned statement is expected to be unchanging.
 Failures executing a statement can result in the connection getting
 closed and subsequently reconnected, resulting in another
 <code>stmtSupplier</code> call.
 <p>
 <code>resultsHandler</code> is called for every tuple.
 If <code>resultsHandler</code> throws an Exception, it is called a
 second time for the tuple with a non-null exception argument.</div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - Tuple type for input stream</dd>
<dd><code>R</code> - Tuple type of result stream</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>stream</code> - tuples to execute a SQL statement on behalf of</dd>
<dd><code>stmtSupplier</code> - an SQL statement</dd>
<dd><code>paramSetter</code> - function to set SQL statement parameters</dd>
<dd><code>resultsHandler</code> - SQL ResultSet handler</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>result Stream</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../org/apache/edgent/connectors/jdbc/JdbcStreams.html#executeStatement-org.apache.edgent.topology.TStream-org.apache.edgent.function.Supplier-org.apache.edgent.connectors.jdbc.ParameterSetter-org.apache.edgent.connectors.jdbc.ResultsHandler-"><code>executeStatement(TStream, Supplier, ParameterSetter, ResultsHandler)</code></a></dd>
</dl>
</li>
</ul>
<a name="executeStatement-org.apache.edgent.topology.TStream-org.apache.edgent.function.Supplier-org.apache.edgent.connectors.jdbc.ParameterSetter-">
<!--   -->
</a>
<ul class="blockList">
<li class="blockList">
<h4>executeStatement</h4>
<pre>public&nbsp;&lt;T&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TSink.html" title="interface in org.apache.edgent.topology">TSink</a>&lt;T&gt;&nbsp;executeStatement(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
                                     <a href="../../../../../org/apache/edgent/function/Supplier.html" title="interface in org.apache.edgent.function">Supplier</a>&lt;java.lang.String&gt;&nbsp;stmtSupplier,
                                     <a href="../../../../../org/apache/edgent/connectors/jdbc/ParameterSetter.html" title="interface in org.apache.edgent.connectors.jdbc">ParameterSetter</a>&lt;T&gt;&nbsp;paramSetter)</pre>
<div class="block">For each tuple on <code>stream</code> execute an SQL statement.
 <p>
 Same as using <a href="../../../../../org/apache/edgent/connectors/jdbc/JdbcStreams.html#executeStatement-org.apache.edgent.topology.TStream-org.apache.edgent.connectors.jdbc.StatementSupplier-org.apache.edgent.connectors.jdbc.ParameterSetter-"><code>executeStatement(TStream, StatementSupplier, ParameterSetter)</code></a>
 specifying <code>dataSource -&gt; dataSource.prepareStatement(stmtSupplier.get()</code>}
 for the <code>StatementSupplier</code>.</div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - Tuple type</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>stream</code> - tuples to execute a SQL statement on behalf of</dd>
<dd><code>stmtSupplier</code> - an SQL statement</dd>
<dd><code>paramSetter</code> - function to set SQL statement parameters</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>TSink sink element representing termination of this stream.</dd>
</dl>
</li>
</ul>
<a name="executeStatement-org.apache.edgent.topology.TStream-org.apache.edgent.connectors.jdbc.StatementSupplier-org.apache.edgent.connectors.jdbc.ParameterSetter-">
<!--   -->
</a>
<ul class="blockListLast">
<li class="blockList">
<h4>executeStatement</h4>
<pre>public&nbsp;&lt;T&gt;&nbsp;<a href="../../../../../org/apache/edgent/topology/TSink.html" title="interface in org.apache.edgent.topology">TSink</a>&lt;T&gt;&nbsp;executeStatement(<a href="../../../../../org/apache/edgent/topology/TStream.html" title="interface in org.apache.edgent.topology">TStream</a>&lt;T&gt;&nbsp;stream,
                                     <a href="../../../../../org/apache/edgent/connectors/jdbc/StatementSupplier.html" title="interface in org.apache.edgent.connectors.jdbc">StatementSupplier</a>&nbsp;stmtSupplier,
                                     <a href="../../../../../org/apache/edgent/connectors/jdbc/ParameterSetter.html" title="interface in org.apache.edgent.connectors.jdbc">ParameterSetter</a>&lt;T&gt;&nbsp;paramSetter)</pre>
<div class="block">For each tuple on <code>stream</code> execute an SQL statement.
 <p>
 Use to write a stream of T to a table.
 More generally, use a T as a trigger to execute some SQL statement
 that doesn't yield a ResultSet.
 <p>
 Use a non-sink form of <code>executeStatement()</code> (forms
 that take a <code>ResultsHandler</code>), if you want to:
 <ul>
 <li>be notified of statement execution failures</li>
 <li>generate tuple(s) after the statement has run.</li>
 </ul></div>
<dl>
<dt><span class="paramLabel">Type Parameters:</span></dt>
<dd><code>T</code> - Tuple type</dd>
<dt><span class="paramLabel">Parameters:</span></dt>
<dd><code>stream</code> - tuples to execute a SQL statement on behalf of</dd>
<dd><code>stmtSupplier</code> - an SQL statement</dd>
<dd><code>paramSetter</code> - function to set SQL statement parameters</dd>
<dt><span class="returnLabel">Returns:</span></dt>
<dd>TSink sink element representing termination of this stream.</dd>
<dt><span class="seeLabel">See Also:</span></dt>
<dd><a href="../../../../../org/apache/edgent/connectors/jdbc/JdbcStreams.html#executeStatement-org.apache.edgent.topology.TStream-org.apache.edgent.function.Supplier-org.apache.edgent.connectors.jdbc.ParameterSetter-"><code>executeStatement(TStream, Supplier, ParameterSetter)</code></a></dd>
</dl>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<!-- ========= END OF CLASS DATA ========= -->
<!-- ======= START OF BOTTOM NAVBAR ====== -->
<div class="bottomNav"><a name="navbar.bottom">
<!--   -->
</a>
<div class="skipNav"><a href="#skip.navbar.bottom" title="Skip navigation links">Skip navigation links</a></div>
<a name="navbar.bottom.firstrow">
<!--   -->
</a>
<ul class="navList" title="Navigation">
<li><a href="../../../../../overview-summary.html">Overview</a></li>
<li><a href="package-summary.html">Package</a></li>
<li class="navBarCell1Rev">Class</li>
<li><a href="class-use/JdbcStreams.html">Use</a></li>
<li><a href="package-tree.html">Tree</a></li>
<li><a href="../../../../../deprecated-list.html">Deprecated</a></li>
<li><a href="../../../../../index-all.html">Index</a></li>
<li><a href="../../../../../help-doc.html">Help</a></li>
</ul>
<div class="aboutLanguage"><a href="http://edgent.incubator.apache.org">Apache Edgent (incubating)</a></div>
</div>
<div class="subNav">
<ul class="navList">
<li><a href="../../../../../org/apache/edgent/connectors/jdbc/CheckedSupplier.html" title="interface in org.apache.edgent.connectors.jdbc"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
<li><a href="../../../../../org/apache/edgent/connectors/jdbc/ParameterSetter.html" title="interface in org.apache.edgent.connectors.jdbc"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
</ul>
<ul class="navList">
<li><a href="../../../../../index.html?org/apache/edgent/connectors/jdbc/JdbcStreams.html" target="_top">Frames</a></li>
<li><a href="JdbcStreams.html" target="_top">No&nbsp;Frames</a></li>
</ul>
<ul class="navList" id="allclasses_navbar_bottom">
<li><a href="../../../../../allclasses-noframe.html">All&nbsp;Classes</a></li>
</ul>
<div>
<script type="text/javascript"><!--
  allClassesLink = document.getElementById("allclasses_navbar_bottom");
  if(window==top) {
    allClassesLink.style.display = "block";
  }
  else {
    allClassesLink.style.display = "none";
  }
  //-->
</script>
</div>
<div>
<ul class="subNavList">
<li>Summary:&nbsp;</li>
<li>Nested&nbsp;|&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.summary">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.summary">Method</a></li>
</ul>
<ul class="subNavList">
<li>Detail:&nbsp;</li>
<li>Field&nbsp;|&nbsp;</li>
<li><a href="#constructor.detail">Constr</a>&nbsp;|&nbsp;</li>
<li><a href="#method.detail">Method</a></li>
</ul>
</div>
<a name="skip.navbar.bottom">
<!--   -->
</a></div>
<!-- ======== END OF BOTTOM NAVBAR ======= -->
<p class="legalCopy"><small>Copyright &#169; 2017 The Apache Software Foundation. All Rights Reserved - 4744f56-20170226-1707</small></p>
</body>
</html>
