text: <!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 -->
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <title>SQLKVDatabase (Permazen 4.1.6 API)</title>
  <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="SQLKVDatabase (Permazen 4.1.6 API)";
          }
      }
      catch(err) {
      }
  //-->
  var methods = {"i0":10,"i1":10,"i2":10,"i3":10,"i4":10,"i5":10,"i6":10,"i7":10,"i8":10,"i9":10,"i10":10,"i11":10,"i12":10,"i13":10,"i14":10,"i15":10,"i16":10,"i17":10,"i18":10,"i19":10,"i20":10,"i21":10,"i22":10,"i23":10,"i24":10,"i25":10,"i26":10,"i27":10,"i28":10,"i29":10,"i30":10,"i31":10,"i32":10,"i33":10,"i34":10,"i35":10,"i36":10,"i37":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/SQLKVDatabase.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="../../../../io/permazen/kv/sql/SQLDriverKVImplementation.Config.html" title="class in io.permazen.kv.sql"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
  <li><a href="../../../../io/permazen/kv/sql/SQLKVTransaction.html" title="class in io.permazen.kv.sql"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
  </ul>
  <ul class="navList">
  <li><a href="../../../../index.html?io/permazen/kv/sql/SQLKVDatabase.html" target="_top">Frames</a></li>
  <li><a href="SQLKVDatabase.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><a href="#field.summary">Field</a>&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><a href="#field.detail">Field</a>&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">io.permazen.kv.sql</div>
  <h2 title="Class SQLKVDatabase" class="title">Class SQLKVDatabase</h2>
  </div>
  <div class="contentContainer">
  <ul class="inheritance">
  <li><a href="https://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>io.permazen.kv.sql.SQLKVDatabase</li>
  </ul>
  </li>
  </ul>
  <div class="description">
  <ul class="blockList">
  <li class="blockList">
  <dl>
  <dt>All Implemented Interfaces:</dt>
  <dd><a href="../../../../io/permazen/kv/KVDatabase.html" title="interface in io.permazen.kv">KVDatabase</a></dd>
  </dl>
  <dl>
  <dt>Direct Known Subclasses:</dt>
  <dd><a href="../../../../io/permazen/kv/cockroach/CockroachKVDatabase.html" title="class in io.permazen.kv.cockroach">CockroachKVDatabase</a>, <a href="../../../../io/permazen/kv/mssql/MSSQLKVDatabase.html" title="class in io.permazen.kv.mssql">MSSQLKVDatabase</a>, <a href="../../../../io/permazen/kv/mysql/MySQLKVDatabase.html" title="class in io.permazen.kv.mysql">MySQLKVDatabase</a>, <a href="../../../../io/permazen/kv/sqlite/SQLiteKVDatabase.html" title="class in io.permazen.kv.sqlite">SQLiteKVDatabase</a></dd>
  </dl>
  <hr>
  <br>
  <pre>public class <span class="typeNameLabel">SQLKVDatabase</span>
  extends <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html?is-external=true" title="class or interface in java.lang">Object</a>
  implements <a href="../../../../io/permazen/kv/KVDatabase.html" title="interface in io.permazen.kv">KVDatabase</a></pre>
  <div class="block">Support superclass for SQL <a href="../../../../io/permazen/kv/KVDatabase.html" title="interface in io.permazen.kv"><code>KVDatabase</code></a> implementations.
  
   <p>
   <a href="../../../../io/permazen/kv/KVTransaction.html#watchKey-byte:A-">Key watches</a> are not supported.</div>
  </li>
  </ul>
  </div>
  <div class="summary">
  <ul class="blockList">
  <li class="blockList">
  <!-- =========== FIELD SUMMARY =========== -->
  <ul class="blockList">
  <li class="blockList"><a name="field.summary">
  <!--   -->
  </a>
  <h3>Field Summary</h3>
  <table class="memberSummary" border="0" cellpadding="3" cellspacing="0" summary="Field Summary table, listing fields, and an explanation">
  <caption><span>Fields</span><span class="tabEnd">&nbsp;</span></caption>
  <tr>
  <th class="colFirst" scope="col">Modifier and Type</th>
  <th class="colLast" scope="col">Field and Description</th>
  </tr>
  <tr class="altColor">
  <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/javax/sql/DataSource.html?is-external=true" title="class or interface in javax.sql">DataSource</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#dataSource">dataSource</a></span></code>&nbsp;</td>
  </tr>
  <tr class="rowColor">
  <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#DEFAULT_KEY_COLUMN_NAME">DEFAULT_KEY_COLUMN_NAME</a></span></code>
  <div class="block">Default key column name ("kv_key").</div>
  </td>
  </tr>
  <tr class="altColor">
  <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#DEFAULT_TABLE_NAME">DEFAULT_TABLE_NAME</a></span></code>
  <div class="block">Default table name ("KV").</div>
  </td>
  </tr>
  <tr class="rowColor">
  <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#DEFAULT_VALUE_COLUMN_NAME">DEFAULT_VALUE_COLUMN_NAME</a></span></code>
  <div class="block">Default value column name ("kv_value").</div>
  </td>
  </tr>
  <tr class="altColor">
  <td class="colFirst"><code>protected <a href="../../../../io/permazen/kv/sql/IsolationLevel.html" title="enum in io.permazen.kv.sql">IsolationLevel</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#isolationLevel">isolationLevel</a></span></code>
  <div class="block">The default transaction isolation level.</div>
  </td>
  </tr>
  <tr class="rowColor">
  <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#keyColumnName">keyColumnName</a></span></code>
  <div class="block">The name of the key column.</div>
  </td>
  </tr>
  <tr class="altColor">
  <td class="colFirst"><code>protected <a href="http://www.slf4j.org/apidocs/org/slf4j/Logger.html?is-external=true" title="class or interface in org.slf4j">Logger</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#log">log</a></span></code>&nbsp;</td>
  </tr>
  <tr class="rowColor">
  <td class="colFirst"><code>static <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#OPTION_ISOLATION">OPTION_ISOLATION</a></span></code>
  <div class="block">Option key for <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#createTransaction-java.util.Map-"><code>createTransaction(Map)</code></a>.</div>
  </td>
  </tr>
  <tr class="altColor">
  <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#tableName">tableName</a></span></code>
  <div class="block">The name of the key/value table.</div>
  </td>
  </tr>
  <tr class="rowColor">
  <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#valueColumnName">valueColumnName</a></span></code>
  <div class="block">The name of the value column.</div>
  </td>
  </tr>
  </table>
  </li>
  </ul>
  <!-- ======== 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="../../../../io/permazen/kv/sql/SQLKVDatabase.html#SQLKVDatabase--">SQLKVDatabase</a></span>()</code>&nbsp;</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>protected void</code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#beginTransaction-java.sql.Connection-">beginTransaction</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html?is-external=true" title="class or interface in java.sql">Connection</a>&nbsp;connection)</code>
  <div class="block">Open a new SQL transaction on the given <a href="https://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>.</div>
  </td>
  </tr>
  <tr id="i1" class="rowColor">
  <td class="colFirst"><code>protected void</code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#configureConnection-java.sql.Connection-">configureConnection</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html?is-external=true" title="class or interface in java.sql">Connection</a>&nbsp;connection)</code>
  <div class="block">Configure a newly created <a href="https://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>.</div>
  </td>
  </tr>
  <tr id="i2" class="altColor">
  <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#createGetAllStatement-boolean-">createGetAllStatement</a></span>(boolean&nbsp;reverse)</code>
  <div class="block">Create an SQL statement that reads all of the key and value columns (in that order), possibly reversed.</div>
  </td>
  </tr>
  <tr id="i3" class="rowColor">
  <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#createGetAtLeastStatement-boolean-">createGetAtLeastStatement</a></span>(boolean&nbsp;reverse)</code>
  <div class="block">Create an SQL statement that reads the key and value columns (in that order) associated
   with the smallest key greater than or equal to <code>&#63;1</code>, if any.</div>
  </td>
  </tr>
  <tr id="i4" class="altColor">
  <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#createGetAtMostStatement-boolean-">createGetAtMostStatement</a></span>(boolean&nbsp;reverse)</code>
  <div class="block">Create an SQL statement that reads the key and value columns (in that order)
   associated with the greatest key strictly less than <code>&#63;1</code>, if any.</div>
  </td>
  </tr>
  <tr id="i5" class="rowColor">
  <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#createGetRangeStatement-boolean-">createGetRangeStatement</a></span>(boolean&nbsp;reverse)</code>
  <div class="block">Create an SQL statement that reads the key and value columns (in that order) associated with all keys
   in the range <code>&#63;1</code> (inclusive) to <code>&#63;2</code> (exclusive), possibly reversed.</div>
  </td>
  </tr>
  <tr id="i6" class="altColor">
  <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#createGetStatement--">createGetStatement</a></span>()</code>
  <div class="block">Create an SQL statement that reads the value column associated with key <code>&#63;1</code>.</div>
  </td>
  </tr>
  <tr id="i7" class="rowColor">
  <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#createPutStatement--">createPutStatement</a></span>()</code>
  <div class="block">Create an SQL statement that inserts the key/value pair with key <code>&#63;1</code> and value <code>&#63;2</code>
   A row with key <code>&#63;1</code> may already exist; if so, the value should be updated to
   <code>&#63;2</code> (if syntax requires it, the value may be updated to <code>&#63;3</code> instead;
   <code>&#63;3</code>, if it exists, will be set to the same value as <code>&#63;2</code>).</div>
  </td>
  </tr>
  <tr id="i8" class="altColor">
  <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#createRemoveAllStatement--">createRemoveAllStatement</a></span>()</code>
  <div class="block">Create an SQL statement that deletes all rows.</div>
  </td>
  </tr>
  <tr id="i9" class="rowColor">
  <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#createRemoveAtLeastStatement--">createRemoveAtLeastStatement</a></span>()</code>
  <div class="block">Create an SQL statement that deletes all rows with keys greater than or equal to <code>&#63;1</code>.</div>
  </td>
  </tr>
  <tr id="i10" class="altColor">
  <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#createRemoveAtMostStatement--">createRemoveAtMostStatement</a></span>()</code>
  <div class="block">Create an SQL statement that deletes all rows with keys strictly less than <code>&#63;1</code>.</div>
  </td>
  </tr>
  <tr id="i11" class="rowColor">
  <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#createRemoveRangeStatement--">createRemoveRangeStatement</a></span>()</code>
  <div class="block">Create an SQL statement that deletes all rows with keys in the range <code>&#63;1</code> (inclusive}
   to <code>&#63;2</code> (exclusive).</div>
  </td>
  </tr>
  <tr id="i12" class="altColor">
  <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#createRemoveStatement--">createRemoveStatement</a></span>()</code>
  <div class="block">Create an SQL statement that deletes the row associated with key <code>&#63;1</code>, if any.</div>
  </td>
  </tr>
  <tr id="i13" class="rowColor">
  <td class="colFirst"><code>protected <a href="../../../../io/permazen/kv/sql/SQLKVTransaction.html" title="class in io.permazen.kv.sql">SQLKVTransaction</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#createSQLKVTransaction-java.sql.Connection-">createSQLKVTransaction</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html?is-external=true" title="class or interface in java.sql">Connection</a>&nbsp;connection)</code>
  <div class="block">Create a new <a href="../../../../io/permazen/kv/sql/SQLKVTransaction.html" title="class in io.permazen.kv.sql"><code>SQLKVTransaction</code></a> for a new transaction given the specified <a href="https://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>.</div>
  </td>
  </tr>
  <tr id="i14" class="altColor">
  <td class="colFirst"><code><a href="../../../../io/permazen/kv/sql/SQLKVTransaction.html" title="class in io.permazen.kv.sql">SQLKVTransaction</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#createTransaction--">createTransaction</a></span>()</code>
  <div class="block">Create a new transaction.</div>
  </td>
  </tr>
  <tr id="i15" class="rowColor">
  <td class="colFirst"><code><a href="../../../../io/permazen/kv/sql/SQLKVTransaction.html" title="class in io.permazen.kv.sql">SQLKVTransaction</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#createTransaction-java.util.Map-">createTransaction</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://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;options)</code>
  <div class="block">Create a new transaction.</div>
  </td>
  </tr>
  <tr id="i16" class="altColor">
  <td class="colFirst"><code>protected <a href="https://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html?is-external=true" title="class or interface in java.sql">Connection</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#createTransactionConnection--">createTransactionConnection</a></span>()</code>
  <div class="block">Create a <a href="https://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> for a new transaction.</div>
  </td>
  </tr>
  <tr id="i17" class="rowColor">
  <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/javax/sql/DataSource.html?is-external=true" title="class or interface in javax.sql">DataSource</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#getDataSource--">getDataSource</a></span>()</code>
  <div class="block">Get the <a href="https://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> used with this instance.</div>
  </td>
  </tr>
  <tr id="i18" class="altColor">
  <td class="colFirst"><code><a href="../../../../io/permazen/kv/sql/IsolationLevel.html" title="enum in io.permazen.kv.sql">IsolationLevel</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#getIsolationLevel--">getIsolationLevel</a></span>()</code>
  <div class="block">Get the default transaction isolation level.</div>
  </td>
  </tr>
  <tr id="i19" class="rowColor">
  <td class="colFirst"><code>protected <a href="../../../../io/permazen/kv/sql/IsolationLevel.html" title="enum in io.permazen.kv.sql">IsolationLevel</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#getIsolationLevel-java.util.Map-">getIsolationLevel</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://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;options)</code>
  <div class="block">Extract the <a href="../../../../io/permazen/kv/sql/IsolationLevel.html" title="enum in io.permazen.kv.sql"><code>IsolationLevel</code></a>, if any, from the transaction options.</div>
  </td>
  </tr>
  <tr id="i20" class="altColor">
  <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#getKeyColumnName--">getKeyColumnName</a></span>()</code>
  <div class="block">Get the name of the column containing keys.</div>
  </td>
  </tr>
  <tr id="i21" class="rowColor">
  <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#getTableName--">getTableName</a></span>()</code>
  <div class="block">Get the name of the table containing keys and values.</div>
  </td>
  </tr>
  <tr id="i22" class="altColor">
  <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#getValueColumnName--">getValueColumnName</a></span>()</code>
  <div class="block">Get the name of the column containing values.</div>
  </td>
  </tr>
  <tr id="i23" class="rowColor">
  <td class="colFirst"><code>protected void</code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#initializeDatabaseIfNecessary-java.sql.Connection-">initializeDatabaseIfNecessary</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html?is-external=true" title="class or interface in java.sql">Connection</a>&nbsp;connection)</code>
  <div class="block">Perform any required database initialization.</div>
  </td>
  </tr>
  <tr id="i24" class="altColor">
  <td class="colFirst"><code>boolean</code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#isRollbackForReadOnly--">isRollbackForReadOnly</a></span>()</code>
  <div class="block">Get whether to rollback read-only transactions.</div>
  </td>
  </tr>
  <tr id="i25" class="rowColor">
  <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#limitSingleRow-java.lang.String-">limitSingleRow</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;sql)</code>
  <div class="block">Modify the given SQL statement so that only one row is returned.</div>
  </td>
  </tr>
  <tr id="i26" class="altColor">
  <td class="colFirst"><code>protected void</code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#postBeginTransaction-java.sql.Connection-">postBeginTransaction</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html?is-external=true" title="class or interface in java.sql">Connection</a>&nbsp;connection)</code>
  <div class="block">Subclass hook invoked just after opening a new SQL transaction.</div>
  </td>
  </tr>
  <tr id="i27" class="rowColor">
  <td class="colFirst"><code>protected void</code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#preBeginTransaction-java.sql.Connection-">preBeginTransaction</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html?is-external=true" title="class or interface in java.sql">Connection</a>&nbsp;connection)</code>
  <div class="block">Subclass hook invoked just before opening a new SQL transaction.</div>
  </td>
  </tr>
  <tr id="i28" class="altColor">
  <td class="colFirst"><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#quote-java.lang.String-">quote</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</code>
  <div class="block">Enquote a table or column name as necessary.</div>
  </td>
  </tr>
  <tr id="i29" class="rowColor">
  <td class="colFirst"><code>void</code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#setDataSource-javax.sql.DataSource-">setDataSource</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/javax/sql/DataSource.html?is-external=true" title="class or interface in javax.sql">DataSource</a>&nbsp;dataSource)</code>
  <div class="block">Configure the <a href="https://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> used with this instance.</div>
  </td>
  </tr>
  <tr id="i30" class="altColor">
  <td class="colFirst"><code>void</code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#setIsolationLevel-io.permazen.kv.sql.IsolationLevel-">setIsolationLevel</a></span>(<a href="../../../../io/permazen/kv/sql/IsolationLevel.html" title="enum in io.permazen.kv.sql">IsolationLevel</a>&nbsp;isolationLevel)</code>
  <div class="block">Configure the default transaction isolation level.</div>
  </td>
  </tr>
  <tr id="i31" class="rowColor">
  <td class="colFirst"><code>void</code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#setKeyColumnName-java.lang.String-">setKeyColumnName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;keyColumnName)</code>
  <div class="block">Configure the name of the column containing keys.</div>
  </td>
  </tr>
  <tr id="i32" class="altColor">
  <td class="colFirst"><code>void</code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#setRollbackForReadOnly-boolean-">setRollbackForReadOnly</a></span>(boolean&nbsp;rollbackForReadOnly)</code>
  <div class="block">Configure whether to rollback read-only transactions.</div>
  </td>
  </tr>
  <tr id="i33" class="rowColor">
  <td class="colFirst"><code>void</code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#setTableName-java.lang.String-">setTableName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableName)</code>
  <div class="block">Set the name of the key/value table.</div>
  </td>
  </tr>
  <tr id="i34" class="altColor">
  <td class="colFirst"><code>void</code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#setValueColumnName-java.lang.String-">setValueColumnName</a></span>(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;valueColumnName)</code>
  <div class="block">Configure the name of the column containing values.</div>
  </td>
  </tr>
  <tr id="i35" class="rowColor">
  <td class="colFirst"><code>void</code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#start--">start</a></span>()</code>
  <div class="block">Start this instance.</div>
  </td>
  </tr>
  <tr id="i36" class="altColor">
  <td class="colFirst"><code>void</code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#stop--">stop</a></span>()</code>
  <div class="block">Stop this instance.</div>
  </td>
  </tr>
  <tr id="i37" class="rowColor">
  <td class="colFirst"><code><a href="../../../../io/permazen/kv/KVTransactionException.html" title="class in io.permazen.kv">KVTransactionException</a></code></td>
  <td class="colLast"><code><span class="memberNameLink"><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#wrapException-io.permazen.kv.sql.SQLKVTransaction-java.sql.SQLException-">wrapException</a></span>(<a href="../../../../io/permazen/kv/sql/SQLKVTransaction.html" title="class in io.permazen.kv.sql">SQLKVTransaction</a>&nbsp;transaction,
               <a href="https://docs.oracle.com/javase/8/docs/api/java/sql/SQLException.html?is-external=true" title="class or interface in java.sql">SQLException</a>&nbsp;e)</code>
  <div class="block">Wrap the given <a href="https://docs.oracle.com/javase/8/docs/api/java/sql/SQLException.html?is-external=true" title="class or interface in java.sql"><code>SQLException</code></a> in the appropriate <a href="../../../../io/permazen/kv/KVTransactionException.html" title="class in io.permazen.kv"><code>KVTransactionException</code></a>.</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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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="https://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">
  <!-- ============ FIELD DETAIL =========== -->
  <ul class="blockList">
  <li class="blockList"><a name="field.detail">
  <!--   -->
  </a>
  <h3>Field Detail</h3>
  <a name="DEFAULT_TABLE_NAME">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>DEFAULT_TABLE_NAME</h4>
  <pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> DEFAULT_TABLE_NAME</pre>
  <div class="block">Default table name ("KV").</div>
  <dl>
  <dt><span class="seeLabel">See Also:</span></dt>
  <dd><a href="../../../../constant-values.html#io.permazen.kv.sql.SQLKVDatabase.DEFAULT_TABLE_NAME">Constant Field Values</a></dd>
  </dl>
  </li>
  </ul>
  <a name="DEFAULT_KEY_COLUMN_NAME">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>DEFAULT_KEY_COLUMN_NAME</h4>
  <pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> DEFAULT_KEY_COLUMN_NAME</pre>
  <div class="block">Default key column name ("kv_key").</div>
  <dl>
  <dt><span class="seeLabel">See Also:</span></dt>
  <dd><a href="../../../../constant-values.html#io.permazen.kv.sql.SQLKVDatabase.DEFAULT_KEY_COLUMN_NAME">Constant Field Values</a></dd>
  </dl>
  </li>
  </ul>
  <a name="DEFAULT_VALUE_COLUMN_NAME">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>DEFAULT_VALUE_COLUMN_NAME</h4>
  <pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> DEFAULT_VALUE_COLUMN_NAME</pre>
  <div class="block">Default value column name ("kv_value").</div>
  <dl>
  <dt><span class="seeLabel">See Also:</span></dt>
  <dd><a href="../../../../constant-values.html#io.permazen.kv.sql.SQLKVDatabase.DEFAULT_VALUE_COLUMN_NAME">Constant Field Values</a></dd>
  </dl>
  </li>
  </ul>
  <a name="OPTION_ISOLATION">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>OPTION_ISOLATION</h4>
  <pre>public static final&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> OPTION_ISOLATION</pre>
  <div class="block">Option key for <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#createTransaction-java.util.Map-"><code>createTransaction(Map)</code></a>. Value should be an <a href="../../../../io/permazen/kv/sql/IsolationLevel.html" title="enum in io.permazen.kv.sql"><code>IsolationLevel</code></a> instance,
   or the <a href="https://docs.oracle.com/javase/8/docs/api/java/lang/Enum.html?is-external=true#name" title="class or interface in java.lang"><code>name()</code></a> thereof.</div>
  <dl>
  <dt><span class="seeLabel">See Also:</span></dt>
  <dd><a href="../../../../constant-values.html#io.permazen.kv.sql.SQLKVDatabase.OPTION_ISOLATION">Constant Field Values</a></dd>
  </dl>
  </li>
  </ul>
  <a name="dataSource">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>dataSource</h4>
  <pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/javax/sql/DataSource.html?is-external=true" title="class or interface in javax.sql">DataSource</a> dataSource</pre>
  </li>
  </ul>
  <a name="tableName">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>tableName</h4>
  <pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> tableName</pre>
  <div class="block">The name of the key/value table. Default value is <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#DEFAULT_TABLE_NAME">"KV"</a>.</div>
  </li>
  </ul>
  <a name="keyColumnName">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>keyColumnName</h4>
  <pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> keyColumnName</pre>
  <div class="block">The name of the key column. Default value is <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#DEFAULT_KEY_COLUMN_NAME">"kv_key"</a>.</div>
  </li>
  </ul>
  <a name="valueColumnName">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>valueColumnName</h4>
  <pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a> valueColumnName</pre>
  <div class="block">The name of the value column. Default value is <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#DEFAULT_VALUE_COLUMN_NAME">"kv_value"</a>.</div>
  </li>
  </ul>
  <a name="isolationLevel">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>isolationLevel</h4>
  <pre>protected&nbsp;<a href="../../../../io/permazen/kv/sql/IsolationLevel.html" title="enum in io.permazen.kv.sql">IsolationLevel</a> isolationLevel</pre>
  <div class="block">The default transaction isolation level. Default is <a href="../../../../io/permazen/kv/sql/IsolationLevel.html#SERIALIZABLE"><code>IsolationLevel.SERIALIZABLE</code></a>.</div>
  </li>
  </ul>
  <a name="log">
  <!--   -->
  </a>
  <ul class="blockListLast">
  <li class="blockList">
  <h4>log</h4>
  <pre>protected final&nbsp;<a href="http://www.slf4j.org/apidocs/org/slf4j/Logger.html?is-external=true" title="class or interface in org.slf4j">Logger</a> log</pre>
  </li>
  </ul>
  </li>
  </ul>
  <!-- ========= CONSTRUCTOR DETAIL ======== -->
  <ul class="blockList">
  <li class="blockList"><a name="constructor.detail">
  <!--   -->
  </a>
  <h3>Constructor Detail</h3>
  <a name="SQLKVDatabase--">
  <!--   -->
  </a>
  <ul class="blockListLast">
  <li class="blockList">
  <h4>SQLKVDatabase</h4>
  <pre>public&nbsp;SQLKVDatabase()</pre>
  </li>
  </ul>
  </li>
  </ul>
  <!-- ============ METHOD DETAIL ========== -->
  <ul class="blockList">
  <li class="blockList"><a name="method.detail">
  <!--   -->
  </a>
  <h3>Method Detail</h3>
  <a name="getDataSource--">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>getDataSource</h4>
  <pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/javax/sql/DataSource.html?is-external=true" title="class or interface in javax.sql">DataSource</a>&nbsp;getDataSource()</pre>
  <div class="block">Get the <a href="https://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> used with this instance.</div>
  <dl>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd>the associated <a href="https://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></dd>
  </dl>
  </li>
  </ul>
  <a name="setDataSource-javax.sql.DataSource-">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>setDataSource</h4>
  <pre>public&nbsp;void&nbsp;setDataSource(<a href="https://docs.oracle.com/javase/8/docs/api/javax/sql/DataSource.html?is-external=true" title="class or interface in javax.sql">DataSource</a>&nbsp;dataSource)</pre>
  <div class="block">Configure the <a href="https://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> used with this instance.
  
   <p>
   Required property.</div>
  <dl>
  <dt><span class="paramLabel">Parameters:</span></dt>
  <dd><code>dataSource</code> - access to the underlying database</dd>
  </dl>
  </li>
  </ul>
  <a name="getTableName--">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>getTableName</h4>
  <pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;getTableName()</pre>
  <div class="block">Get the name of the table containing keys and values.
  
   <p>
   Default value is <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#DEFAULT_TABLE_NAME">"KV"</a>.</div>
  <dl>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd>key/value table name</dd>
  </dl>
  </li>
  </ul>
  <a name="setTableName-java.lang.String-">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>setTableName</h4>
  <pre>public&nbsp;void&nbsp;setTableName(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;tableName)</pre>
  <div class="block">Set the name of the key/value table.</div>
  <dl>
  <dt><span class="paramLabel">Parameters:</span></dt>
  <dd><code>tableName</code> - the name of the key/value table</dd>
  <dt><span class="throwsLabel">Throws:</span></dt>
  <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if <code>table</code> is null</dd>
  </dl>
  </li>
  </ul>
  <a name="getKeyColumnName--">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>getKeyColumnName</h4>
  <pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;getKeyColumnName()</pre>
  <div class="block">Get the name of the column containing keys.
  
   <p>
   Default value is <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#DEFAULT_KEY_COLUMN_NAME">"kv_key"</a>.</div>
  <dl>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd>the name of the key column</dd>
  </dl>
  </li>
  </ul>
  <a name="setKeyColumnName-java.lang.String-">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>setKeyColumnName</h4>
  <pre>public&nbsp;void&nbsp;setKeyColumnName(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;keyColumnName)</pre>
  <div class="block">Configure the name of the column containing keys.</div>
  <dl>
  <dt><span class="paramLabel">Parameters:</span></dt>
  <dd><code>keyColumnName</code> - the name of the key column</dd>
  <dt><span class="throwsLabel">Throws:</span></dt>
  <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if <code>keyColumnName</code> is null</dd>
  </dl>
  </li>
  </ul>
  <a name="getValueColumnName--">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>getValueColumnName</h4>
  <pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;getValueColumnName()</pre>
  <div class="block">Get the name of the column containing values.
  
   <p>
   Default value is <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#DEFAULT_VALUE_COLUMN_NAME">"kv_value"</a>.</div>
  <dl>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd>the name of the value column</dd>
  </dl>
  </li>
  </ul>
  <a name="setValueColumnName-java.lang.String-">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>setValueColumnName</h4>
  <pre>public&nbsp;void&nbsp;setValueColumnName(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;valueColumnName)</pre>
  <div class="block">Configure the name of the column containing values.</div>
  <dl>
  <dt><span class="paramLabel">Parameters:</span></dt>
  <dd><code>valueColumnName</code> - the name of the value column</dd>
  <dt><span class="throwsLabel">Throws:</span></dt>
  <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if <code>valueColumnName</code> is null</dd>
  </dl>
  </li>
  </ul>
  <a name="getIsolationLevel--">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>getIsolationLevel</h4>
  <pre>public&nbsp;<a href="../../../../io/permazen/kv/sql/IsolationLevel.html" title="enum in io.permazen.kv.sql">IsolationLevel</a>&nbsp;getIsolationLevel()</pre>
  <div class="block">Get the default transaction isolation level.
  
   <p>
   This may be overridden on a per-transaction basis; see <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#getIsolationLevel-java.util.Map-"><code>getIsolationLevel(Map)</code></a>.
  
   <p>
   Default value is <a href="../../../../io/permazen/kv/sql/IsolationLevel.html#SERIALIZABLE"><code>IsolationLevel.SERIALIZABLE</code></a>.</div>
  <dl>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd>isolation level</dd>
  </dl>
  </li>
  </ul>
  <a name="setIsolationLevel-io.permazen.kv.sql.IsolationLevel-">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>setIsolationLevel</h4>
  <pre>public&nbsp;void&nbsp;setIsolationLevel(<a href="../../../../io/permazen/kv/sql/IsolationLevel.html" title="enum in io.permazen.kv.sql">IsolationLevel</a>&nbsp;isolationLevel)</pre>
  <div class="block">Configure the default transaction isolation level.</div>
  <dl>
  <dt><span class="paramLabel">Parameters:</span></dt>
  <dd><code>isolationLevel</code> - isolation level</dd>
  <dt><span class="throwsLabel">Throws:</span></dt>
  <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if <code>isolationLevel</code> is null</dd>
  </dl>
  </li>
  </ul>
  <a name="isRollbackForReadOnly--">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>isRollbackForReadOnly</h4>
  <pre>public&nbsp;boolean&nbsp;isRollbackForReadOnly()</pre>
  <div class="block">Get whether to rollback read-only transactions.
  
   <p>
   If true, read-only transactions will be rolled back on commit. If false, mutations during read-only transactions
   will be captured in memory and not written to the database, and the underlying SQL transaction committed on commit.
   Some implementations require the latter in order to guarantee up-to-date reads within the transaction.
  
   <p>
   Default value is true.</div>
  <dl>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd>whether to use rollback when committing a read-only transaction</dd>
  </dl>
  </li>
  </ul>
  <a name="setRollbackForReadOnly-boolean-">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>setRollbackForReadOnly</h4>
  <pre>public&nbsp;void&nbsp;setRollbackForReadOnly(boolean&nbsp;rollbackForReadOnly)</pre>
  <div class="block">Configure whether to rollback read-only transactions.</div>
  <dl>
  <dt><span class="paramLabel">Parameters:</span></dt>
  <dd><code>rollbackForReadOnly</code> - true to use rollback when committing a read-only transaction.</dd>
  <dt><span class="seeLabel">See Also:</span></dt>
  <dd><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#isRollbackForReadOnly--"><code>isRollbackForReadOnly()</code></a></dd>
  </dl>
  </li>
  </ul>
  <a name="start--">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>start</h4>
  <pre><a href="https://docs.oracle.com/javase/8/docs/api/javax/annotation/PostConstruct.html?is-external=true" title="class or interface in javax.annotation">@PostConstruct</a>
  public&nbsp;void&nbsp;start()</pre>
  <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../io/permazen/kv/KVDatabase.html#start--">KVDatabase</a></code></span></div>
  <div class="block">Start this instance. This method must be called prior to creating any transactions.
  
   <p>
   This method is idempotent: if this instance is already started, nothing happens.
  
   <p>
   Whether an instance that has been started and stopped can be restarted is implementation-dependent.</div>
  <dl>
  <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
  <dd><code><a href="../../../../io/permazen/kv/KVDatabase.html#start--">start</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../io/permazen/kv/KVDatabase.html" title="interface in io.permazen.kv">KVDatabase</a></code></dd>
  </dl>
  </li>
  </ul>
  <a name="stop--">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>stop</h4>
  <pre><a href="https://docs.oracle.com/javase/8/docs/api/javax/annotation/PreDestroy.html?is-external=true" title="class or interface in javax.annotation">@PreDestroy</a>
  public&nbsp;void&nbsp;stop()</pre>
  <div class="block"><span class="descfrmTypeLabel">Description copied from interface:&nbsp;<code><a href="../../../../io/permazen/kv/KVDatabase.html#stop--">KVDatabase</a></code></span></div>
  <div class="block">Stop this instance.
  
   <p>
   This method is idempotent: if this instance has not been started, or is already stopped, nothing happens.</div>
  <dl>
  <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
  <dd><code><a href="../../../../io/permazen/kv/KVDatabase.html#stop--">stop</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../io/permazen/kv/KVDatabase.html" title="interface in io.permazen.kv">KVDatabase</a></code></dd>
  </dl>
  </li>
  </ul>
  <a name="initializeDatabaseIfNecessary-java.sql.Connection-">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>initializeDatabaseIfNecessary</h4>
  <pre>protected&nbsp;void&nbsp;initializeDatabaseIfNecessary(<a href="https://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html?is-external=true" title="class or interface in java.sql">Connection</a>&nbsp;connection)
                                        throws <a href="https://docs.oracle.com/javase/8/docs/api/java/sql/SQLException.html?is-external=true" title="class or interface in java.sql">SQLException</a></pre>
  <div class="block">Perform any required database initialization.
  
   <p>
   The implementation in <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html" title="class in io.permazen.kv.sql"><code>SQLKVDatabase</code></a> does nothing. Subclasses will
   typically invoke <code>CREATE TABLE ... IF NOT EXISTS</code> here, etc.</div>
  <dl>
  <dt><span class="paramLabel">Parameters:</span></dt>
  <dd><code>connection</code> - open database connection (will be closed by the caller of this method)</dd>
  <dt><span class="throwsLabel">Throws:</span></dt>
  <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/sql/SQLException.html?is-external=true" title="class or interface in java.sql">SQLException</a></code> - if an error occurs</dd>
  </dl>
  </li>
  </ul>
  <a name="createTransaction-java.util.Map-">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>createTransaction</h4>
  <pre>public&nbsp;<a href="../../../../io/permazen/kv/sql/SQLKVTransaction.html" title="class in io.permazen.kv.sql">SQLKVTransaction</a>&nbsp;createTransaction(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://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;options)</pre>
  <div class="block">Create a new transaction.
  
   <p>
   The implementation in <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html" title="class in io.permazen.kv.sql"><code>SQLKVDatabase</code></a> invokes <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#createTransactionConnection--"><code>createTransactionConnection()</code></a>
   to get a <a href="https://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> for the new transaction, then invokes these methods in order:
    <ol>
    <li><a href="https://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html?is-external=true#setTransactionIsolation-int-" title="class or interface in java.sql"><code>Connection.setTransactionIsolation()</code></a></li>
    <li><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#preBeginTransaction-java.sql.Connection-"><code>preBeginTransaction()</code></a></li>
    <li><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#beginTransaction-java.sql.Connection-"><code>beginTransaction()</code></a></li>
    <li><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#postBeginTransaction-java.sql.Connection-"><code>postBeginTransaction()</code></a></li>
    <li><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#createSQLKVTransaction-java.sql.Connection-"><code>createSQLKVTransaction()</code></a></li>
    </ol>
   and returns the result.</div>
  <dl>
  <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
  <dd><code><a href="../../../../io/permazen/kv/KVDatabase.html#createTransaction-java.util.Map-">createTransaction</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../io/permazen/kv/KVDatabase.html" title="interface in io.permazen.kv">KVDatabase</a></code></dd>
  <dt><span class="paramLabel">Parameters:</span></dt>
  <dd><code>options</code> - optional transaction options; may be null</dd>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd>newly created transaction</dd>
  <dt><span class="throwsLabel">Throws:</span></dt>
  <dd><code><a href="../../../../io/permazen/kv/KVDatabaseException.html" title="class in io.permazen.kv">KVDatabaseException</a></code> - if an unexpected error occurs</dd>
  <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</a></code> - if no <a href="https://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> is <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#setDataSource-javax.sql.DataSource-">configured</a></dd>
  </dl>
  </li>
  </ul>
  <a name="createTransaction--">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>createTransaction</h4>
  <pre>public&nbsp;<a href="../../../../io/permazen/kv/sql/SQLKVTransaction.html" title="class in io.permazen.kv.sql">SQLKVTransaction</a>&nbsp;createTransaction()</pre>
  <div class="block">Create a new transaction.
  
   <p>
   The implementation in <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html" title="class in io.permazen.kv.sql"><code>SQLKVDatabase</code></a> invokes <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#createTransaction-java.util.Map-"><code>createTransaction(null)</code></a>
   (i.e., with no options) and returns the result.</div>
  <dl>
  <dt><span class="overrideSpecifyLabel">Specified by:</span></dt>
  <dd><code><a href="../../../../io/permazen/kv/KVDatabase.html#createTransaction--">createTransaction</a></code>&nbsp;in interface&nbsp;<code><a href="../../../../io/permazen/kv/KVDatabase.html" title="interface in io.permazen.kv">KVDatabase</a></code></dd>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd>newly created transaction</dd>
  <dt><span class="throwsLabel">Throws:</span></dt>
  <dd><code><a href="../../../../io/permazen/kv/KVDatabaseException.html" title="class in io.permazen.kv">KVDatabaseException</a></code> - if an unexpected error occurs</dd>
  <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalStateException.html?is-external=true" title="class or interface in java.lang">IllegalStateException</a></code> - if no <a href="https://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> is <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#setDataSource-javax.sql.DataSource-">configured</a></dd>
  </dl>
  </li>
  </ul>
  <a name="getIsolationLevel-java.util.Map-">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>getIsolationLevel</h4>
  <pre>protected&nbsp;<a href="../../../../io/permazen/kv/sql/IsolationLevel.html" title="enum in io.permazen.kv.sql">IsolationLevel</a>&nbsp;getIsolationLevel(<a href="https://docs.oracle.com/javase/8/docs/api/java/util/Map.html?is-external=true" title="class or interface in java.util">Map</a>&lt;<a href="https://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;options)</pre>
  <div class="block">Extract the <a href="../../../../io/permazen/kv/sql/IsolationLevel.html" title="enum in io.permazen.kv.sql"><code>IsolationLevel</code></a>, if any, from the transaction options.
  
   <p>
   The implementation in <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html" title="class in io.permazen.kv.sql"><code>SQLKVDatabase</code></a> supports an <a href="../../../../io/permazen/kv/sql/IsolationLevel.html" title="enum in io.permazen.kv.sql"><code>IsolationLevel</code></a> under the key <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#OPTION_ISOLATION"><code>OPTION_ISOLATION</code></a>;
   also, the <a href="../../../../io/permazen/kv/sql/IsolationLevel.html" title="enum in io.permazen.kv.sql"><code>IsolationLevel</code></a> may be configured by the Spring
   <a href="../../../../io/permazen/spring/PermazenTransactionManager.html" title="class in io.permazen.spring"><code>PermazenTransactionManager</code></a>, for example, using the
   <a href="https://docs.spring.io/spring/docs/5.2.5.RELEASE/javadoc-api/org/springframework/transaction/annotation/Transactional.html?is-external=true" title="class or interface in org.springframework.transaction.annotation"><code>&#64;Transactional</code></a> annotation.</div>
  <dl>
  <dt><span class="paramLabel">Parameters:</span></dt>
  <dd><code>options</code> - transaction options</dd>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd>transaction isolation</dd>
  </dl>
  </li>
  </ul>
  <a name="createTransactionConnection--">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>createTransactionConnection</h4>
  <pre>protected&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html?is-external=true" title="class or interface in java.sql">Connection</a>&nbsp;createTransactionConnection()
                                            throws <a href="https://docs.oracle.com/javase/8/docs/api/java/sql/SQLException.html?is-external=true" title="class or interface in java.sql">SQLException</a></pre>
  <div class="block">Create a <a href="https://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> for a new transaction.
  
   <p>
   The implementation in <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html" title="class in io.permazen.kv.sql"><code>SQLKVDatabase</code></a> invokes <a href="https://docs.oracle.com/javase/8/docs/api/javax/sql/DataSource.html?is-external=true#getConnection--" title="class or interface in javax.sql"><code>DataSource.getConnection()</code></a> on the
   <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#dataSource">configured</a> <a href="https://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>, and then deletates to
   <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#configureConnection-java.sql.Connection-"><code>configureConnection()</code></a> to perform any required configuration
   of the new <a href="https://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>.</div>
  <dl>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd>new transaction <a href="https://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></dd>
  <dt><span class="throwsLabel">Throws:</span></dt>
  <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/sql/SQLException.html?is-external=true" title="class or interface in java.sql">SQLException</a></code> - if an error occurs</dd>
  </dl>
  </li>
  </ul>
  <a name="configureConnection-java.sql.Connection-">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>configureConnection</h4>
  <pre>protected&nbsp;void&nbsp;configureConnection(<a href="https://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html?is-external=true" title="class or interface in java.sql">Connection</a>&nbsp;connection)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/sql/SQLException.html?is-external=true" title="class or interface in java.sql">SQLException</a></pre>
  <div class="block">Configure a newly created <a href="https://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>.
  
   <p>
   The implementation in <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html" title="class in io.permazen.kv.sql"><code>SQLKVDatabase</code></a> does nothing.</div>
  <dl>
  <dt><span class="paramLabel">Parameters:</span></dt>
  <dd><code>connection</code> - newly created <a href="https://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></dd>
  <dt><span class="throwsLabel">Throws:</span></dt>
  <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/sql/SQLException.html?is-external=true" title="class or interface in java.sql">SQLException</a></code> - if an error occurs</dd>
  </dl>
  </li>
  </ul>
  <a name="preBeginTransaction-java.sql.Connection-">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>preBeginTransaction</h4>
  <pre>protected&nbsp;void&nbsp;preBeginTransaction(<a href="https://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html?is-external=true" title="class or interface in java.sql">Connection</a>&nbsp;connection)
                              throws <a href="https://docs.oracle.com/javase/8/docs/api/java/sql/SQLException.html?is-external=true" title="class or interface in java.sql">SQLException</a></pre>
  <div class="block">Subclass hook invoked just before opening a new SQL transaction.
  
   <p>
   The implementation in <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html" title="class in io.permazen.kv.sql"><code>SQLKVDatabase</code></a> does nothing. Note: subclasses must ensure the transaction is
   configured for the <a href="../../../../io/permazen/kv/sql/IsolationLevel.html" title="enum in io.permazen.kv.sql"><code>IsolationLevel</code></a> configured on this instance.</div>
  <dl>
  <dt><span class="paramLabel">Parameters:</span></dt>
  <dd><code>connection</code> - the <a href="https://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> for a new transaction</dd>
  <dt><span class="throwsLabel">Throws:</span></dt>
  <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/sql/SQLException.html?is-external=true" title="class or interface in java.sql">SQLException</a></code> - if an error occurs</dd>
  <dt><span class="seeLabel">See Also:</span></dt>
  <dd><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#createSQLKVTransaction-java.sql.Connection-"><code>createSQLKVTransaction()</code></a></dd>
  </dl>
  </li>
  </ul>
  <a name="beginTransaction-java.sql.Connection-">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>beginTransaction</h4>
  <pre>protected&nbsp;void&nbsp;beginTransaction(<a href="https://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html?is-external=true" title="class or interface in java.sql">Connection</a>&nbsp;connection)
                           throws <a href="https://docs.oracle.com/javase/8/docs/api/java/sql/SQLException.html?is-external=true" title="class or interface in java.sql">SQLException</a></pre>
  <div class="block">Open a new SQL transaction on the given <a href="https://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>.
  
   <p>
   The implementation in <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html" title="class in io.permazen.kv.sql"><code>SQLKVDatabase</code></a> invokes <a href="https://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html?is-external=true#setAutoCommit-boolean-" title="class or interface in java.sql"><code>Connection.setAutoCommit(false)</code></a>.</div>
  <dl>
  <dt><span class="paramLabel">Parameters:</span></dt>
  <dd><code>connection</code> - the <a href="https://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> for a new transaction</dd>
  <dt><span class="throwsLabel">Throws:</span></dt>
  <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/sql/SQLException.html?is-external=true" title="class or interface in java.sql">SQLException</a></code> - if an error occurs</dd>
  <dt><span class="seeLabel">See Also:</span></dt>
  <dd><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#createSQLKVTransaction-java.sql.Connection-"><code>createSQLKVTransaction()</code></a></dd>
  </dl>
  </li>
  </ul>
  <a name="postBeginTransaction-java.sql.Connection-">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>postBeginTransaction</h4>
  <pre>protected&nbsp;void&nbsp;postBeginTransaction(<a href="https://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html?is-external=true" title="class or interface in java.sql">Connection</a>&nbsp;connection)
                               throws <a href="https://docs.oracle.com/javase/8/docs/api/java/sql/SQLException.html?is-external=true" title="class or interface in java.sql">SQLException</a></pre>
  <div class="block">Subclass hook invoked just after opening a new SQL transaction.
  
   <p>
   The implementation in <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html" title="class in io.permazen.kv.sql"><code>SQLKVDatabase</code></a> does nothing. Note: subclasses must ensure the transaction is
   configured for the <a href="../../../../io/permazen/kv/sql/IsolationLevel.html" title="enum in io.permazen.kv.sql"><code>IsolationLevel</code></a> configured on this instance.</div>
  <dl>
  <dt><span class="paramLabel">Parameters:</span></dt>
  <dd><code>connection</code> - the <a href="https://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> for a new transaction</dd>
  <dt><span class="throwsLabel">Throws:</span></dt>
  <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/sql/SQLException.html?is-external=true" title="class or interface in java.sql">SQLException</a></code> - if an error occurs</dd>
  <dt><span class="seeLabel">See Also:</span></dt>
  <dd><a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html#createSQLKVTransaction-java.sql.Connection-"><code>createSQLKVTransaction()</code></a></dd>
  </dl>
  </li>
  </ul>
  <a name="createSQLKVTransaction-java.sql.Connection-">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>createSQLKVTransaction</h4>
  <pre>protected&nbsp;<a href="../../../../io/permazen/kv/sql/SQLKVTransaction.html" title="class in io.permazen.kv.sql">SQLKVTransaction</a>&nbsp;createSQLKVTransaction(<a href="https://docs.oracle.com/javase/8/docs/api/java/sql/Connection.html?is-external=true" title="class or interface in java.sql">Connection</a>&nbsp;connection)
                                             throws <a href="https://docs.oracle.com/javase/8/docs/api/java/sql/SQLException.html?is-external=true" title="class or interface in java.sql">SQLException</a></pre>
  <div class="block">Create a new <a href="../../../../io/permazen/kv/sql/SQLKVTransaction.html" title="class in io.permazen.kv.sql"><code>SQLKVTransaction</code></a> for a new transaction given the specified <a href="https://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>.
   There will already be an SQL transaction open on <code>connection</code>.
  
   <p>
   The implementation in <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html" title="class in io.permazen.kv.sql"><code>SQLKVDatabase</code></a> just invokes
   <a href="../../../../io/permazen/kv/sql/SQLKVTransaction.html#SQLKVTransaction-io.permazen.kv.sql.SQLKVDatabase-java.sql.Connection-"><code>new SQLKVTransaction(this, connection)</code></a>.</div>
  <dl>
  <dt><span class="paramLabel">Parameters:</span></dt>
  <dd><code>connection</code> - the <a href="https://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> for a new transaction</dd>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd>newly created transaction</dd>
  <dt><span class="throwsLabel">Throws:</span></dt>
  <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/sql/SQLException.html?is-external=true" title="class or interface in java.sql">SQLException</a></code> - if an error occurs</dd>
  </dl>
  </li>
  </ul>
  <a name="createGetStatement--">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>createGetStatement</h4>
  <pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;createGetStatement()</pre>
  <div class="block">Create an SQL statement that reads the value column associated with key <code>&#63;1</code>.</div>
  <dl>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd>SQL query statement</dd>
  </dl>
  </li>
  </ul>
  <a name="createGetAtLeastStatement-boolean-">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>createGetAtLeastStatement</h4>
  <pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;createGetAtLeastStatement(boolean&nbsp;reverse)</pre>
  <div class="block">Create an SQL statement that reads the key and value columns (in that order) associated
   with the smallest key greater than or equal to <code>&#63;1</code>, if any.</div>
  <dl>
  <dt><span class="paramLabel">Parameters:</span></dt>
  <dd><code>reverse</code> - true to return rows in descending key order, false to return rows in ascending key order</dd>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd>SQL query statement</dd>
  </dl>
  </li>
  </ul>
  <a name="createGetAtMostStatement-boolean-">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>createGetAtMostStatement</h4>
  <pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;createGetAtMostStatement(boolean&nbsp;reverse)</pre>
  <div class="block">Create an SQL statement that reads the key and value columns (in that order)
   associated with the greatest key strictly less than <code>&#63;1</code>, if any.</div>
  <dl>
  <dt><span class="paramLabel">Parameters:</span></dt>
  <dd><code>reverse</code> - true to return rows in descending key order, false to return rows in ascending key order</dd>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd>SQL query statement</dd>
  </dl>
  </li>
  </ul>
  <a name="createGetRangeStatement-boolean-">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>createGetRangeStatement</h4>
  <pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;createGetRangeStatement(boolean&nbsp;reverse)</pre>
  <div class="block">Create an SQL statement that reads the key and value columns (in that order) associated with all keys
   in the range <code>&#63;1</code> (inclusive) to <code>&#63;2</code> (exclusive), possibly reversed.</div>
  <dl>
  <dt><span class="paramLabel">Parameters:</span></dt>
  <dd><code>reverse</code> - true to return rows in descending key order, false to return rows in ascending key order</dd>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd>SQL query statement</dd>
  </dl>
  </li>
  </ul>
  <a name="createGetAllStatement-boolean-">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>createGetAllStatement</h4>
  <pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;createGetAllStatement(boolean&nbsp;reverse)</pre>
  <div class="block">Create an SQL statement that reads all of the key and value columns (in that order), possibly reversed.</div>
  <dl>
  <dt><span class="paramLabel">Parameters:</span></dt>
  <dd><code>reverse</code> - true to return rows in descending key order, false to return rows in ascending key order</dd>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd>SQL query statement</dd>
  </dl>
  </li>
  </ul>
  <a name="createPutStatement--">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>createPutStatement</h4>
  <pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;createPutStatement()</pre>
  <div class="block">Create an SQL statement that inserts the key/value pair with key <code>&#63;1</code> and value <code>&#63;2</code>
   A row with key <code>&#63;1</code> may already exist; if so, the value should be updated to
   <code>&#63;2</code> (if syntax requires it, the value may be updated to <code>&#63;3</code> instead;
   <code>&#63;3</code>, if it exists, will be set to the same value as <code>&#63;2</code>).</div>
  <dl>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd>SQL insertion statement</dd>
  </dl>
  </li>
  </ul>
  <a name="createRemoveStatement--">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>createRemoveStatement</h4>
  <pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;createRemoveStatement()</pre>
  <div class="block">Create an SQL statement that deletes the row associated with key <code>&#63;1</code>, if any.
   Note that the key may or may not exist prior to this method being invoked.</div>
  <dl>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd>SQL delete statement</dd>
  </dl>
  </li>
  </ul>
  <a name="createRemoveRangeStatement--">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>createRemoveRangeStatement</h4>
  <pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;createRemoveRangeStatement()</pre>
  <div class="block">Create an SQL statement that deletes all rows with keys in the range <code>&#63;1</code> (inclusive}
   to <code>&#63;2</code> (exclusive).</div>
  <dl>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd>SQL delete statement</dd>
  </dl>
  </li>
  </ul>
  <a name="createRemoveAtLeastStatement--">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>createRemoveAtLeastStatement</h4>
  <pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;createRemoveAtLeastStatement()</pre>
  <div class="block">Create an SQL statement that deletes all rows with keys greater than or equal to <code>&#63;1</code>.</div>
  <dl>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd>SQL delete statement</dd>
  </dl>
  </li>
  </ul>
  <a name="createRemoveAtMostStatement--">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>createRemoveAtMostStatement</h4>
  <pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;createRemoveAtMostStatement()</pre>
  <div class="block">Create an SQL statement that deletes all rows with keys strictly less than <code>&#63;1</code>.</div>
  <dl>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd>SQL delete statement</dd>
  </dl>
  </li>
  </ul>
  <a name="createRemoveAllStatement--">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>createRemoveAllStatement</h4>
  <pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;createRemoveAllStatement()</pre>
  <div class="block">Create an SQL statement that deletes all rows.</div>
  <dl>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd>SQL delete statement</dd>
  </dl>
  </li>
  </ul>
  <a name="limitSingleRow-java.lang.String-">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>limitSingleRow</h4>
  <pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;limitSingleRow(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;sql)</pre>
  <div class="block">Modify the given SQL statement so that only one row is returned.
  
   <p>
   This is an optional method; returning <code>statement</code> unmodified is acceptable, but subclasses may
   be able to improve efficiency by modifying the SQL statement in a vendor-specific manner to only return one row.
  
   <p>
   The implementation in <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html" title="class in io.permazen.kv.sql"><code>SQLKVDatabase</code></a> returns its parameter unchanged.</div>
  <dl>
  <dt><span class="paramLabel">Parameters:</span></dt>
  <dd><code>sql</code> - SQL statement</dd>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd>SQL statement</dd>
  </dl>
  </li>
  </ul>
  <a name="quote-java.lang.String-">
  <!--   -->
  </a>
  <ul class="blockList">
  <li class="blockList">
  <h4>quote</h4>
  <pre>public&nbsp;<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;quote(<a href="https://docs.oracle.com/javase/8/docs/api/java/lang/String.html?is-external=true" title="class or interface in java.lang">String</a>&nbsp;name)</pre>
  <div class="block">Enquote a table or column name as necessary.
  
   <p>
   The implementation in <a href="../../../../io/permazen/kv/sql/SQLKVDatabase.html" title="class in io.permazen.kv.sql"><code>SQLKVDatabase</code></a> returns its parameter unchanged.</div>
  <dl>
  <dt><span class="paramLabel">Parameters:</span></dt>
  <dd><code>name</code> - table or column name</dd>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd><code>name</code> enquoted as necessary for this database type</dd>
  <dt><span class="throwsLabel">Throws:</span></dt>
  <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/IllegalArgumentException.html?is-external=true" title="class or interface in java.lang">IllegalArgumentException</a></code> - if <code>name</code> is null</dd>
  </dl>
  </li>
  </ul>
  <a name="wrapException-io.permazen.kv.sql.SQLKVTransaction-java.sql.SQLException-">
  <!--   -->
  </a>
  <ul class="blockListLast">
  <li class="blockList">
  <h4>wrapException</h4>
  <pre>public&nbsp;<a href="../../../../io/permazen/kv/KVTransactionException.html" title="class in io.permazen.kv">KVTransactionException</a>&nbsp;wrapException(<a href="../../../../io/permazen/kv/sql/SQLKVTransaction.html" title="class in io.permazen.kv.sql">SQLKVTransaction</a>&nbsp;transaction,
                                              <a href="https://docs.oracle.com/javase/8/docs/api/java/sql/SQLException.html?is-external=true" title="class or interface in java.sql">SQLException</a>&nbsp;e)</pre>
  <div class="block">Wrap the given <a href="https://docs.oracle.com/javase/8/docs/api/java/sql/SQLException.html?is-external=true" title="class or interface in java.sql"><code>SQLException</code></a> in the appropriate <a href="../../../../io/permazen/kv/KVTransactionException.html" title="class in io.permazen.kv"><code>KVTransactionException</code></a>.</div>
  <dl>
  <dt><span class="paramLabel">Parameters:</span></dt>
  <dd><code>transaction</code> - the <a href="../../../../io/permazen/kv/sql/SQLKVTransaction.html" title="class in io.permazen.kv.sql"><code>SQLKVTransaction</code></a> in which the exception occured</dd>
  <dd><code>e</code> - SQL exception</dd>
  <dt><span class="returnLabel">Returns:</span></dt>
  <dd>appropriate <a href="../../../../io/permazen/kv/KVTransactionException.html" title="class in io.permazen.kv"><code>KVTransactionException</code></a> with chained exception <code>e</code></dd>
  <dt><span class="throwsLabel">Throws:</span></dt>
  <dd><code><a href="https://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html?is-external=true" title="class or interface in java.lang">NullPointerException</a></code> - if <code>e</code> is null</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/SQLKVDatabase.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="../../../../io/permazen/kv/sql/SQLDriverKVImplementation.Config.html" title="class in io.permazen.kv.sql"><span class="typeNameLink">Prev&nbsp;Class</span></a></li>
  <li><a href="../../../../io/permazen/kv/sql/SQLKVTransaction.html" title="class in io.permazen.kv.sql"><span class="typeNameLink">Next&nbsp;Class</span></a></li>
  </ul>
  <ul class="navList">
  <li><a href="../../../../index.html?io/permazen/kv/sql/SQLKVDatabase.html" target="_top">Frames</a></li>
  <li><a href="SQLKVDatabase.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><a href="#field.summary">Field</a>&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><a href="#field.detail">Field</a>&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; 2020. All rights reserved.</small></p>
  </body>
  </html>
  