blob: a0240b6d7e5c9209dd355ce0d00caf24d77ee4ca [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-61232409-1"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-61232409-1');
</script>
<!-- Yandex.Metrika counter -->
<script type="text/javascript" >
(function(m,e,t,r,i,k,a){m[i]=m[i]||function(){(m[i].a=m[i].a||[]).push(arguments)};
m[i].l=1*new Date();k=e.createElement(t),a=e.getElementsByTagName(t)[0],k.async=1,k.src=r,a.parentNode.insertBefore(k,a)})
(window, document, "script", "https://mc.yandex.ru/metrika/tag.js", "ym");
ym(72949126, "init", {
clickmap:true,
trackLinks:true,
accurateTrackBounce:true,
webvisor:true
});
</script>
<noscript><div><img src="https://mc.yandex.ru/watch/72949126" style="position:absolute; left:-9999px;" alt="" /></div></noscript>
<!-- /Yandex.Metrika counter -->
<!-- Bugyard widget embed -->
<script type="text/javascript">!function(){if("function"!=typeof window.bugyard){var a=function(){a.c(arguments)};a.q=[],a.c=function(b){a.q.push(b)},window.bugyard=a;var b=document.createElement("script");b.setAttribute("data-bugyard","610961912c35ff001493163a"),b.setAttribute("async","async"),b.setAttribute("defer","defer"),b.setAttribute("src","https://widget.bugyard.io/bugyard.min.js"),document.getElementsByTagName("head")[0].appendChild(b)}}(); window.bugyard("hideButton"); </script>
<link rel="preload" href='/assets/js/code-tabs.js?1' as="script" crossorigin>
<link rel="preload" href='/assets/js/page-nav.js' as="script" crossorigin>
<link rel="preload" href='/assets/js/docs-menu.js?20201005' as="script" crossorigin>
<style>:root{--gg-red:#ec1c24;--gg-orange:#ec1c24;--gg-orange-dark:#bc440b;--gg-orange-filter:invert(47%) sepia(61%) saturate(1950%) hue-rotate(345deg) brightness(100%) contrast(95%);--gg-dark-gray:#333333;--orange-line-thickness:3px;--block-code-background:rgba(241, 241, 241, 20%);--inline-code-background:rgba(241, 241, 241, 90%);--padding-top:25px;--link-color:#ec1c24;--body-background:#fcfcfc}header{min-height:var(--header-height);background:#fff;box-shadow:0 4px 10px 0 #eee,0 0 4px 0 #d5d5d5;z-index:1}header>.container{display:grid;grid-template-columns:auto auto 1fr auto auto auto;grid-template-areas:'left-toggle home nav ver api search lang';grid-template-rows:40px;flex-direction:row;align-items:center;justify-content:flex-start;padding:12px 20px;max-width:1400px;margin:0 auto}header nav>ul{padding:0;margin:0;list-style:none;display:inherit}header .dropdown{display:none;position:fixed;top:calc(var(--header-height) - 12px);width:auto;background:#fff;box-shadow:0 4px 4px 0 rgba(0,0,0,.24),0 0 4px 0 rgba(0,0,0,.12);border-radius:4px;padding-top:10px;padding-bottom:12px;z-index:2}header .dropdown li{display:flex}header .dropdown a{color:grey!important;font-size:16px;padding-top:5px;padding-bottom:4px}header .menu{border:none;background:0 0;width:40px;height:40px;margin-right:12px;grid-area:left-toggle}header .menu img{width:18px;height:12px}header .search-close,header .top-nav-toggle{background:0 0;border:none;padding:0;width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;color:var(--gg-dark-gray);font-size:26px}header .search-toggle{grid-area:search}header .top-nav-toggle{grid-area:top-toggle}header .home{grid-area:home;margin-right:auto}header .home img{height:36px}header #api-docs{grid-area:api;margin:0;display:flex}header #api-docs .dropdown{padding:.5em 0}header #api-docs a{padding:9px 14px;color:var(--gg-dark-gray)!important;text-decoration:none;white-space:nowrap}header #api-docs .dropdown-item a{font-weight:400;display:block;width:100%;min-width:150px}header #lang-selector li{list-style:none;display:flex;padding:9px 14px}header #lang-selector li a{display:flex;color:#000;align-items:center}header #lang-selector li a span{font-size:10px;margin-left:5px}header #lang-selector li a img{width:25px}header #lang-selector li .dropdown{margin-left:-70px}header #lang-selector li .dropdown .dropdown-item{padding:0 1em;margin-bottom:8px}header #lang-selector li .dropdown .dropdown-item a span{font-size:14px}header .search{margin-left:auto;margin-right:20px;grid-area:search}header .search input[type=search]{color:var(--gg-dark-gray);background:rgba(255,255,255,.8);border:1px solid #ccc;padding:10px 15px;font-family:inherit;max-width:148px;height:37px;font-size:14px;-webkit-appearance:unset;appearance:unset}header #version-selector{list-style:none;grid-area:ver;line-height:28px;border-radius:0;margin-right:10px;border:none;color:var(--gg-dark-gray);padding:5px 16px 5px 10px;white-space:nowrap;font-size:14px;width:auto;text-align:right;box-sizing:border-box;text-align-last:right;-moz-appearance:none;-webkit-appearance:none;appearance:none;direction:rtl}header #version-selector option{direction:ltr}header>nav{grid-area:nav;font-size:18px;display:flex;flex-direction:row;margin:0 20px}header #lang-selector{grid-area:lang}header .search-close{margin-right:10px}@media (max-width:600px){header .search{margin-right:5px}header .search input[type=search]{max-width:110px}}header:not(.narrow-header) .search-close,header:not(.narrow-header) .top-nav-toggle{display:none}@media (max-width:670px){header>.container{grid-template-columns:auto 1fr auto;grid-template-areas:'left-toggle home search' 'ver api lang'}header #lang-selector li{justify-content:flex-end}}pre,pre.rouge{padding:8px 15px;background:var(--block-code-background)!important;border-radius:5px;border:1px solid #e5e5e5;overflow-x:auto;min-height:36px;line-height:18px;color:#545454}code{color:#545454}pre.rouge code{background:0 0!important}:not(pre)>code{background:var(--inline-code-background);padding:.1em .5em;background-clip:padding-box;border-radius:3px;color:#545454;font-size:90%}.listingblock .content{position:relative}.highlight{color:#586e75}.highlight .c1{color:#657b83}.highlight .nt{color:#b58900}.highlight .o{color:#93a1a1}.highlight .k{color:#6c71c4}.highlight .kt{color:#cb4b16}.highlight .s,.highlight .s1{color:#859900}.highlight .nc{color:#b58900}.highlight .na{color:#268bd2}body{font-family:'Open Sans',sans-serif}h1,h2{color:#000;font-weight:400;font-family:'Open Sans'}h1{font-size:36px;line-height:40px}a{text-decoration:none;color:var(--link-color)}section{color:#545454}.admonitionblock .icon .title{display:none}body{--header-height:64px;--promotion-bar-height:35px;--footer-height:104px;--footer-gap:60px;padding:0;margin:0;display:flex;flex-direction:column;min-height:100vh;background-color:var(--body-background);font-family:'Open Sans',sans-serif}body>section{flex:1}header{position:-webkit-sticky;position:sticky;top:0;z-index:2}*{box-sizing:border-box}@media (max-width:670px){body{--header-height:97px}}.left-nav{padding:10px 20px;width:289px;overflow-y:auto;top:calc(var(--header-height) + var(--promotion-bar-height));height:calc(100vh - var(--header-height) - var(--promotion-bar-height));font-family:'Open Sans';padding-top:var(--padding-top);background-color:var(--body-background)}.left-nav li{list-style:none}.left-nav a,.left-nav button{text-decoration:none;color:#757575;font-size:16px;display:inline-flex;width:100%;margin:2px 0;padding:.25em .375em;background:0 0;border:none;font:inherit;text-align:left}.left-nav a.active{color:var(--link-color)}.left-nav .nav-group{margin-left:6px;font-size:14px}.left-nav nav{border-left:2px solid #ddd;margin-bottom:5px}.left-nav nav.collapsed{display:none}.left-nav nav>li>a,.left-nav nav>li>button{padding-left:20px;text-align:left}.left-nav nav>li>a.active{border-left:var(--orange-line-thickness) solid var(--active-color);padding-left:calc(20px - var(--orange-line-thickness))}.left-nav nav.sub_pages{border:none}.left-nav nav.sub_pages a{padding-left:32px}.left-nav .state-indicator{margin-left:auto;margin-top:5px;width:6.2px;height:10px;flex:0 0 auto;filter:invert(49%) sepia(4%) saturate(5%) hue-rotate(23deg) brightness(92%) contrast(90%)}.left-nav button.expanded .state-indicator{transform:rotate(90deg)}.right-nav{width:289px;padding:12px 26px;overflow-y:auto;height:calc(100vh - var(--header-height));top:0;position:-webkit-sticky;position:sticky;display:flex;flex-direction:column;font-family:'Open sans';padding-top:var(--padding-top);background-color:#fff}.right-nav ul{list-style:none;padding:0;margin:0}.right-nav li{padding:0}.right-nav a{--border-width:0px;font-size:14px;color:#757575;padding-left:calc(15px * var(--nesting-level) + 8px - var(--border-width));margin:.3em 0;display:inline-block}.right-nav .sectlevel1{border-left:2px solid #ddd}.right-nav .sectlevel1{--nesting-level:0}.right-nav .sectlevel2{--nesting-level:1}.right-nav .sectlevel3{--nesting-level:2}@media (max-width:1200px){.right-nav{width:230px}}.right-nav footer{font-size:12px;padding:calc(var(--footer-gap) * .3) 0 5px;text-align:left;margin:auto 0 0}section.page-docs{display:grid;grid-template-columns:auto 1fr auto;grid-template-rows:100%;grid-template-areas:'left-nav content right-nav';line-height:20px;max-width:1440px;margin:auto;width:100%}section.page-docs>article{border-left:1px solid #eee;background-color:#fff;padding:0 50px 30px;grid-area:content;overflow:hidden;font-family:sans-serif;font-size:16px;color:#545454;line-height:1.6em}section.page-docs>article h1,section.page-docs>article h2{font-family:'Open Sans'}@media (max-width:800px){section.page-docs>article{padding-left:15px;padding-right:15px}}section.page-docs .edit-link{position:relative;top:10px;right:10px;float:right;padding-top:calc(var(--header-height) + var(--padding-top));margin-top:calc((-1 * var(--header-height)))}section.page-docs h1,section.page-docs h2{margin-bottom:0}section.page-docs h2[id]{margin-top:var(--margin-top);margin-bottom:calc(var(--margin-top) * .5);z-index:-1}section.page-docs .title{font-style:italic}section.page-docs h2[id]{--margin-top:1.2em}.left-nav{bottom:0;position:-webkit-sticky;position:sticky}.left-nav{grid-area:left-nav}.right-nav{grid-area:right-nav}.left-nav__overlay{display:none;background:rgba(0,0,0,.5);z-index:1;position:fixed;top:var(--header-height);bottom:0;left:0;right:0}@media (max-width:990px){body:not(.hide-left-nav) .left-nav__overlay{display:block}nav.left-nav{background:#fafafa;grid-area:left-nav;box-shadow:0 4px 4px 0 rgba(0,0,0,.24),0 0 4px 0 rgba(0,0,0,.12);min-height:calc(100vh - var(--header-height));max-height:calc(100vh - var(--header-height));position:fixed;bottom:0;top:var(--header-height);z-index:2}section.page-docs>article{grid-column-start:left-nav;grid-column-end:content;grid-row:content}}@media (max-width:800px){nav.right-nav{display:none}}:target:before{content:"";display:block;margin-top:calc(var(--header-height) * -1);height:var(--header-height);width:1px}@media (min-width:600px) and (max-width:900px){:target:before{content:"";display:block;width:1px;margin-top:-150px;height:150px}}
#header #promotion-bar { background-color: #333333; padding: 8px; }
#header #promotion-bar p { font-size: 14px; line-height: 1.4em; font-weight: 600; padding: 0; margin: 0; color: #f0f0f0; text-align: center;}
#header #promotion-bar p a { color: #FCB903; } </style>
<meta name="ignite-version" content="2.11.1" />
<title>JDBC Driver | Ignite Documentation</title>
<link rel="canonical" href="/docs/2.11.1/SQL/JDBC/jdbc-driver" />
<META NAME="ROBOTS" CONTENT="NOINDEX" />
<link rel="shortcut icon" href="/favicon.ico">
<meta name='viewport' content='width=device-width, height=device-height, initial-scale=1.0, minimum-scale=1.0'>
<link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;600;700&display=swap" />
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;600;700&display=swap" media="print" onload="this.media='all'">
<noscript>
<link href="https://fonts.googleapis.com/css2?family=Open+Sans:wght@300;400;600;700&display=swap" rel="stylesheet">
</noscript>
<script>
// AnchorJS - v4.2.0 - 2019-01-01
// https://github.com/bryanbraun/anchorjs
// Copyright (c) 2019 Bryan Braun; Licensed MIT
!function(A,e){"use strict";"function"==typeof define&&define.amd?define([],e):"object"==typeof module&&module.exports?module.exports=e():(A.AnchorJS=e(),A.anchors=new A.AnchorJS)}(this,function(){"use strict";return function(A){function f(A){A.icon=A.hasOwnProperty("icon")?A.icon:"",A.visible=A.hasOwnProperty("visible")?A.visible:"hover",A.placement=A.hasOwnProperty("placement")?A.placement:"right",A.ariaLabel=A.hasOwnProperty("ariaLabel")?A.ariaLabel:"Anchor",A.class=A.hasOwnProperty("class")?A.class:"",A.base=A.hasOwnProperty("base")?A.base:"",A.truncate=A.hasOwnProperty("truncate")?Math.floor(A.truncate):64,A.titleText=A.hasOwnProperty("titleText")?A.titleText:""}function p(A){var e;if("string"==typeof A||A instanceof String)e=[].slice.call(document.querySelectorAll(A));else{if(!(Array.isArray(A)||A instanceof NodeList))throw new Error("The selector provided to AnchorJS was invalid.");e=[].slice.call(A)}return e}this.options=A||{},this.elements=[],f(this.options),this.isTouchDevice=function(){return!!("ontouchstart"in window||window.DocumentTouch&&document instanceof DocumentTouch)},this.add=function(A){var e,t,i,n,o,s,a,r,c,h,l,u,d=[];if(f(this.options),"touch"===(l=this.options.visible)&&(l=this.isTouchDevice()?"always":"hover"),A||(A="h2, h3, h4, h5, h6"),0===(e=p(A)).length)return this;for(function(){if(null===document.head.querySelector("style.anchorjs")){var A,e=document.createElement("style");e.className="anchorjs",e.appendChild(document.createTextNode("")),void 0===(A=document.head.querySelector('[rel="stylesheet"], style'))?document.head.appendChild(e):document.head.insertBefore(e,A),e.sheet.insertRule(" .anchorjs-link { opacity: 0; text-decoration: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; }",e.sheet.cssRules.length),e.sheet.insertRule(" *:hover > .anchorjs-link, .anchorjs-link:focus { opacity: 1; }",e.sheet.cssRules.length),e.sheet.insertRule(" [data-anchorjs-icon]::after { content: attr(data-anchorjs-icon); }",e.sheet.cssRules.length),e.sheet.insertRule(' @font-face { font-family: "anchorjs-icons"; src: url(data:n/a;base64,AAEAAAALAIAAAwAwT1MvMg8yG2cAAAE4AAAAYGNtYXDp3gC3AAABpAAAAExnYXNwAAAAEAAAA9wAAAAIZ2x5ZlQCcfwAAAH4AAABCGhlYWQHFvHyAAAAvAAAADZoaGVhBnACFwAAAPQAAAAkaG10eASAADEAAAGYAAAADGxvY2EACACEAAAB8AAAAAhtYXhwAAYAVwAAARgAAAAgbmFtZQGOH9cAAAMAAAAAunBvc3QAAwAAAAADvAAAACAAAQAAAAEAAHzE2p9fDzz1AAkEAAAAAADRecUWAAAAANQA6R8AAAAAAoACwAAAAAgAAgAAAAAAAAABAAADwP/AAAACgAAA/9MCrQABAAAAAAAAAAAAAAAAAAAAAwABAAAAAwBVAAIAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAMCQAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAg//0DwP/AAEADwABAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAAIAAAACgAAxAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADAAAAAIAAgAAgAAACDpy//9//8AAAAg6cv//f///+EWNwADAAEAAAAAAAAAAAAAAAAACACEAAEAAAAAAAAAAAAAAAAxAAACAAQARAKAAsAAKwBUAAABIiYnJjQ3NzY2MzIWFxYUBwcGIicmNDc3NjQnJiYjIgYHBwYUFxYUBwYGIwciJicmNDc3NjIXFhQHBwYUFxYWMzI2Nzc2NCcmNDc2MhcWFAcHBgYjARQGDAUtLXoWOR8fORYtLTgKGwoKCjgaGg0gEhIgDXoaGgkJBQwHdR85Fi0tOAobCgoKOBoaDSASEiANehoaCQkKGwotLXoWOR8BMwUFLYEuehYXFxYugC44CQkKGwo4GkoaDQ0NDXoaShoKGwoFBe8XFi6ALjgJCQobCjgaShoNDQ0NehpKGgobCgoKLYEuehYXAAAADACWAAEAAAAAAAEACAAAAAEAAAAAAAIAAwAIAAEAAAAAAAMACAAAAAEAAAAAAAQACAAAAAEAAAAAAAUAAQALAAEAAAAAAAYACAAAAAMAAQQJAAEAEAAMAAMAAQQJAAIABgAcAAMAAQQJAAMAEAAMAAMAAQQJAAQAEAAMAAMAAQQJAAUAAgAiAAMAAQQJAAYAEAAMYW5jaG9yanM0MDBAAGEAbgBjAGgAbwByAGoAcwA0ADAAMABAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAP) format("truetype"); }',e.sheet.cssRules.length)}}(),t=document.querySelectorAll("[id]"),i=[].map.call(t,function(A){return A.id}),o=0;o<e.length;o++)if(this.hasAnchorJSLink(e[o]))d.push(o);else{if(e[o].hasAttribute("id"))n=e[o].getAttribute("id");else if(e[o].hasAttribute("data-anchor-id"))n=e[o].getAttribute("data-anchor-id");else{for(c=r=this.urlify(e[o].textContent),a=0;void 0!==s&&(c=r+"-"+a),a+=1,-1!==(s=i.indexOf(c)););s=void 0,i.push(c),e[o].setAttribute("id",c),n=c}n.replace(/-/g," "),(h=document.createElement("a")).className="anchorjs-link "+this.options.class,h.setAttribute("aria-label",this.options.ariaLabel),h.setAttribute("data-anchorjs-icon",this.options.icon),this.options.titleText&&(h.title=this.options.titleText),u=document.querySelector("base")?window.location.pathname+window.location.search:"",u=this.options.base||u,h.href=u+"#"+n,"always"===l&&(h.style.opacity="1"),""===this.options.icon&&(h.style.font="1em/1 anchorjs-icons","left"===this.options.placement&&(h.style.lineHeight="inherit")),"left"===this.options.placement?(h.style.position="absolute",h.style.marginLeft="-1em",h.style.paddingRight="0.5em",e[o].insertBefore(h,e[o].firstChild)):(h.style.paddingLeft="0.375em",e[o].appendChild(h))}for(o=0;o<d.length;o++)e.splice(d[o]-o,1);return this.elements=this.elements.concat(e),this},this.remove=function(A){for(var e,t,i=p(A),n=0;n<i.length;n++)(t=i[n].querySelector(".anchorjs-link"))&&(-1!==(e=this.elements.indexOf(i[n]))&&this.elements.splice(e,1),i[n].removeChild(t));return this},this.removeAll=function(){this.remove(this.elements)},this.urlify=function(A){return this.options.truncate||f(this.options),A.trim().replace(/\'/gi,"").replace(/[& +$,:;=?@"#{}|^~[`%!'<>\]\.\/\(\)\*\\\n\t\b\v]/g,"-").replace(/-{2,}/g,"-").substring(0,this.options.truncate).replace(/^-+|-+$/gm,"").toLowerCase()},this.hasAnchorJSLink=function(A){var e=A.firstChild&&-1<(" "+A.firstChild.className+" ").indexOf(" anchorjs-link "),t=A.lastChild&&-1<(" "+A.lastChild.className+" ").indexOf(" anchorjs-link ");return e||t||!1}}});
</script>
</head>
<body>
<header>
<!--#include virtual="/includes/promotion_banner.html" -->
<div class="container">
<button type='button' class='menu' title='Docs menu'>
<img src="/assets/images/menu-icon.svg" width="18" height="12" alt="menu icon" />
</button>
<div class='home'>
<a href="/" class='home' title='Apache Ignite home'>
<img src="/assets/images/apache_ignite_logo.svg" alt="Apache Ignite logo" width="103" height="36" >
</a>
</div>
<select id="version-selector">
<option value="2.11.1">2.11.1</option>
</select>
<nav id="api-docs"><ul>
<li><a href="#">APIs</a>
<nav class='dropdown'>
<ul>
<li class="dropdown-item"><a href="/releases/latest/javadoc/index.html">Java</a></li>
<li class="dropdown-item"><a href="/releases/latest/dotnetdoc/api/">C#/.NET</a></li>
<li class="dropdown-item"><a href="/releases/latest/cppdoc/index.html">C++</a></li>
<li class="dropdown-item"><a href="/releases/latest/scaladoc/scalar/index.html#org.apache.ignite.scalar.scalar$">Scala</a></li>
</ul>
</nav>
</li>
<li><a href="#">Examples</a>
<nav class="dropdown">
<ul>
<li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/examples" target="_blank" rel="noopener" title="Apache Ignite Java examples">Java</a></li>
<li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/dotnet/examples" target="_blank" rel="noopener" title="Apache Ignite C#/.NET examples">C#/.NET</a></li>
<li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/cpp/examples" target="_blank" rel="noopener" title="Apache Ignite C++ examples">C++</a></li>
<li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/python/examples" target="_blank" rel="noopener" title="Apache Ignite Python examples">Python</a></li>
<li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/nodejs/examples" target="_blank" rel="noopener" title="Apache Ignite NodeJS examples">NodeJS</a></li>
<li class="dropdown-item"><a href="https://github.com/apache/ignite/tree/master/modules/platforms/php/examples" target="_blank" rel="noopener" title="Apache Ignite PHP examples">PHP</a></li>
</ul>
</nav>
</li></ul>
</nav>
<form class='search'>
<button class="search-close" type='button'><img src='/assets/images/cancel.svg' alt="close" width="10" height="10" /></button>
<input type="search" placeholder="Search…" id="search-input">
</form>
<nav id="lang-selector"><ul>
<li><a href="#"><img src="/assets/images/icon_lang_en_75x75.jpg" alt="English language icon" width="25" height="25" /><span></span></a>
<nav class="dropdown">
<li class="dropdown-item"><a href="/docs/latest/" ><img src="/assets/images/icon_lang_en_75x75.jpg" alt="English language icon" width="25" height="25" /><span>English</span></a></li>
<li class="dropdown-item"><a href="https://www.ignite-service.cn/doc/java/" target="_blank" rel="noopener"><img src="/assets/images/icon_lang_cn_75x75.jpg" width="25" height="25" alt="Chinese language icon" /><span>Chinese</span></a></li>
</nav>
</li></ul>
</nav>
<button type='button' class='top-nav-toggle'></button>
</div>
</header>
<link rel="stylesheet" href="/assets/css/docs.css">
<section class='page-docs'>
<nav class='left-nav' data-swiftype-index='false'>
<li>
<a href="/docs/2.11.1/index" class='' >Documentation Overview</a>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Quick Start Guides<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/quick-start/java"
class=''
>Java</a>
</li>
<li>
<a href="/docs/2.11.1/quick-start/dotnet"
class=''
>.NET/C#</a>
</li>
<li>
<a href="/docs/2.11.1/quick-start/cpp"
class=''
>C++</a>
</li>
<li>
<a href="/docs/2.11.1/quick-start/python"
class=''
>Python</a>
</li>
<li>
<a href="/docs/2.11.1/quick-start/nodejs"
class=''
>Node.JS</a>
</li>
<li>
<a href="/docs/2.11.1/quick-start/sql"
class=''
>SQL</a>
</li>
<li>
<a href="/docs/2.11.1/quick-start/php"
class=''
>PHP</a>
</li>
<li>
<a href="/docs/2.11.1/quick-start/restapi"
class=''
>REST API</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Installation<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/installation/installing-using-zip"
class=''
>Installing Using ZIP Archive</a>
</li>
<li>
<a href="/docs/2.11.1/installation/installing-using-docker"
class=''
>Installing Using Docker</a>
</li>
<li>
<a href="/docs/2.11.1/installation/deb-rpm"
class=''
>Installing DEB or RPM package</a>
</li>
<li>
<button
type='button'
class='collapsed '>Kubernetes<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/installation/kubernetes/amazon-eks-deployment" class=''>Amazon EKS</a></li>
<li><a href="/docs/2.11.1/installation/kubernetes/azure-deployment" class=''>Azure Kubernetes Service</a></li>
<li><a href="/docs/2.11.1/installation/kubernetes/gke-deployment" class=''>Google Kubernetes Engine</a></li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/installation/vmware-installation"
class=''
>VMWare</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Setting Up<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/understanding-configuration"
class=''
>Understanding Configuration</a>
</li>
<li>
<a href="/docs/2.11.1/setup"
class=''
>Setting Up</a>
</li>
<li>
<a href="/docs/2.11.1/logging"
class=''
>Configuring Logging</a>
</li>
<li>
<a href="/docs/2.11.1/resources-injection"
class=''
>Resources Injection</a>
</li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/starting-nodes" class='' >Starting and Stopping Nodes</a>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Clustering<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/clustering/clustering"
class=''
>Overview</a>
</li>
<li>
<a href="/docs/2.11.1/clustering/tcp-ip-discovery"
class=''
>TCP/IP Discovery</a>
</li>
<li>
<a href="/docs/2.11.1/clustering/zookeeper-discovery"
class=''
>ZooKeeper Discovery</a>
</li>
<li>
<a href="/docs/2.11.1/clustering/discovery-in-the-cloud"
class=''
>Discovery in the Cloud</a>
</li>
<li>
<a href="/docs/2.11.1/clustering/network-configuration"
class=''
>Network Configuration</a>
</li>
<li>
<a href="/docs/2.11.1/clustering/connect-client-nodes"
class=''
>Connecting Client Nodes</a>
</li>
<li>
<a href="/docs/2.11.1/clustering/baseline-topology"
class=''
>Baseline Topology</a>
</li>
<li>
<a href="/docs/2.11.1/clustering/running-client-nodes-behind-nat"
class=''
>Running Client Nodes Behind NAT</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Thin Clients<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/thin-clients/getting-started-with-thin-clients"
class=''
>Thin Clients Overview</a>
</li>
<li>
<a href="/docs/2.11.1/thin-clients/java-thin-client"
class=''
>Java Thin Client</a>
</li>
<li>
<a href="/docs/2.11.1/thin-clients/dotnet-thin-client"
class=''
>.NET Thin Client</a>
</li>
<li>
<a href="/docs/2.11.1/thin-clients/cpp-thin-client"
class=''
>C++ Thin Client</a>
</li>
<li>
<a href="/docs/2.11.1/thin-clients/python-thin-client"
class=''
>Python Thin Client</a>
</li>
<li>
<a href="/docs/2.11.1/thin-clients/php-thin-client"
class=''
>PHP Thin Client</a>
</li>
<li>
<a href="/docs/2.11.1/thin-clients/nodejs-thin-client"
class=''
>Node.js Thin Client</a>
</li>
<li>
<button
type='button'
class='collapsed '>Binary Client Protocol<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/binary-client-protocol/binary-client-protocol" class=''>Binary Client Protocol</a></li>
<li><a href="/docs/2.11.1/binary-client-protocol/data-format" class=''>Data Format</a></li>
<li><a href="/docs/2.11.1/binary-client-protocol/key-value-queries" class=''>Key-Value Queries</a></li>
<li><a href="/docs/2.11.1/binary-client-protocol/sql-and-scan-queries" class=''>SQL and Scan Queries</a></li>
<li><a href="/docs/2.11.1/binary-client-protocol/binary-type-metadata" class=''>Binary Types Metadata</a></li>
<li><a href="/docs/2.11.1/binary-client-protocol/cache-configuration" class=''>Cache Configuration</a></li>
</nav>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Data Modeling<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/data-modeling/data-modeling"
class=''
>Introduction</a>
</li>
<li>
<a href="/docs/2.11.1/data-modeling/data-partitioning"
class=''
>Data Partitioning</a>
</li>
<li>
<a href="/docs/2.11.1/data-modeling/affinity-collocation"
class=''
>Affinity Colocation</a>
</li>
<li>
<a href="/docs/2.11.1/data-modeling/binary-marshaller"
class=''
>Binary Marshaller</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Configuring Memory<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/memory-architecture"
class=''
>Memory Architecture</a>
</li>
<li>
<a href="/docs/2.11.1/memory-configuration/data-regions"
class=''
>Configuring Data Regions</a>
</li>
<li>
<a href="/docs/2.11.1/memory-configuration/eviction-policies"
class=''
>Eviction Policies</a>
</li>
<li>
<a href="/docs/2.11.1/memory-configuration/replacement-policies"
class=''
>Replacement Policies</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Configuring Persistence<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/persistence/native-persistence"
class=''
>Ignite Persistence</a>
</li>
<li>
<a href="/docs/2.11.1/persistence/external-storage"
class=''
>External Storage</a>
</li>
<li>
<a href="/docs/2.11.1/persistence/swap"
class=''
>Swapping</a>
</li>
<li>
<a href="/docs/2.11.1/persistence/custom-cache-store"
class=''
>Implementing Custom Cache Store</a>
</li>
<li>
<a href="/docs/2.11.1/persistence/snapshot-directory"
class=''
>Configuring Snapshot Directory</a>
</li>
<li>
<a href="/docs/2.11.1/persistence/snapshots"
class=''
>Cluster Snapshots</a>
</li>
<li>
<a href="/docs/2.11.1/persistence/disk-compression"
class=''
>Disk Compression</a>
</li>
<li>
<a href="/docs/2.11.1/persistence/persistence-tuning"
class=''
>Tuning Persistence</a>
</li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/snapshots/snapshots" class='' >Cluster Snapshots</a>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Configuring Caches<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/configuring-caches/configuration-overview"
class=''
>Cache Configuration</a>
</li>
<li>
<a href="/docs/2.11.1/configuring-caches/configuring-backups"
class=''
>Configuring Partition Backups</a>
</li>
<li>
<a href="/docs/2.11.1/configuring-caches/partition-loss-policy"
class=''
>Partition Loss Policy</a>
</li>
<li>
<a href="/docs/2.11.1/configuring-caches/atomicity-modes"
class=''
>Atomicity Modes</a>
</li>
<li>
<a href="/docs/2.11.1/configuring-caches/expiry-policies"
class=''
>Expiry Policy</a>
</li>
<li>
<a href="/docs/2.11.1/configuring-caches/on-heap-caching"
class=''
>On-Heap Caching</a>
</li>
<li>
<a href="/docs/2.11.1/configuring-caches/cache-groups"
class=''
>Cache Groups</a>
</li>
<li>
<a href="/docs/2.11.1/configuring-caches/near-cache"
class=''
>Near Caches</a>
</li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/data-rebalancing" class='' >Data Rebalancing</a>
</li>
<li>
<a href="/docs/2.11.1/data-streaming" class='' >Data Streaming</a>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Using Key-Value API<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/key-value-api/basic-cache-operations"
class=''
>Basic Cache Operations</a>
</li>
<li>
<a href="/docs/2.11.1/key-value-api/binary-objects"
class=''
>Working with Binary Objects</a>
</li>
<li>
<a href="/docs/2.11.1/key-value-api/using-scan-queries"
class=''
>Using Scan Queries</a>
</li>
<li>
<a href="/docs/2.11.1/read-repair"
class=''
>Read Repair</a>
</li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/key-value-api/transactions" class='' >Performing Transactions</a>
</li>
<li>
<button type='button' class='group-toggle expanded '>Working with SQL<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group expanded'>
<li>
<a href="/docs/2.11.1/SQL/sql-introduction"
class=''
>Introduction</a>
</li>
<li>
<a href="/docs/2.11.1/SQL/schemas"
class=''
>Understanding Schemas</a>
</li>
<li>
<a href="/docs/2.11.1/SQL/indexes"
class=''
>Defining Indexes</a>
</li>
<li>
<a href="/docs/2.11.1/SQL/sql-api"
class=''
>Using SQL API</a>
</li>
<li>
<a href="/docs/2.11.1/SQL/distributed-joins"
class=''
>Distributed Joins</a>
</li>
<li>
<a href="/docs/2.11.1/SQL/sql-transactions"
class=''
>SQL Transactions</a>
</li>
<li>
<a href="/docs/2.11.1/SQL/custom-sql-func"
class=''
>Custom SQL Functions</a>
</li>
<li>
<a href="/docs/2.11.1/SQL/JDBC/jdbc-driver"
class='active'
>JDBC Driver</a>
</li>
<li>
<a href="/docs/2.11.1/SQL/JDBC/jdbc-client-driver"
class=''
>JDBC Client Driver</a>
</li>
<li>
<button
type='button'
class='collapsed '>ODBC Driver<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/SQL/ODBC/odbc-driver" class=''>ODBC Driver</a></li>
<li><a href="/docs/2.11.1//SQL/ODBC/connection-string-dsn" class=''>Connection String and DSN</a></li>
<li><a href="/docs/2.11.1/SQL/ODBC/querying-modifying-data" class=''>Querying and Modifying Data</a></li>
<li><a href="/docs/2.11.1/SQL/ODBC/specification" class=''>Specification</a></li>
<li><a href="/docs/2.11.1/SQL/ODBC/data-types" class=''>Data Types</a></li>
<li><a href="/docs/2.11.1/SQL/ODBC/error-codes" class=''>Error Codes</a></li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/transactions/mvcc"
class=''
>Multiversion Concurrency Control</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>SQL Reference<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/sql-reference/sql-conformance"
class=''
>SQL Conformance</a>
</li>
<li>
<a href="/docs/2.11.1/sql-reference/ddl"
class=''
>Data Definition Language (DDL)</a>
</li>
<li>
<a href="/docs/2.11.1/sql-reference/dml"
class=''
>Data Manipulation Language (DML)</a>
</li>
<li>
<a href="/docs/2.11.1/sql-reference/transactions"
class=''
>Transactions</a>
</li>
<li>
<a href="/docs/2.11.1/sql-reference/operational-commands"
class=''
>Operational Commands</a>
</li>
<li>
<a href="/docs/2.11.1/sql-reference/aggregate-functions"
class=''
>Aggregate functions</a>
</li>
<li>
<a href="/docs/2.11.1/sql-reference/numeric-functions"
class=''
>Numeric Functions</a>
</li>
<li>
<a href="/docs/2.11.1/sql-reference/string-functions"
class=''
>String Functions</a>
</li>
<li>
<a href="/docs/2.11.1/sql-reference/date-time-functions"
class=''
>Data and Time Functions</a>
</li>
<li>
<a href="/docs/2.11.1/sql-reference/system-functions"
class=''
>System Functions</a>
</li>
<li>
<a href="/docs/2.11.1/sql-reference/data-types"
class=''
>Data Types</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Distributed Computing<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/distributed-computing/distributed-computing"
class=''
>Distributed Computing API</a>
</li>
<li>
<a href="/docs/2.11.1/distributed-computing/cluster-groups"
class=''
>Cluster Groups</a>
</li>
<li>
<a href="/docs/2.11.1/distributed-computing/executor-service"
class=''
>Executor Service</a>
</li>
<li>
<a href="/docs/2.11.1/distributed-computing/map-reduce"
class=''
>MapReduce API</a>
</li>
<li>
<a href="/docs/2.11.1/distributed-computing/load-balancing"
class=''
>Load Balancing</a>
</li>
<li>
<a href="/docs/2.11.1/distributed-computing/fault-tolerance"
class=''
>Fault Tolerance</a>
</li>
<li>
<a href="/docs/2.11.1/distributed-computing/job-scheduling"
class=''
>Job Scheduling</a>
</li>
<li>
<a href="/docs/2.11.1/distributed-computing/collocated-computations"
class=''
>Colocating Computations with Data</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Code Deployment<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/code-deployment/deploying-user-code"
class=''
>Deploying User Code</a>
</li>
<li>
<a href="/docs/2.11.1/code-deployment/peer-class-loading"
class=''
>Peer Class Loading</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Machine Learning<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/machine-learning/machine-learning"
class=''
>Machine Learning</a>
</li>
<li>
<a href="/docs/2.11.1/machine-learning/partition-based-dataset"
class=''
>Partition Based Dataset</a>
</li>
<li>
<a href="/docs/2.11.1/machine-learning/updating-trained-models"
class=''
>Updating Trained Models</a>
</li>
<li>
<button
type='button'
class='collapsed '>Binary Classification<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/machine-learning/binary-classification/introduction" class=''>Introduction</a></li>
<li><a href="/docs/2.11.1/machine-learning/binary-classification/linear-svm" class=''>Linear SVM (Support Vector Machine)</a></li>
<li><a href="/docs/2.11.1/machine-learning/binary-classification/decision-trees" class=''>Decision Trees</a></li>
<li><a href="/docs/2.11.1/machine-learning/binary-classification/multilayer-perceptron" class=''>Multilayer Perceptron</a></li>
<li><a href="/docs/2.11.1/machine-learning/binary-classification/logistic-regression" class=''>Logistic Regression</a></li>
<li><a href="/docs/2.11.1/machine-learning/binary-classification/knn-classification" class=''>k-NN Classification</a></li>
<li><a href="/docs/2.11.1/machine-learning/binary-classification/ann" class=''>ANN (Approximate Nearest Neighbor)</a></li>
<li><a href="/docs/2.11.1/machine-learning/binary-classification/naive-bayes" class=''>Naive Bayes</a></li>
</nav>
</li>
<li>
<button
type='button'
class='collapsed '>Regression<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/machine-learning/regression/introduction" class=''>Introduction</a></li>
<li><a href="/docs/2.11.1/machine-learning/regression/linear-regression" class=''>Linear Regression</a></li>
<li><a href="/docs/2.11.1/machine-learning/regression/decision-trees-regression" class=''>Decision Trees Regression</a></li>
<li><a href="/docs/2.11.1/machine-learning/regression/knn-regression" class=''>k-NN Regression</a></li>
</nav>
</li>
<li>
<button
type='button'
class='collapsed '>Clustering<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/machine-learning/clustering/introduction" class=''>Introduction</a></li>
<li><a href="/docs/2.11.1/machine-learning/clustering/k-means-clustering" class=''>K-Means Clustering</a></li>
<li><a href="/docs/2.11.1/machine-learning/clustering/gaussian-mixture" class=''>Gaussian mixture (GMM)</a></li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/machine-learning/preprocessing"
class=''
>Preprocessing</a>
</li>
<li>
<button
type='button'
class='collapsed '>Model Selection<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/machine-learning/model-selection/introduction" class=''>Introduction</a></li>
<li><a href="/docs/2.11.1/machine-learning/model-selection/evaluator" class=''>Evaluator</a></li>
<li><a href="/docs/2.11.1/machine-learning/model-selection/split-the-dataset-on-test-and-train-datasets" class=''>Split the dataset on test and train datasets</a></li>
<li><a href="/docs/2.11.1/machine-learning/model-selection/hyper-parameter-tuning" class=''>Hyper-parameter tuning</a></li>
<li><a href="/docs/2.11.1/machine-learning/model-selection/pipeline-api" class=''>Pipeline API</a></li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/machine-learning/multiclass-classification"
class=''
>Multiclass Classification</a>
</li>
<li>
<button
type='button'
class='collapsed '>Ensemble Methods<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/machine-learning/ensemble-methods/introduction" class=''></a></li>
<li><a href="/docs/2.11.1/machine-learning/ensemble-methods/stacking" class=''>Stacking</a></li>
<li><a href="/docs/2.11.1/machine-learning/ensemble-methods/baggin" class=''>Bagging</a></li>
<li><a href="/docs/2.11.1/machine-learning/ensemble-methods/random-forest" class=''>Random Forest</a></li>
<li><a href="/docs/2.11.1/machine-learning/ensemble-methods/gradient-boosting" class=''>Gradient Boosting</a></li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/machine-learning/recommendation-systems"
class=''
>Recommendation Systems</a>
</li>
<li>
<button
type='button'
class='collapsed '>Importing Model<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/machine-learning/importing-model/introduction" class=''>Introduction</a></li>
<li><a href="/docs/2.11.1/machine-learning/importing-model/model-import-from-gxboost" class=''>Import Model from XGBoost</a></li>
<li><a href="/docs/2.11.1/machine-learning/importing-model/model-import-from-apache-spark" class=''>Import Model from Apache Spark</a></li>
</nav>
</li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/key-value-api/continuous-queries" class='' >Using Continuous Queries</a>
</li>
<li>
<a href="/docs/2.11.1/services/services" class='' >Using Ignite Services</a>
</li>
<li>
<a href="/docs/2.11.1/messaging" class='' >Using Ignite Messaging</a>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Distributed Data Structures<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/data-structures/queue-and-set"
class=''
>Queue and Set</a>
</li>
<li>
<a href="/docs/2.11.1/data-structures/atomic-types"
class=''
>Atomic Types</a>
</li>
<li>
<a href="/docs/2.11.1/data-structures/countdownlatch"
class=''
>CountDownLatch</a>
</li>
<li>
<a href="/docs/2.11.1/data-structures/atomic-sequence"
class=''
>Atomic Sequence</a>
</li>
<li>
<a href="/docs/2.11.1/data-structures/semaphore"
class=''
>Semaphore</a>
</li>
<li>
<a href="/docs/2.11.1/data-structures/id-generator"
class=''
>ID Generator</a>
</li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/distributed-locks" class='' >Distributed Locks</a>
</li>
<li>
<a href="/docs/2.11.1/restapi" class='' >REST API</a>
</li>
<li>
<button type='button' class='group-toggle collapsed '>.NET Specific<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/net-specific/net-configuration-options"
class=''
>Configuration Options</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-deployment-options"
class=''
>Deployment Options</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-standalone-nodes"
class=''
>Standalone Nodes</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-async"
class=''
>Asynchronous APIs</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-logging"
class=''
>Logging</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-linq"
class=''
>LINQ</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-java-services-execution"
class=''
>Java Services Execution</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-platform-cache"
class=''
>.NET Platform Cache</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-plugins"
class=''
>Plugins</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-serialization"
class=''
>Serialization</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-cross-platform-support"
class=''
>Cross-Platform Support</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-platform-interoperability"
class=''
>Platform Interoperability</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-remote-assembly-loading"
class=''
>Remote Assembly Loading</a>
</li>
<li>
<a href="/docs/2.11.1/net-specific/net-troubleshooting"
class=''
>Troubleshooting</a>
</li>
<li>
<button
type='button'
class='collapsed '>Integrations<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/net-specific/asp-net-output-caching" class=''>ASP.NET Output Caching</a></li>
<li><a href="/docs/2.11.1/net-specific/asp-net-session-state-caching" class=''>ASP.NET Session State Caching</a></li>
<li><a href="/docs/2.11.1/net-specific/net-entity-framework-cache" class=''>Entity Framework 2nd Level Cache</a></li>
</nav>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>C++ Specific<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/cpp-specific/cpp-serialization"
class=''
>Serialization</a>
</li>
<li>
<a href="/docs/2.11.1/cpp-specific/cpp-platform-interoperability"
class=''
>Platform Interoperability</a>
</li>
<li>
<a href="/docs/2.11.1/cpp-specific/cpp-objects-lifetime"
class=''
>Objects Lifetime</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Monitoring<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/monitoring-metrics/intro"
class=''
>Introduction</a>
</li>
<li>
<a href="/docs/2.11.1/monitoring-metrics/cluster-id"
class=''
>Cluster ID and Tag</a>
</li>
<li>
<a href="/docs/2.11.1/monitoring-metrics/cluster-states"
class=''
>Cluster States</a>
</li>
<li>
<button
type='button'
class='collapsed '>Metrics<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/monitoring-metrics/configuring-metrics" class=''>Configuring Metrics</a></li>
<li><a href="/docs/2.11.1/monitoring-metrics/metrics" class=''>JMX Metrics</a></li>
</nav>
</li>
<li>
<button
type='button'
class='collapsed '>New Metrics System<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/monitoring-metrics/new-metrics-system" class=''>Introduction</a></li>
<li><a href="/docs/2.11.1/monitoring-metrics/new-metrics" class=''>Metrics</a></li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/monitoring-metrics/system-views"
class=''
>System Views</a>
</li>
<li>
<a href="/docs/2.11.1/monitoring-metrics/performance-statistics"
class=''
>Performance Statistics</a>
</li>
<li>
<a href="/docs/2.11.1/monitoring-metrics/tracing"
class=''
>Tracing</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Working with Events<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/events/listening-to-events"
class=''
>Enabling and Listenting to Events</a>
</li>
<li>
<a href="/docs/2.11.1/events/events"
class=''
>Events</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Tools<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/tools/control-script"
class=''
>Control Script</a>
</li>
<li>
<a href="/docs/2.11.1/tools/visor-cmd"
class=''
>Visor CMD</a>
</li>
<li>
<a href="/docs/2.11.1/tools/gg-control-center"
class=''
>GridGain Control Center</a>
</li>
<li>
<a href="/docs/2.11.1/tools/sqlline"
class=''
>SQLLine</a>
</li>
<li>
<a href="/docs/2.11.1/tools/tableau"
class=''
>Tableau</a>
</li>
<li>
<a href="/docs/2.11.1/tools/informatica"
class=''
>Informatica</a>
</li>
<li>
<a href="/docs/2.11.1/tools/pentaho"
class=''
>Pentaho</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Security<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/security/authentication"
class=''
>Authentication</a>
</li>
<li>
<a href="/docs/2.11.1/security/ssl-tls"
class=''
>SSL/TLS</a>
</li>
<li>
<button
type='button'
class='collapsed '>Transparent Data Encryption<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/security/tde" class=''>Introduction</a></li>
<li><a href="/docs/2.11.1/security/master-key-rotation" class=''>Master key rotation</a></li>
<li><a href="/docs/2.11.1/security/cache-encryption-key-rotation" class=''>Cache encryption key rotation</a></li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/security/sandbox"
class=''
>Sandbox</a>
</li>
</nav>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Extensions and Integrations<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<button
type='button'
class='collapsed '>Spring<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/extensions-and-integrations/spring/spring-boot" class=''>Spring Boot</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/spring/spring-data" class=''>Spring Data</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/spring/spring-caching" class=''>Spring Caching</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/spring/spring-tx" class=''>Spring Transactions</a></li>
</nav>
</li>
<li>
<button
type='button'
class='collapsed '>Ignite for Spark<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/extensions-and-integrations/ignite-for-spark/overview" class=''>Overview</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/ignite-for-spark/ignitecontext-and-rdd" class=''>IgniteContext and IgniteRDD</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/ignite-for-spark/ignite-dataframe" class=''>Ignite DataFrame</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/ignite-for-spark/installation" class=''>Installation</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/ignite-for-spark/spark-shell" class=''>Test Ignite with Spark-shell</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/ignite-for-spark/troubleshooting" class=''>Troubleshooting</a></li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/extensions-and-integrations/hibernate-l2-cache"
class=''
>Hibernate L2 Cache</a>
</li>
<li>
<a href="/docs/2.11.1/extensions-and-integrations/mybatis-l2-cache"
class=''
>MyBatis L2 Cache</a>
</li>
<li>
<button
type='button'
class='collapsed '>Streaming<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/extensions-and-integrations/streaming/kafka-streamer" class=''>Kafka Streamer</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/streaming/camel-streamer" class=''>Camel Streamer</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/streaming/flink-streamer" class=''>Flink Streamer</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/streaming/flume-sink" class=''>Flume Sink</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/streaming/jms-streamer" class=''>JMS Streamer</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/streaming/mqtt-streamer" class=''>MQTT Streamer</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/streaming/rocketmq-streamer" class=''>RocketMQ Streamer</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/streaming/storm-streamer" class=''>Storm Streamer</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/streaming/zeromq-streamer" class=''>ZeroMQ Streamer</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/streaming/twitter-streamer" class=''>Twitter Streamer</a></li>
</nav>
</li>
<li>
<button
type='button'
class='collapsed '>Cassandra Integration<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class="sub_pages collapsed">
<li><a href="/docs/2.11.1/extensions-and-integrations/cassandra/overview" class=''>Overview</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/cassandra/configuration" class=''>Configuration</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/cassandra/usage-examples" class=''>Usage Examples</a></li>
<li><a href="/docs/2.11.1/extensions-and-integrations/cassandra/ddl-generator" class=''>DDL Generator</a></li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/extensions-and-integrations/php-pdo"
class=''
>PHP PDO</a>
</li>
<li>
<a href="/docs/2.11.1/extensions-and-integrations/performance-statistics"
class=''
>Performance Statistics</a>
</li>
</nav>
</li>
<li>
<a href="/docs/2.11.1/plugins" class='' >Plugins</a>
</li>
<li>
<button type='button' class='group-toggle collapsed '>Performance and Troubleshooting<img class="state-indicator" src="/assets/images/left-nav-arrow.svg" width="6" height="10"></button>
<nav class='nav-group collapsed'>
<li>
<a href="/docs/2.11.1/perf-and-troubleshooting/general-perf-tips"
class=''
>General Performance Tips</a>
</li>
<li>
<a href="/docs/2.11.1/perf-and-troubleshooting/memory-tuning"
class=''
>Memory and JVM Tuning</a>
</li>
<li>
<a href="/docs/2.11.1/perf-and-troubleshooting/persistence-tuning"
class=''
>Persistence Tuning</a>
</li>
<li>
<a href="/docs/2.11.1/perf-and-troubleshooting/sql-tuning"
class=''
>SQL Tuning</a>
</li>
<li>
<a href="/docs/2.11.1/perf-and-troubleshooting/thread-pools-tuning"
class=''
>Thread Pools Tuning</a>
</li>
<li>
<a href="/docs/2.11.1/perf-and-troubleshooting/troubleshooting"
class=''
>Troubleshooting and Debugging</a>
</li>
<li>
<a href="/docs/2.11.1/perf-and-troubleshooting/handling-exceptions"
class=''
>Handling Exceptions</a>
</li>
<li>
<a href="/docs/2.11.1/perf-and-troubleshooting/yardstick-benchmarking"
class=''
>Benchmarking With Yardstick</a>
</li>
</nav>
</li>
</nav>
<div class="left-nav__overlay"></div>
<article data-swiftype-index='true'>
<a class='edit-link' href="https://github.com/apache/ignite/tree/IGNITE-7595/docs/_docs/SQL/JDBC/jdbc-driver.adoc" target="_blank">Edit</a>
<h1>JDBC Driver</h1>
<div id="preamble">
<div class="sectionbody">
<div class="paragraph">
<p>Ignite is shipped with JDBC drivers that allow processing of distributed data using standard SQL statements like <code>SELECT</code>, <code>INSERT</code>, <code>UPDATE</code> or <code>DELETE</code> directly from the JDBC side.</p>
</div>
<div class="paragraph">
<p>Presently, there are two drivers supported by Ignite: the lightweight and easy to use JDBC Thin Driver described in this document and <a href="/docs/2.11.1/SQL/JDBC/jdbc-client-driver">JDBC Client Driver</a> that interacts with the cluster by means of a client node.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="jdbc-thin-driver">JDBC Thin Driver</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The JDBC Thin driver is a default, lightweight driver provided by Ignite. To start using the driver, just add <code>ignite-core-2.11.1.jar</code> to your application&#8217;s classpath.</p>
</div>
<div class="paragraph">
<p>The driver connects to one of the cluster nodes and forwards all the queries to it for final execution. The node handles the query distribution and the result&#8217;s aggregations. Then the result is sent back to the client application.</p>
</div>
<div class="paragraph">
<p>The JDBC connection string may be formatted with one of two patterns: <code>URL query</code> or <code>semicolon</code>:</p>
</div>
<div class="listingblock">
<div class="title">Connection String Syntax</div>
<div class="content">
<pre class="rouge highlight"><code data-lang="text">// URL query pattern
jdbc:ignite:thin://&lt;hostAndPortRange0&gt;[,&lt;hostAndPortRange1&gt;]...[,&lt;hostAndPortRangeN&gt;][/schema][?&lt;params&gt;]
hostAndPortRange := host[:port_from[..port_to]]
params := param1=value1[&amp;param2=value2]...[&amp;paramN=valueN]
// Semicolon pattern
jdbc:ignite:thin://&lt;hostAndPortRange0&gt;[,&lt;hostAndPortRange1&gt;]...[,&lt;hostAndPortRangeN&gt;][;schema=&lt;schema_name&gt;][;param1=value1]...[;paramN=valueN]</code></pre>
</div>
</div>
<div class="ulist">
<ul>
<li>
<p><code>host</code> is required and defines the host of the cluster node to connect to.</p>
</li>
<li>
<p><code>port_from</code> is the beginning of the port range to use to open the connection. 10800 is used by default if this parameter is omitted.</p>
</li>
<li>
<p><code>port_to</code> is optional. It is set to the <code>port_from</code> value by default if this parameter is omitted.</p>
</li>
<li>
<p><code>schema</code> is the schema name to access. PUBLIC is used by default. This name should correspond to the SQL ANSI-99 standard. Non-quoted identifiers are not case sensitive. Quoted identifiers are case sensitive. When semicolon format is used, the schema may be defined as a parameter with name schema.</p>
</li>
<li>
<p><code>&lt;params&gt;</code> are optional.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The name of the driver&#8217;s class is <code>org.apache.ignite.IgniteJdbcThinDriver</code>. For instance, this is how you can open a JDBC connection to the cluster node listening on IP address 192.168.0.50:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="java"><span class="c1">// Register JDBC driver.</span>
<span class="nc">Class</span><span class="o">.</span><span class="na">forName</span><span class="o">(</span><span class="s">"org.apache.ignite.IgniteJdbcThinDriver"</span><span class="o">);</span>
<span class="c1">// Open the JDBC connection.</span>
<span class="nc">Connection</span> <span class="n">conn</span> <span class="o">=</span> <span class="nc">DriverManager</span><span class="o">.</span><span class="na">getConnection</span><span class="o">(</span><span class="s">"jdbc:ignite:thin://127.0.0.1"</span><span class="o">);</span></code></pre>
</div>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
<h3 id="put-the-jdbc-url-in-quotes-when-connecting-from-bash" class="discrete">Put the JDBC URL in quotes when connecting from bash</h3>
<div class="paragraph">
<p>Make sure to put the connection URL in double quotes (" ") when connecting from a bash environment, for example: <code>"jdbc:ignite:thin://[address]:[port];user=[username];password=[password]"</code></p>
</div>
</td>
</tr>
</table>
</div>
<div class="sect2">
<h3 id="parameters">Parameters</h3>
<div class="paragraph">
<p>The following table lists all the parameters that are supported by the JDBC connection string:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 30%;">
<col style="width: 40%;">
<col style="width: 30%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Parameter</th>
<th class="tableblock halign-left valign-top">Description</th>
<th class="tableblock halign-left valign-top">Default Value</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>user</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Username for the SQL Connection. This parameter is required if authentication is enabled on the server.
See the <a href="/docs/2.11.1/security/authentication">Authentication</a> and <a href="/docs/2.11.1/sql-reference/ddl#create-user">CREATE user</a> documentation for more details.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">ignite</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>password</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Password for SQL Connection. Required if authentication is enabled on the server.
See the <a href="/docs/2.11.1/security/authentication">Authentication</a> and <a href="/docs/2.11.1/sql-reference/ddl#create-user">CREATE user</a> documentation for more details.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>ignite</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>distributedJoins</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Whether to execute distributed joins in <a href="/docs/2.11.1/SQL/distributed-joins#non-colocated-joins">non-colocated mode</a>.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>enforceJoinOrder</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Whether to enforce join order of tables in the query. If set to <code>true</code>, the query optimizer does not reorder tables in the join.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>collocated</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Set this parameter to <code>true</code> if your SQL statement includes a GROUP BY clause that groups the results by either primary
or affinity key. Whenever Ignite executes a distributed query, it sends sub-queries to individual cluster members. If
you know in advance that the elements of your query selection are colocated together on the same node and you group by
a primary or affinity key, then Ignite makes significant performance and network optimizations by grouping data locally
on each node participating in the query.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>replicatedOnly</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Whether the query contains only replicated tables. This is a hint for potentially more effective execution.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>autoCloseServerCursor</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Whether to close server-side cursors automatically when the last piece of a result set is retrieved. When this property is enabled, calling <code>ResultSet.close()</code> does not require a network call, which could improve performance. However, if the server-side cursor is already closed, you may get an exception when trying to call <code>ResultSet.getMetadata()</code>. This is why it defaults to <code>false</code>.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>partitionAwareness</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Enables <a href="#partition-awareness">Partition Awareness</a> mode. In this mode, the driver tries to determine the nodes where the data that is being queried is located and send the query to these nodes.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>partitionAwarenessSQLCacheSize</code> <a id="partitionAwarenessSQLCacheSize"></a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The number of distinct SQL queries that the driver keeps locally for optimization. When a query is executed for the first time, the driver receives the partition distribution for the table that is being queried and saves it for future use locally. When you query this table next time, the driver uses the partition distribution to determine where the data being queried is located to send the query to the right nodes. This local storage with SQL queries invalidates when the cluster topology changes. The optimal value for this parameter should equal the number of distinct SQL queries you are going to perform.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1000</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>partitionAwarenessPartitionDistributionsCacheSize</code> <a id="partitionAwarenessPartitionDistributionsCacheSize"></a></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The number of distinct objects that represent partition distribution that the driver keeps locally for optimization. See the description of the previous parameter for details. This local storage with partition distribution objects invalidates when the cluster topology changes. The optimal value for this parameter should equal the number of distinct tables (<a href="/docs/2.11.1/configuring-caches/cache-groups">cache groups</a>) you are going to use in your queries.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">1000</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>socketSendBuffer</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Socket send buffer size. When set to 0, the OS default is used.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>socketReceiveBuffer</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Socket receive buffer size. When set to 0, the OS default is used.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">0</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>tcpNoDelay</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Whether to use <code>TCP_NODELAY</code> option.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>lazy</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Lazy query execution.
By default, Ignite attempts to get and load the whole query result set into memory and then send it to the client. For small and medium result sets, this provides optimal performance and minimizes the duration of internal database locks, thus increasing concurrency.
However, if the result set is too big to fit in the available memory, then it can lead to excessive GC pauses and even 'OutOfMemoryError&#8217;s. Use this flag to tell Ignite to fetch the result set lazily, thus minimizing memory consumption at the cost of a moderate performance hit.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>skipReducerOnUpdate</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Enables server side updates.
When Ignite executes a DML operation, it fetches all the affected intermediate rows and sends them to the query initiator (also known as reducer) for analysis. Then it prepares batches of updated values to be sent to remote nodes.
This approach might impact performance and it can saturate the network if a DML operation has to move many entries over it.
Use this flag to tell Ignite to perform all intermediate row analysis and updates "in-place" on corresponding remote data nodes.
Defaults to <code>false</code>, meaning that the intermediate results are fetched to the query initiator first.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code></p></td>
</tr>
</tbody>
</table>
<div class="paragraph">
<p>For the list of security parameters, refer to the <a href="#using-ssl">Using SSL</a> section.</p>
</div>
</div>
<div class="sect2">
<h3 id="connection-string-examples">Connection String Examples</h3>
<div class="ulist">
<ul>
<li>
<p><code>jdbc:ignite:thin://myHost</code> - connect to myHost on the port 10800 with all defaults.</p>
</li>
<li>
<p><code>jdbc:ignite:thin://myHost:11900</code> - connect to myHost on custom port 11900 with all defaults.</p>
</li>
<li>
<p><code>jdbc:ignite:thin://myHost:11900;user=ignite;password=ignite</code> - connect to myHost on custom port 11900 with user credentials for authentication.</p>
</li>
<li>
<p><code>jdbc:ignite:thin://myHost:11900;distributedJoins=true&amp;autoCloseServerCursor=true</code> - connect to myHost on custom port 11900 with enabled distributed joins and autoCloseServerCursor optimization.</p>
</li>
<li>
<p><code>jdbc:ignite:thin://myHost:11900/myschema;</code> - connect to myHost on custom port 11900 and access to MYSCHEMA.</p>
</li>
<li>
<p><code>jdbc:ignite:thin://myHost:11900/"MySchema";lazy=false</code> - connect to myHost on custom port 11900 with disabled lazy query execution and access to MySchema (schema name is case sensitive).</p>
</li>
</ul>
</div>
</div>
<div class="sect2">
<h3 id="multiple-endpoints">Multiple Endpoints</h3>
<div class="paragraph">
<p>You can enable automatic failover if a current connection is broken by setting multiple connection endpoints in the connection string.
The JDBC Driver randomly picks an address from the list to connect to. If the connection fails, the JDBC Driver selects another address from the list until the connection is restored.
The Driver stops reconnecting and throws an exception if all the endpoints are unreachable.</p>
</div>
<div class="paragraph">
<p>The example below shows how to pass three addresses via the connection string:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="java"><span class="c1">// Register JDBC Driver.</span>
<span class="nc">Class</span><span class="o">.</span><span class="na">forName</span><span class="o">(</span><span class="s">"org.apache.ignite.IgniteJdbcThinDriver"</span><span class="o">);</span>
<span class="c1">// Open the JDBC connection passing several connection endpoints.</span>
<span class="nc">Connection</span> <span class="n">conn</span> <span class="o">=</span> <span class="nc">DriverManager</span>
<span class="o">.</span><span class="na">getConnection</span><span class="o">(</span><span class="s">"jdbc:ignite:thin://192.168.0.50:101,192.188.5.40:101,192.168.10.230:101"</span><span class="o">);</span></code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="partition-awareness">Partition Awareness</h3>
<div class="admonitionblock warning">
<table>
<tr>
<td class="icon">
<div class="title">Warning</div>
</td>
<td class="content">
<div class="paragraph">
<p>Partition awareness is an experimental feature whose API or design architecture might be changed
before a GA version is released.</p>
</div>
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>Partition awareness is a feature that makes the JDBC driver "aware" of the partition distribution in the cluster.
It allows the driver to pick the nodes that own the data that is being queried and send the query directly to those nodes
(if the addresses of the nodes are provided in the driver&#8217;s configuration). Partition awareness can increase average
performance of queries that use the affinity key.</p>
</div>
<div class="paragraph">
<p>Without partition awareness, the JDBC driver connects to a single node, and all queries are executed through that node.
If the data is hosted on a different node, the query has to be rerouted within the cluster, which adds an additional network hop.
Partition awareness eliminates that hop by sending the query to the right node.</p>
</div>
<div class="paragraph">
<p>To make use of the partition awareness feature, provide the addresses of all the server nodes in the connection properties.
The driver will route requests to the nodes that store the data requested by the query.</p>
</div>
<div class="admonitionblock warning">
<table>
<tr>
<td class="icon">
<div class="title">Warning</div>
</td>
<td class="content">
<div class="paragraph">
<p>Note that presently you need to provide the addresses of all server nodes in the connection properties because the driver does not load them automatically after a connection is opened.
It also means that if a new server node joins the cluster, you are advised to reconnect the driver and add the node&#8217;s address to the connection properties.
Otherwise, the driver will not be able to send direct requests to this node.</p>
</div>
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>To enable partition awareness, add the <code>partitionAwareness=true</code> parameter to the connection string and provide the
endpoints of multiple server nodes:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="java"><span class="nc">Class</span><span class="o">.</span><span class="na">forName</span><span class="o">(</span><span class="s">"org.apache.ignite.IgniteJdbcThinDriver"</span><span class="o">);</span>
<span class="nc">Connection</span> <span class="n">conn</span> <span class="o">=</span> <span class="nc">DriverManager</span>
<span class="o">.</span><span class="na">getConnection</span><span class="o">(</span><span class="s">"jdbc:ignite:thin://192.168.0.50,192.188.5.40,192.168.10.230?partitionAwareness=true"</span><span class="o">);</span></code></pre>
</div>
</div>
<div class="admonitionblock note">
<table>
<tr>
<td class="icon">
<div class="title">Note</div>
</td>
<td class="content">
Partition Awareness can be used only with the default affinity function.
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>Also see the description of the two related parameters: <a href="#partitionAwarenessSQLCacheSize">partitionAwarenessSQLCacheSize</a> and <a href="#partitionAwarenessPartitionDistributionsCacheSize">partitionAwarenessPartitionDistributionsCacheSize</a>.</p>
</div>
</div>
<div class="sect2">
<h3 id="cluster-configuration">Cluster Configuration</h3>
<div class="paragraph">
<p>In order to accept and process requests from JDBC Thin Driver, a cluster node binds to a local network interface on port 10800 and listens to incoming requests.</p>
</div>
<div class="paragraph">
<p>Use an instance of <code>ClientConnectorConfiguration</code> to change the connection parameters:</p>
</div>
<code-tabs><code-tab data-tab='XML'><div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="xml"><span class="nt">&lt;bean</span> <span class="na">id=</span><span class="s">"ignite.cfg"</span> <span class="na">class=</span><span class="s">"org.apache.ignite.configuration.IgniteConfiguration"</span><span class="nt">&gt;</span>
<span class="nt">&lt;property</span> <span class="na">name=</span><span class="s">"clientConnectorConfiguration"</span><span class="nt">&gt;</span>
<span class="nt">&lt;bean</span> <span class="na">class=</span><span class="s">"org.apache.ignite.configuration.ClientConnectorConfiguration"</span> <span class="nt">/&gt;</span>
<span class="nt">&lt;/property&gt;</span>
<span class="nt">&lt;/bean&gt;</span></code></pre>
</div>
</div></code-tab><code-tab data-tab='Java'><div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="java"><span class="nc">IgniteConfiguration</span> <span class="n">cfg</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">IgniteConfiguration</span><span class="o">()</span>
<span class="o">.</span><span class="na">setClientConnectorConfiguration</span><span class="o">(</span><span class="k">new</span> <span class="nc">ClientConnectorConfiguration</span><span class="o">());</span></code></pre>
</div>
</div></code-tab><code-tab data-tab='C#/.NET'></code-tab><code-tab data-tab='C++'></code-tab></code-tabs>
<div class="paragraph">
<p>The following parameters are supported:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 30%;">
<col style="width: 55%;">
<col style="width: 15%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Parameter</th>
<th class="tableblock halign-left valign-top">Description</th>
<th class="tableblock halign-left valign-top">Default Value</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>host</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Host name or IP address to bind to. When set to <code>null</code>, binding is made to <code>localhost</code>.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>null</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>port</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">TCP port to bind to. If the specified port is already in use, Ignite tries to find another available port using the <code>portRange</code> property.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>10800</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>portRange</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Defines the number of ports to try to bind to. E.g. if the port is set to <code>10800</code> and <code>portRange</code> is <code>100</code>, then the server tries to bind consecutively to any port in the <code>[10800, 10900]</code> range until it finds a free port.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>100</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>maxOpenCursorsPerConnection</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Maximum number of cursors that can be opened simultaneously for a single connection.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>128</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>threadPoolSize</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Number of request-handling threads in the thread pool.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>MAX(8, CPU cores)</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>socketSendBufferSize</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Size of the TCP socket send buffer. When set to 0, the system default value is used.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>socketReceiveBufferSize</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Size of the TCP socket receive buffer. When set to 0, the system default value is used.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>tcpNoDelay</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Whether to use <code>TCP_NODELAY</code> option.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>idleTimeout</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Idle timeout for client connections.
Clients are disconnected automatically from the server after remaining idle for the configured timeout.
When this parameter is set to zero or a negative value, the idle timeout is disabled.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>0</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>isJdbcEnabled</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Whether access through JDBC is enabled.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>isThinClientEnabled</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Whether access through thin client is enabled.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sslEnabled</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">If SSL is enabled, only SSL client connections are allowed. The node allows only one mode of connection: <code>SSL</code> or <code>plain</code>. A node cannot receive both types of client connections. But this option can be different for different nodes in the cluster.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>useIgniteSslContextFactory</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Whether to use SSL context factory from the node&#8217;s configuration (see <code>IgniteConfiguration.sslContextFactory</code>).</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>true</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sslClientAuth</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Whether client authentication is required.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sslContextFactory</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The class name that implements <code>Factory&lt;SSLContext&gt;</code> to provide node-side SSL. See <a href="/docs/2.11.1/security/ssl-tls">this</a> for more information.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>null</code></p></td>
</tr>
</tbody>
</table>
<div class="admonitionblock warning">
<table>
<tr>
<td class="icon">
<div class="title">Warning</div>
</td>
<td class="content">
<h3 id="jdbc-thin-driver-is-not-thread-safe" class="discrete">JDBC Thin Driver is not thread safe</h3>
<div class="paragraph">
<p>The JDBC objects <code>Connections</code>, <code>Statements</code>, and <code>ResultSet</code> are not thread safe.
Do not use statements and results sets from a single JDBC Connection in multiple threads.</p>
</div>
<div class="paragraph">
<p>JDBC Thin Driver guards against concurrency. If concurrent access is detected, an exception
(<code>SQLException</code>) is produced with the following message:</p>
</div>
<div class="literalblock">
<div class="content">
<pre>"Concurrent access to JDBC connection is not allowed
[ownThread=&lt;guard_owner_thread_name&gt;, curThread=&lt;current_thread_name&gt;]",
SQLSTATE="08006"</pre>
</div>
</div>
</td>
</tr>
</table>
</div>
</div>
<div class="sect2">
<h3 id="using-ssl">Using SSL</h3>
<div class="paragraph">
<p>You can configure the JDBC Thin Driver to use SSL to secure communication with the cluster.
SSL must be configured both on the cluster side and in the JDBC Driver.
Refer to the <a href="/docs/2.11.1/security/ssl-tls#ssl-for-clients">SSL for Thin Clients and JDBC/ODBC</a> section for the information about cluster configuration.</p>
</div>
<div class="paragraph">
<p>To enable SSL in the JDBC Driver, pass the <code>sslMode=require</code> parameter in the connection string and provide the key store and trust store parameters:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="java"><span class="nc">Class</span><span class="o">.</span><span class="na">forName</span><span class="o">(</span><span class="s">"org.apache.ignite.IgniteJdbcThinDriver"</span><span class="o">);</span>
<span class="nc">String</span> <span class="n">keyStore</span> <span class="o">=</span> <span class="s">"keystore/node.jks"</span><span class="o">;</span>
<span class="nc">String</span> <span class="n">keyStorePassword</span> <span class="o">=</span> <span class="s">"123456"</span><span class="o">;</span>
<span class="nc">String</span> <span class="n">trustStore</span> <span class="o">=</span> <span class="s">"keystore/trust.jks"</span><span class="o">;</span>
<span class="nc">String</span> <span class="n">trustStorePassword</span> <span class="o">=</span> <span class="s">"123456"</span><span class="o">;</span>
<span class="k">try</span> <span class="o">(</span><span class="nc">Connection</span> <span class="n">conn</span> <span class="o">=</span> <span class="nc">DriverManager</span><span class="o">.</span><span class="na">getConnection</span><span class="o">(</span><span class="s">"jdbc:ignite:thin://127.0.0.1?sslMode=require"</span>
<span class="o">+</span> <span class="s">"&amp;sslClientCertificateKeyStoreUrl="</span> <span class="o">+</span> <span class="n">keyStore</span> <span class="o">+</span> <span class="s">"&amp;sslClientCertificateKeyStorePassword="</span>
<span class="o">+</span> <span class="n">keyStorePassword</span> <span class="o">+</span> <span class="s">"&amp;sslTrustCertificateKeyStoreUrl="</span> <span class="o">+</span> <span class="n">trustStore</span>
<span class="o">+</span> <span class="s">"&amp;sslTrustCertificateKeyStorePassword="</span> <span class="o">+</span> <span class="n">trustStorePassword</span><span class="o">))</span> <span class="o">{</span>
<span class="nc">ResultSet</span> <span class="n">rs</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="na">createStatement</span><span class="o">().</span><span class="na">executeQuery</span><span class="o">(</span><span class="s">"select 10"</span><span class="o">);</span>
<span class="n">rs</span><span class="o">.</span><span class="na">next</span><span class="o">();</span>
<span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="n">rs</span><span class="o">.</span><span class="na">getInt</span><span class="o">(</span><span class="mi">1</span><span class="o">));</span>
<span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="nc">Exception</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
<span class="n">e</span><span class="o">.</span><span class="na">printStackTrace</span><span class="o">();</span>
<span class="o">}</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>The following table lists all parameters that affect SSL/TLS connection:</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 30%;">
<col style="width: 40%;">
<col style="width: 30%;">
</colgroup>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">Parameter</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Default Value</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sslMode</code></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Enables SSL connection. Available modes:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>require</code>: SSL protocol is enabled on the client. Only SSL connection is available.</p>
</li>
<li>
<p><code>disable</code>: SSL protocol is disabled on the client. Only plain connection is supported.</p>
</li>
</ul>
</div></div></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>disable</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sslProtocol</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Protocol name for secure transport. Protocol implementations supplied by JSSE: <code>SSLv3 (SSL)</code>, <code>TLSv1 (TLS)</code>, <code>TLSv1.1</code>, <code>TLSv1.2</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>TLS</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sslKeyAlgorithm</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The Key manager algorithm to be used to create a key manager. Note that in most cases the default value is sufficient.
Algorithms implementations supplied by JSSE: <code>PKIX (X509 or SunPKIX)</code>, <code>SunX509</code>.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>None</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sslClientCertificateKeyStoreUrl</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">URL of the client key store file.
This is a mandatory parameter since SSL context cannot be initialized without a key manager.
If <code>sslMode</code> is <code>require</code> and the key store URL isn&#8217;t specified in the Ignite properties, the value of the JSSE property <code>javax.net.ssl.keyStore</code> is used.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value of the
<code>javax.net.ssl.keyStore</code>
system property.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sslClientCertificateKeyStorePassword</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Client key store password.</p>
<p class="tableblock">If <code>sslMode</code> is <code>require</code> and the key store password isn&#8217;t specified in the Ignite properties, the JSSE property <code>javax.net.ssl.keyStorePassword</code> is used.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value of the <code>javax.net.ssl.
keyStorePassword</code> system property.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sslClientCertificateKeyStoreType</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Client key store type used in context initialization.</p>
<p class="tableblock">If <code>sslMode</code> is <code>require</code> and the key store type isn&#8217;t specified in the Ignite properties, the JSSE property <code>javax.net.ssl.keyStoreType</code> is used.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value of the
<code>javax.net.ssl.keyStoreType</code>
system property.
If the system property is not defined, the default value is <code>JKS</code>.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sslTrustCertificateKeyStoreUrl</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">URL of the trust store file. This is an optional parameter; however, one of these properties must be set: <code>sslTrustCertificateKeyStoreUrl</code> or <code>sslTrustAll</code></p>
<p class="tableblock">If <code>sslMode</code> is <code>require</code> and the trust store URL isn&#8217;t specified in the Ignite properties, the JSSE property <code>javax.net.ssl.trustStore</code> is used.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value of the
<code>javax.net.ssl.trustStore</code> system property.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sslTrustCertificateKeyStorePassword</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Trust store password.</p>
<p class="tableblock">If <code>sslMode</code> is <code>require</code> and the trust store password isn&#8217;t specified in the Ignite properties, the JSSE property <code>javax.net.ssl.trustStorePassword</code> is used.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value of the
<code>javax.net.ssl.trustStorePassword</code> system property</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sslTrustCertificateKeyStoreType</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Trust store type.</p>
<p class="tableblock">If <code>sslMode</code> is <code>require</code> and the trust store type isn&#8217;t specified in the Ignite properties, the JSSE property <code>javax.net.ssl.trustStoreType</code> is used.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The value of the
<code>javax.net.ssl.trustStoreType</code>
system property. If the system property is not defined the default value is <code>JKS</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sslTrustAll</code></p></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="paragraph">
<p>Disables server&#8217;s certificate validation. Set to <code>true</code> to trust any server certificate (revoked, expired, or self-signed SSL certificates).</p>
</div>
<div class="admonitionblock caution">
<table>
<tr>
<td class="icon">
<div class="title">Caution</div>
</td>
<td class="content">
Do not enable this option in production on a network you do not entirely trust. Especially anything using the public internet.
</td>
</tr>
</table>
</div></div></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>false</code></p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>sslFactory</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Class name of the custom implementation of the
<code>Factory&lt;SSLSocketFactory&gt;</code>.</p>
<p class="tableblock">If <code>sslMode</code> is <code>require</code> and a factory is specified, the custom factory is used instead of the JSSE socket factory. In this case, other SSL properties are ignored.</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>null</code></p></td>
</tr>
</tbody>
</table>
<div class="paragraph">
<p>The default implementation is based on JSSE, and works through two Java keystore files:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><code>sslClientCertificateKeyStoreUrl</code> - the client certificate keystore holds the keys and certificate for the client.</p>
</li>
<li>
<p><code>sslTrustCertificateKeyStoreUrl</code> - the trusted certificate keystore contains the certificate information to validate the server&#8217;s certificate.</p>
</li>
</ul>
</div>
<div class="paragraph">
<p>The trusted store is an optional parameter, however one of the following parameters: <code>sslTrustCertificateKeyStoreUrl</code> or <code>sslTrustAll</code> must be configured.</p>
</div>
<div class="admonitionblock warning">
<table>
<tr>
<td class="icon">
<div class="title">Warning</div>
</td>
<td class="content">
<h3 id="using-the-ssltrustall-option" class="discrete">Using the "sslTrustAll" option</h3>
<div class="paragraph">
<p>Do not enable this option in production on a network you do not entirely trust, especially anything using the public internet.</p>
</div>
</td>
</tr>
</table>
</div>
<div class="paragraph">
<p>If you want to use your own implementation or method to configure the <code>SSLSocketFactory</code>, you can use JDBC Driver&#8217;s <code>sslFactory</code> parameter. It is a string that must contain the name of the class that implements the interface <code>Factory&lt;SSLSocketFactory&gt;</code>. The class must be available for JDBC Driver&#8217;s class loader.</p>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="ignite-datasource">Ignite DataSource</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The DataSource object is used as a deployed object that can be located by logical name via the JNDI naming service. JDBC Driver&#8217;s <code>org.apache.ignite.IgniteJdbcThinDataSource</code> implements a JDBC DataSource interface allowing you to utilize the DataSource interface instead.</p>
</div>
<div class="paragraph">
<p>In addition to generic DataSource properties, <code>IgniteJdbcThinDataSource</code> supports all the Ignite-specific properties that can be passed into a JDBC connection string. For instance, the <code>distributedJoins</code> property can be (re)set via the <code>IgniteJdbcThinDataSource#setDistributedJoins()</code> method.</p>
</div>
<div class="paragraph">
<p>Refer to the <a href="https://ignite.apache.org/releases/2.11.1/javadoc/org/apache/ignite/IgniteJdbcThinDataSource.html">JavaDocs</a> for more details.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="examples">Examples</h2>
<div class="sectionbody">
<div class="paragraph">
<p>To start processing the data located in the cluster, you need to create a JDBC Connection object via one of the methods below:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="java"><span class="c1">// Open the JDBC connection via DriverManager.</span>
<span class="nc">Connection</span> <span class="n">conn</span> <span class="o">=</span> <span class="nc">DriverManager</span><span class="o">.</span><span class="na">getConnection</span><span class="o">(</span><span class="s">"jdbc:ignite:thin://192.168.0.50"</span><span class="o">);</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>or</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="java"><span class="c1">// Or open connection via DataSource.</span>
<span class="nc">IgniteJdbcThinDataSource</span> <span class="n">ids</span> <span class="o">=</span> <span class="k">new</span> <span class="nc">IgniteJdbcThinDataSource</span><span class="o">();</span>
<span class="n">ids</span><span class="o">.</span><span class="na">setUrl</span><span class="o">(</span><span class="s">"jdbc:ignite:thin://127.0.0.1"</span><span class="o">);</span>
<span class="n">ids</span><span class="o">.</span><span class="na">setDistributedJoins</span><span class="o">(</span><span class="kc">true</span><span class="o">);</span>
<span class="nc">Connection</span> <span class="n">conn</span> <span class="o">=</span> <span class="n">ids</span><span class="o">.</span><span class="na">getConnection</span><span class="o">();</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>Then you can execute SQL SELECT queries as follows:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="java"><span class="c1">// Query people with specific age using prepared statement.</span>
<span class="nc">PreparedStatement</span> <span class="n">stmt</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="na">prepareStatement</span><span class="o">(</span><span class="s">"select name, age from Person where age = ?"</span><span class="o">);</span>
<span class="n">stmt</span><span class="o">.</span><span class="na">setInt</span><span class="o">(</span><span class="mi">1</span><span class="o">,</span> <span class="mi">30</span><span class="o">);</span>
<span class="nc">ResultSet</span> <span class="n">rs</span> <span class="o">=</span> <span class="n">stmt</span><span class="o">.</span><span class="na">executeQuery</span><span class="o">();</span>
<span class="k">while</span> <span class="o">(</span><span class="n">rs</span><span class="o">.</span><span class="na">next</span><span class="o">())</span> <span class="o">{</span>
<span class="nc">String</span> <span class="n">name</span> <span class="o">=</span> <span class="n">rs</span><span class="o">.</span><span class="na">getString</span><span class="o">(</span><span class="s">"name"</span><span class="o">);</span>
<span class="kt">int</span> <span class="n">age</span> <span class="o">=</span> <span class="n">rs</span><span class="o">.</span><span class="na">getInt</span><span class="o">(</span><span class="s">"age"</span><span class="o">);</span>
<span class="c1">// ...</span>
<span class="o">}</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>You can also modify the data via DML statements.</p>
</div>
<div class="sect2">
<h3 id="insert">INSERT</h3>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="java"><span class="c1">// Insert a Person with a Long key.</span>
<span class="nc">PreparedStatement</span> <span class="n">stmt</span> <span class="o">=</span> <span class="n">conn</span>
<span class="o">.</span><span class="na">prepareStatement</span><span class="o">(</span><span class="s">"INSERT INTO Person(_key, name, age) VALUES(CAST(? as BIGINT), ?, ?)"</span><span class="o">);</span>
<span class="n">stmt</span><span class="o">.</span><span class="na">setInt</span><span class="o">(</span><span class="mi">1</span><span class="o">,</span> <span class="mi">1</span><span class="o">);</span>
<span class="n">stmt</span><span class="o">.</span><span class="na">setString</span><span class="o">(</span><span class="mi">2</span><span class="o">,</span> <span class="s">"John Smith"</span><span class="o">);</span>
<span class="n">stmt</span><span class="o">.</span><span class="na">setInt</span><span class="o">(</span><span class="mi">3</span><span class="o">,</span> <span class="mi">25</span><span class="o">);</span>
<span class="n">stmt</span><span class="o">.</span><span class="na">execute</span><span class="o">();</span></code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="merge">MERGE</h3>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="java"><span class="c1">// Merge a Person with a Long key.</span>
<span class="nc">PreparedStatement</span> <span class="n">stmt</span> <span class="o">=</span> <span class="n">conn</span>
<span class="o">.</span><span class="na">prepareStatement</span><span class="o">(</span><span class="s">"MERGE INTO Person(_key, name, age) VALUES(CAST(? as BIGINT), ?, ?)"</span><span class="o">);</span>
<span class="n">stmt</span><span class="o">.</span><span class="na">setInt</span><span class="o">(</span><span class="mi">1</span><span class="o">,</span> <span class="mi">1</span><span class="o">);</span>
<span class="n">stmt</span><span class="o">.</span><span class="na">setString</span><span class="o">(</span><span class="mi">2</span><span class="o">,</span> <span class="s">"John Smith"</span><span class="o">);</span>
<span class="n">stmt</span><span class="o">.</span><span class="na">setInt</span><span class="o">(</span><span class="mi">3</span><span class="o">,</span> <span class="mi">25</span><span class="o">);</span>
<span class="n">stmt</span><span class="o">.</span><span class="na">executeUpdate</span><span class="o">();</span></code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="update">UPDATE</h3>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="java"><span class="c1">// Update a Person.</span>
<span class="n">conn</span><span class="o">.</span><span class="na">createStatement</span><span class="o">().</span>
<span class="n">executeUpdate</span><span class="o">(</span><span class="s">"UPDATE Person SET age = age + 1 WHERE age = 25"</span><span class="o">);</span></code></pre>
</div>
</div>
</div>
<div class="sect2">
<h3 id="delete">DELETE</h3>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="java"><span class="n">conn</span><span class="o">.</span><span class="na">createStatement</span><span class="o">().</span><span class="na">execute</span><span class="o">(</span><span class="s">"DELETE FROM Person WHERE age = 25"</span><span class="o">);</span></code></pre>
</div>
</div>
</div>
</div>
</div>
<div class="sect1">
<h2 id="streaming">Streaming</h2>
<div class="sectionbody">
<div class="paragraph">
<p>JDBC Driver allows streaming data in bulk using the <code>SET</code> command. See the <code>SET</code> command <a href="/docs/2.11.1/sql-reference/operational-commands#set-streaming">documentation</a> for more information.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="error-codes">Error Codes</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The JDBC drivers pass error codes in the <code>java.sql.SQLException</code> class, used to facilitate exception handling on the application side. To get an error code, use the <code>java.sql.SQLException.getSQLState()</code> method. It returns a string containing the ANSI SQLSTATE error code defined:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="rouge highlight"><code data-lang="java"><span class="nc">PreparedStatement</span> <span class="n">ps</span><span class="o">;</span>
<span class="k">try</span> <span class="o">{</span>
<span class="n">ps</span> <span class="o">=</span> <span class="n">conn</span><span class="o">.</span><span class="na">prepareStatement</span><span class="o">(</span><span class="s">"INSERT INTO Person(id, name, age) values (1, 'John', 'unparseableString')"</span><span class="o">);</span>
<span class="o">}</span> <span class="k">catch</span> <span class="o">(</span><span class="nc">SQLException</span> <span class="n">e</span><span class="o">)</span> <span class="o">{</span>
<span class="k">switch</span> <span class="o">(</span><span class="n">e</span><span class="o">.</span><span class="na">getSQLState</span><span class="o">())</span> <span class="o">{</span>
<span class="k">case</span> <span class="s">"0700B"</span><span class="o">:</span>
<span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Conversion failure"</span><span class="o">);</span>
<span class="k">break</span><span class="o">;</span>
<span class="k">case</span> <span class="s">"42000"</span><span class="o">:</span>
<span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Parsing error"</span><span class="o">);</span>
<span class="k">break</span><span class="o">;</span>
<span class="k">default</span><span class="o">:</span>
<span class="nc">System</span><span class="o">.</span><span class="na">out</span><span class="o">.</span><span class="na">println</span><span class="o">(</span><span class="s">"Unprocessed error: "</span> <span class="o">+</span> <span class="n">e</span><span class="o">.</span><span class="na">getSQLState</span><span class="o">());</span>
<span class="k">break</span><span class="o">;</span>
<span class="o">}</span>
<span class="o">}</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>The table below lists all the <a href="https://en.wikipedia.org/wiki/SQLSTATE">ANSI SQLSTATE</a> error codes currently supported by Ignite. Note that the list may be extended in the future.</p>
</div>
<table class="tableblock frame-all grid-all stripes-even stretch">
<colgroup>
<col style="width: 20%;">
<col style="width: 80%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Code</th>
<th class="tableblock halign-left valign-top">Description</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0700B</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Conversion failure (for example, a string expression cannot be parsed as a number or a date).</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0700E</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Invalid transaction isolation level.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">08001</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The driver failed to open a connection to the cluster.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">08003</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The connection is in the closed state. Happened unexpectedly.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">08004</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">The connection was rejected by the cluster.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">08006</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">I/O error during communication.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">22004</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Null value not allowed.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">22023</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Unsupported parameter type.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">23000</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Data integrity constraint violation.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">24000</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Invalid result set state.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">0A000</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Requested operation is not supported.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">40001</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Concurrent update conflict. See <a href="/docs/2.11.1/transactions/mvcc#concurrent-updates">Concurrent Updates</a>.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">42000</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Query parsing exception.</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock">50000</p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Internal error.
The code is not defined by ANSI and refers to an Ignite specific error. Refer to the <code>java.sql.SQLException</code> error message for more information.</p></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="copyright">
© 2022 The Apache Software Foundation.<br/>
Apache, Apache Ignite, the Apache feather and the Apache Ignite logo are either registered trademarks or trademarks of The Apache Software Foundation.
</div>
</article>
<nav class="right-nav" data-swiftype-index='false'>
<div class="toc-wrapper">
<ul class="sectlevel1">
<li><a href="#jdbc-thin-driver">JDBC Thin Driver</a>
<ul class="sectlevel2">
<li><a href="#parameters">Parameters</a></li>
<li><a href="#connection-string-examples">Connection String Examples</a></li>
<li><a href="#multiple-endpoints">Multiple Endpoints</a></li>
<li><a href="#partition-awareness">Partition Awareness</a></li>
<li><a href="#cluster-configuration">Cluster Configuration</a></li>
<li><a href="#using-ssl">Using SSL</a></li>
</ul>
</li>
<li><a href="#ignite-datasource">Ignite DataSource</a></li>
<li><a href="#examples">Examples</a>
<ul class="sectlevel2">
<li><a href="#insert">INSERT</a></li>
<li><a href="#merge">MERGE</a></li>
<li><a href="#update">UPDATE</a></li>
<li><a href="#delete">DELETE</a></li>
</ul>
</li>
<li><a href="#streaming">Streaming</a></li>
<li><a href="#error-codes">Error Codes</a></li>
</ul>
</div>
<nav class="promo-nav">
<!--#include virtual="/includes/docs_rightnav_promotion.html" -->
<a href="#" data-trigger-bugyard-feedback="true" id="doc-feedback-btn">Docs Feedback</a>
</nav>
</nav>
</section>
<script type='module' src='/assets/js/code-copy-to-clipboard.js' async crossorigin></script>
<script>
// inits deep anchors -- needs to be done here because of https://www.bryanbraun.com/anchorjs/#dont-run-it-too-late
anchors.add('.page-docs h1, .page-docs h2, .page-docs h3:not(.discrete), .page-docs h4, .page-docs h5');
anchors.options = {
placement: 'right',
visible: 'always'
};
</script>
<script src="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js"></script>
<script>
docsearch({
// Your apiKey and indexName will be given to you once
// we create your config
apiKey: '3eee686c0ebe39eff3baeb18c56fa5f8',
indexName: 'apache_ignite',
// Replace inputSelector with a CSS selector
// matching your search input
inputSelector: '#search-input',
// algoliaOptions: { 'facetFilters': ["version:$VERSION"] },
// Set debug to true to inspect the dropdown
debug: false,
});
</script>
<script type='module' src='/assets/js/index.js?1642237234' async crossorigin></script>
<script type='module' src='/assets/js/versioning.js?1642237234' async crossorigin></script>
<link rel="stylesheet" href="/assets/css/styles.css?1642237234" media="print" onload="this.media='all'">
<noscript><link media="all" rel="stylesheet" href="/assets/css/styles.css?1642237234"></noscript>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css" media="print" onload="this.media='all'">
<noscript><link media="all" rel="stylesheet" href="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css"></noscript>
</body>
</html>