<!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 Mon Dec 18 11:25:21 EST 2017 -->
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JdbcStreams (Apache Edgent (incubating) v1.2.0 API)</title>
<meta name="date" content="2017-12-18">
<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 (Apache Edgent (incubating) v1.2.0 API)";
        }
    }
    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><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">java.lang.Object</a></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 <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></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 <a href="http://docs.oracle.com/javase/8/docs/api/javax/sql/DataSource.html?is-external=true" title="class or interface in javax.sql"><code>DataSource</code></a></li>
     <li>a function that creates a JDBC <a href="http://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html?is-external=true" title="class or interface in java.sql"><code>Connection</code></a> 
         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 <a href="http://docs.oracle.com/javase/8/docs/api/java/sql/PreparedStatement.html?is-external=true" title="class or interface in java.sql"><code>PreparedStatement</code></a> 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
         <a href="http://docs.oracle.com/javase/8/docs/api/java/sql/ResultSet.html?is-external=true" title="class or interface in java.sql"><code>ResultSet</code></a> 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;<a href="http://docs.oracle.com/javase/8/docs/api/javax/sql/DataSource.html?is-external=true" title="class or interface in javax.sql">DataSource</a>&gt;&nbsp;dataSourceFn,
           <a href="../../../../../org/apache/edgent/connectors/jdbc/CheckedFunction.html" title="interface in org.apache.edgent.connectors.jdbc">CheckedFunction</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/javax/sql/DataSource.html?is-external=true" title="class or interface in javax.sql">DataSource</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html?is-external=true" title="class or interface in java.sql">Connection</a>&gt;&nbsp;connFn)</code>
<div class="block">Create a connector that uses a JDBC <a href="http://docs.oracle.com/javase/8/docs/api/javax/sql/DataSource.html?is-external=true" title="class or interface in javax.sql"><code>DataSource</code></a> 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;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&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;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&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.<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a></h3>
<code><a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#clone--" title="class or interface in java.lang">clone</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#equals-java.lang.Object-" title="class or interface in java.lang">equals</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#finalize--" title="class or interface in java.lang">finalize</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#getClass--" title="class or interface in java.lang">getClass</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#hashCode--" title="class or interface in java.lang">hashCode</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notify--" title="class or interface in java.lang">notify</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#notifyAll--" title="class or interface in java.lang">notifyAll</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#toString--" title="class or interface in java.lang">toString</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait--" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-" title="class or interface in java.lang">wait</a>, <a href="http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true#wait-long-int-" title="class or interface in java.lang">wait</a></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;<a href="http://docs.oracle.com/javase/8/docs/api/javax/sql/DataSource.html?is-external=true" title="class or interface in javax.sql">DataSource</a>&gt;&nbsp;dataSourceFn,
                   <a href="../../../../../org/apache/edgent/connectors/jdbc/CheckedFunction.html" title="interface in org.apache.edgent.connectors.jdbc">CheckedFunction</a>&lt;<a href="http://docs.oracle.com/javase/8/docs/api/javax/sql/DataSource.html?is-external=true" title="class or interface in javax.sql">DataSource</a>,<a href="http://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html?is-external=true" title="class or interface in java.sql">Connection</a>&gt;&nbsp;connFn)</pre>
<div class="block">Create a connector that uses a JDBC <a href="http://docs.oracle.com/javase/8/docs/api/javax/sql/DataSource.html?is-external=true" title="class or interface in javax.sql"><code>DataSource</code></a> 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 <a href="http://docs.oracle.com/javase/8/docs/api/javax/sql/DataSource.html?is-external=true" title="class or interface in javax.sql"><code>DataSource</code></a>
              for the database.</dd>
<dd><code>connFn</code> - function that yields a <a href="http://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html?is-external=true" title="class or interface in java.sql"><code>Connection</code></a> 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;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&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;<a href="http://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&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>
<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; 2016&#x2013;2017 <a href="https://www.apache.org/">The Apache Software Foundation</a>. All rights reserved.</small></p>
</body>
</html>
