{"id":183,"date":"2018-01-30T18:46:51","date_gmt":"2018-01-30T17:46:51","guid":{"rendered":"https:\/\/www.virtualberater.com\/?p=183"},"modified":"2020-05-15T16:57:14","modified_gmt":"2020-05-15T14:57:14","slug":"sql-tag-library","status":"publish","type":"post","link":"https:\/\/www.virtualberater.com\/index.php\/2018\/01\/30\/sql-tag-library\/","title":{"rendered":"SQL Tag Library"},"content":{"rendered":"\n<p style=\"color:#00a30b\" class=\"has-text-color\"><em>Wir haben uns verirrt, kommen aber gut voran.<\/em><br><a href=\"https:\/\/de.wikipedia.org\/wiki\/Tom_DeMarco\"><em>Tom DeMarco<\/em><\/a><\/p>\n\n\n\n<p>Mit der SQL Tag Library wird die M\u00f6glichkeit geschaffen, direkt in JSPs auf Datenbanken zuzugreifen. Es ist allerdings schon sehr merkw\u00fcrdig, dass diese Bibliothek den Weg in die JSTL geschafft hat. Da wurde bisher immer wieder von MVC also M\u00f6glichkeit eines sauberen Designs mit einer Trennung von Darstellungsschicht, Modell und Businesslogik betont, aber hier das direkte Durchgreifen \u00fcber alle Schichtgrenzen hinweg auf eine Datenbank erlaubt. Ich lasse dies hier einfach im Raum stehen.\u00a0 Ich stelle hier nur die die einzelnen Taghandler mit den wichtigen Attributen vor:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-subtle-pale-blue-background-color has-background\"><tbody><tr><td><strong>SQL&nbsp;Tag<\/strong><\/td><td><strong>Bedeutung<\/strong><\/td><\/tr><tr><td>transaction<\/td><td>Stellt eine DB Transaktion bereit<\/td><\/tr><tr><td>query<\/td><td>F\u00fchrt eine Datenbank-Abfrage durch (SELECT etc.)<\/td><\/tr><tr><td>update<\/td><td>F\u00fcr \u00c4nderungsanfragen an die Datenbank aus (INSERT, UPDATE, DELETE)<\/td><\/tr><tr><td>param<\/td><td>Setzt einen Abfrageparameter auf den angegebenen Wert<\/td><\/tr><tr><td>dateParam<\/td><td>Setzt Datums- und\/oder Zeitparameter auf den angegebenen Wert. Der Wert muss vom Typ java.util.Date sein<\/td><\/tr><tr><td>setdataSource<\/td><td>Legt ein javax.sql.DataSource Objekt in einer Variablen ab. Im Prinzip eine Connection.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>&lt;sql:transaction><\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-subtle-pale-blue-background-color has-background\"><tbody><tr><td><strong>Attribut<\/strong><\/td><td><strong>Pflichtfeld<\/strong><\/td><td><strong>Bedeutung<\/strong><\/td><\/tr><tr><td>dataSource<\/td><td>nein<\/td><td>Gibt die DataSource an, die verwendet werden soll. Es k\u00f6nnen hier auch JNDI Bezeichnungen als Strings \u00fcbergeben werden um auf einen Connection Pool zu verweisen.<\/td><\/tr><tr><td>isolation<\/td><td>nein<\/td><td>Der gew\u00fcnschte Isolationslevel. Wenn dieser leer gelassen wird, ist es der standardm\u00e4\u00dfig f\u00fcr diese Datenquelle definierte. M\u00f6gliche Werte sind &#8222;read_uncommitted&#8220;, &#8222;read_committed&#8220;, &#8222;repeatable_read&#8220; und &#8222;serializable&#8220;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Dieses Tag bildet eine Transaktion f\u00fcr <strong><em>&lt;sql:query> <\/em><\/strong>oder<strong><em>&lt;sql:update><\/em><\/strong> -Tags.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>&lt;sql:query><\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-subtle-pale-blue-background-color has-background\"><tbody><tr><td><strong>Attribut<\/strong><\/td><td><strong>Pflichtfeld<\/strong><\/td><td><strong>Bedeutung<\/strong><\/td><\/tr><tr><td>var<\/td><td>ja<\/td><td>Der Variablen Name, quasi das Resultset unter dem das Ergebnis der SQL-Abfrage abgelegt werden soll<\/td><\/tr><tr><td>scope<\/td><td>nein<\/td><td>Der gew\u00fcnschte <a href=\"https:\/\/www.virtualberater.com\/index.php\/2018\/01\/08\/java-server-pages-2\/\">G\u00fcltigkeitsbereich<\/a> f\u00fcr die unter dem Attribut &#8222;var&#8220; angegebene Variable<\/td><\/tr><tr><td>dataSource<\/td><td>nein<\/td><td>Gibt die Data Source an, die verwendet werden soll in Form einer JDBC Url. Es kann auch wie oben Beschrieben eine JNDI Bezeichnung mit Ziel eines Connection Pools als String angegeben werden.<\/td><\/tr><tr><td>sql<\/td><td>nein<\/td><td>Das abzusetzende Statement. Es kann auch im Body des Tags angegeben werden.<\/td><\/tr><tr><td>startRow<\/td><td>nein<\/td><td>Gibt die erste gew\u00fcnschte Zeile des Abfrageergebnisses. F\u00fcr eine Darstellung die Seitenweise die Menge der Abfrageergebnisse darstellt.<\/td><\/tr><tr><td>maxRows<\/td><td>nein<\/td><td>Die maximale Anzahl der Ergebnisse, die die Abfrage liefern soll. Auch hier gilt die \u00dcberlegung das Daten Seitenweise dargestellt werden k\u00f6nnen.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Dieses Tag wird f\u00fcr Abfragen an die Datenbank genutzt. Das Ergebnis wird in einem Objekt vom Typ javax.servlet.jsp.jstl.sql.Result abgelegt. Der Name, unter dem dieses Objekt abgelegt werden soll, bildet das wichtige Pflicht-Attribut des Tags.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>&lt;sql:update><\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-subtle-pale-blue-background-color has-background\"><tbody><tr><td><strong>Attribut<\/strong><\/td><td><strong>Pflichtfeld<\/strong><\/td><td><strong>Bedeutung<\/strong><\/td><\/tr><tr><td>var<\/td><td>nein<\/td><td>Der Name, unter dem das Ergebnis der SQL-Abfrage abgelegt werden soll. Das Ergebnis ist vom Typ java.lang.Integer und gibt die Anzahl der ver\u00e4nderten bzw. neu hinzugef\u00fcgten Reihen in der ver\u00e4nderten Tabelle an<\/td><\/tr><tr><td>scope<\/td><td>nein<\/td><td>Der <a href=\"https:\/\/www.virtualberater.com\/index.php\/2018\/01\/08\/java-server-pages-2\/\">G\u00fcltigkeitsbereich<\/a> f\u00fcr die unter dem Attribut &#8222;var&#8220; angegebene Variable.<\/td><\/tr><tr><td>dataSource<\/td><td>nein<\/td><td>Gibt die Data Source an, die verwendet werden soll. Dies muss entweder eine Variable vom Typ Data Source sein oder ein String, der einen JNDI-Pfad oder die JDBC-DriverManager-Parameter enth\u00e4lt.<\/td><\/tr><tr><td>sql<\/td><td>nein<\/td><td>Das abzusetzende Statement. Wird dieses Attribut nicht genutzt, so ist der Body des Tags f\u00fcr das gew\u00fcnschte SQL-Statement zu nutzen<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Das Update Tag nimmt Ver\u00e4nderungen an der DB vor. Auch wenn der Tag &lt;sql:update> lautet, kann dieser Taghandler neben dem UPDATE Statements auch f\u00fcr INSERT- und DELETE Statements genutzt werden<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>&lt;sql:param><\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-subtle-pale-blue-background-color has-background\"><tbody><tr><td><strong>Attribut<\/strong><\/td><td><strong>Pflichtfeld<\/strong><\/td><td><strong>Bedeutung<\/strong><\/td><\/tr><tr><td>value<\/td><td>nein<\/td><td>Der gew\u00fcnschte Wert f\u00fcr den Parameter<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Die <em>&lt;sql:update><\/em>&#8211; und <em>&lt;sql:insert><\/em>-Tags k\u00f6nnen wie ein Prepared Statements Parameter annehmen. Dabei spielt die Reihenfolge beim jeweiligen SQL-Statement, wie auch bei der normalen Java Programmierung ein wichtige Rolle. Der gew\u00fcnschte Wert kann sowohl im &#8222;value&#8220;-Attribut oder im Body des Tags angegeben werden<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>&lt;sql:dateParam><\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-subtle-pale-blue-background-color has-background\"><tbody><tr><td><strong>Attribut<\/strong><\/td><td><strong>Pflichtfeld<\/strong><\/td><td><strong>Bedeutung<\/strong><\/td><\/tr><tr><td>value<\/td><td>ja<\/td><td>Der gew\u00fcnschte Wert f\u00fcr den Parameter<\/td><\/tr><tr><td>type<\/td><td>nein<\/td><td>Der Typ des Attributs. Kann &#8222;date&#8220;, &#8222;time&#8220; oder &#8222;timestamp&#8220; sein<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Mit dem &lt;sql:param>-Tag kann man dem Statement bspw. Zahlen oder String-Parameter hinzuf\u00fcgen. F\u00fcr Datumswerte muss hingegen dieser Tag verwendet werden. Der Wert des Parameter muss \u2013 im Unterschied zum &lt;sql:param>-Tag \u2013 zwingend im &#8222;value&#8220;-Attribut angegeben werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>&lt;sql:setDataSource><\/strong><\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-subtle-pale-blue-background-color has-background\"><tbody><tr><td><strong>Attribut<\/strong><\/td><td><strong>Pflichtfeld<\/strong><\/td><td><strong>Bedeutung<\/strong><\/td><\/tr><tr><td>var<\/td><td>nein<\/td><td>Der Name, unter dem die Datasource-Variable abgelegt werden soll. Wird dieser nicht angegeben, wird die Datenquelle unter dem Namen &#8222;javax.servlet.jsp.jstl.sql.dataSource&#8220; abgelegt<\/td><\/tr><tr><td>scope<\/td><td>nein<\/td><td>Der gew\u00fcnschte <a href=\"https:\/\/www.virtualberater.com\/index.php\/2018\/01\/08\/java-server-pages-2\/\">G\u00fcltigkeitsbereich<\/a> f\u00fcr die unter dem Attribut &#8222;var&#8220; angegebene DataSource<\/td><\/tr><tr><td>dataSource<\/td><td>nein<\/td><td>Gibt die DataSource an, die verwendet werden soll. Dies muss entweder eine Variable vom Typ Datasource sein oder ein String, der einen JNDI-Pfad oder die JDBC-DriverManager-Parameter enth\u00e4lt.<\/td><\/tr><tr><td>driver<\/td><td>nein<\/td><td>Der Name des zu verwendenden JDBC-Drivers<\/td><\/tr><tr><td>url<\/td><td>nein<\/td><td>Die jdbc URL, unter der die DB erreichbar ist<\/td><\/tr><tr><td>user<\/td><td>nein<\/td><td>Der Loginname, der f\u00fcr die DB-Zugriffe verwendet wird<\/td><\/tr><tr><td>password<\/td><td>nein<\/td><td>Das passende Passwort zum verwendeten Loginnamen<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Dieses Tag legt fest, gegen welche Datenbank&nbsp;die Abfragen gehen sollen. Das Attribut &#8222;dataSource&#8220;&nbsp;enth\u00e4lt. Zun\u00e4chst einmal kann dieses Attribut ein Objekt vom Typ javax.sql.DataSource entgegen nehmen. Alternativ kann man einen String angeben. Dieser kann entweder ein relativer Pfad auf eine JNDI-Ressource sein oder eine kompakte Form der anderen Driver spezifischen Attribute dieses Tags.<br>Nutzt man den gerade beschriebenen DataSource-String oder die JDBC-relevanten Parameter, so wird ein <a href=\"http:\/\/web.archive.org\/web\/20161104065339\/http:\/java.sun.com\/javase\/6\/docs\/api\/index.html?java\/sql\/DriverManager.html\">java.sql.DriverManager<\/a>-Objekt erzeugt, das keinerlei Connection-Pooling-F\u00e4higkeiten mitbringt. Bei produktiven Anwendungen sollte immer mittels des JNDI-Pfads auf eine im Container konfigurierten Connection Pool (DataSource) zugegriffen werden.<\/p>\n\n\n\n<p>Ein praktisches Beispiel f\u00fcr ein lesenden Datenbankzugriff. Es wird hier auf die Beispieldatenbank Sample, die bei einer Netbeans Installation immer mit installiert wird, zugegriffen. Ganz genau auf die Tabelle Customer.<\/p>\n\n\n\n<p class=\"has-background has-background-color-background-color\">&lt;%@page contentType=&#8220;text\/html&#8220; pageEncoding=&#8220;UTF-8&#8243;%><br><a href=\"mailto:%25@taglib%20prefix=%22c%22%20uri=%22http:\/\/java.sun.com\/jsp\/jstl\/core%22%20%25\">%@taglib prefix=&#8220;c&#8220; uri=&#8220;http:\/\/java.sun.com\/jsp\/jstl\/core&#8220; %<\/a><br><a href=\"mailto:%25@taglib%20prefix=%22sql%22%20uri=%22http:\/\/java.sun.com\/jsp\/jstl\/sql%22%20%25\">%@taglib prefix=&#8220;sql&#8220; uri=&#8220;http:\/\/java.sun.com\/jsp\/jstl\/sql&#8220; %<\/a><br>&lt;!DOCTYPE html><br>&lt;html><br>\u00a0 &lt;head><br>\u00a0\u00a0\u00a0 &lt;meta http-equiv=&#8220;Content-Type&#8220; content=&#8220;text\/html; charset=UTF-8&#8243;><br>\u00a0\u00a0\u00a0 &lt;title>JSTL-SQL\u00a0&#8211;\u00a0Example&lt;\/title><br>\u00a0 &lt;\/head><br>&lt;body><br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;sql:setDataSource driver=&#8220;org.apache.derby.jdbc.ClientDriver&#8220;<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0url=&#8220;jdbc:derby:\/\/localhost:1527\/sample&#8220;<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 user=&#8220;app&#8220;<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 password=&#8220;app&#8220;<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 var=&#8220;con&#8220;<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 scope=&#8220;request&#8220; \/><br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;sql:query dataSource=&#8220;${con}&#8220;<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 var=&#8220;result&#8220;<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 maxRows=&#8220;10&#8243;<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 startRow=&#8220;0&#8243;<br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 sql=&#8220;Select * from customer&#8220; \/><br>\u00a0&lt;table><br>\u00a0 &lt;tr><br>\u00a0\u00a0 &lt;c:forEach items=&#8220;${result.columnNames}&#8220; var=&#8220;column&#8220;><br>\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;th style=&#8220;border:\u00a01px\u00a0solid\u00a0#000000;\u00a0padding:\u00a05px;&#8220;>${column}&lt;\/th><br>\u00a0\u00a0 &lt;\/c:forEach><br>\u00a0 &lt;\/tr><br>\u00a0\u00a0\u00a0 &lt;c:forEach items=&#8220;${result.rows}&#8220; var=&#8220;currRow&#8220;><br>\u00a0 &lt;tr><br>\u00a0\u00a0 \u00a0&lt;c:forEach items=&#8220;${result.columnNames}&#8220; var=&#8220;column&#8220;><br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 &lt;td style=&#8220;border:\u00a01px\u00a0solid\u00a0#000000;\u00a0padding:\u00a05px;&#8220;><br>\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 ${currRow[column]}&lt;\/td><br>\u00a0\u00a0\u00a0 &lt;\/c:forEach><br>\u00a0 &lt;\/tr><br>\u00a0\u00a0\u00a0 &lt;\/c:forEach><br>\u00a0 &lt;\/table><br>&lt;\/body><br>&lt;\/html><br><br><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wir haben uns verirrt, kommen aber gut voran.Tom DeMarco Mit der SQL Tag Library wird die M\u00f6glichkeit geschaffen, direkt in JSPs auf Datenbanken zuzugreifen. Es ist allerdings schon sehr merkw\u00fcrdig, dass diese Bibliothek den Weg in die JSTL geschafft hat. Da wurde bisher immer wieder von MVC also M\u00f6glichkeit eines [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[10,8],"tags":[16,39,44],"class_list":["post-183","post","type-post","status-publish","format-standard","hentry","category-jsp","category-javaweb","tag-jsp","tag-jstl","tag-sql-bibliothek"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.8 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>SQL Tag Library - Virtualberater<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.virtualberater.com\/index.php\/2018\/01\/30\/sql-tag-library\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL Tag Library - Virtualberater\" \/>\n<meta property=\"og:description\" content=\"Wir haben uns verirrt, kommen aber gut voran.Tom DeMarco Mit der SQL Tag Library wird die M\u00f6glichkeit geschaffen, direkt in JSPs auf Datenbanken zuzugreifen. Es ist allerdings schon sehr merkw\u00fcrdig, dass diese Bibliothek den Weg in die JSTL geschafft hat. Da wurde bisher immer wieder von MVC also M\u00f6glichkeit eines [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.virtualberater.com\/index.php\/2018\/01\/30\/sql-tag-library\/\" \/>\n<meta property=\"og:site_name\" content=\"Virtualberater\" \/>\n<meta property=\"article:published_time\" content=\"2018-01-30T17:46:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-05-15T14:57:14+00:00\" \/>\n<meta name=\"author\" content=\"Franz-Martin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Verfasst von\" \/>\n\t<meta name=\"twitter:data1\" content=\"Franz-Martin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Gesch\u00e4tzte Lesezeit\" \/>\n\t<meta name=\"twitter:data2\" content=\"5\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.virtualberater.com\/index.php\/2018\/01\/30\/sql-tag-library\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.virtualberater.com\/index.php\/2018\/01\/30\/sql-tag-library\/\"},\"author\":{\"name\":\"Franz-Martin\",\"@id\":\"https:\/\/www.virtualberater.com\/#\/schema\/person\/c70d622c592ff122093a39649b040609\"},\"headline\":\"SQL Tag Library\",\"datePublished\":\"2018-01-30T17:46:51+00:00\",\"dateModified\":\"2020-05-15T14:57:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.virtualberater.com\/index.php\/2018\/01\/30\/sql-tag-library\/\"},\"wordCount\":1126,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.virtualberater.com\/#\/schema\/person\/c70d622c592ff122093a39649b040609\"},\"keywords\":[\"Jsp\",\"Jstl\",\"sql Bibliothek\"],\"articleSection\":[\"Java Server Pages\",\"Java Web\"],\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.virtualberater.com\/index.php\/2018\/01\/30\/sql-tag-library\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.virtualberater.com\/index.php\/2018\/01\/30\/sql-tag-library\/\",\"url\":\"https:\/\/www.virtualberater.com\/index.php\/2018\/01\/30\/sql-tag-library\/\",\"name\":\"SQL Tag Library - Virtualberater\",\"isPartOf\":{\"@id\":\"https:\/\/www.virtualberater.com\/#website\"},\"datePublished\":\"2018-01-30T17:46:51+00:00\",\"dateModified\":\"2020-05-15T14:57:14+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.virtualberater.com\/index.php\/2018\/01\/30\/sql-tag-library\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.virtualberater.com\/index.php\/2018\/01\/30\/sql-tag-library\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.virtualberater.com\/index.php\/2018\/01\/30\/sql-tag-library\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Startseite\",\"item\":\"https:\/\/www.virtualberater.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SQL Tag Library\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.virtualberater.com\/#website\",\"url\":\"https:\/\/www.virtualberater.com\/\",\"name\":\"Virtualberater\",\"description\":\"Java und mehr\",\"publisher\":{\"@id\":\"https:\/\/www.virtualberater.com\/#\/schema\/person\/c70d622c592ff122093a39649b040609\"},\"alternateName\":\"Java Entwicklung, Microframeworks und Cloud-Native Solutions\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.virtualberater.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.virtualberater.com\/#\/schema\/person\/c70d622c592ff122093a39649b040609\",\"name\":\"Franz-Martin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.virtualberater.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/383ead0152e9bb024087006ad8dbfa33de9e321b670411b3370ad907f770a666?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/383ead0152e9bb024087006ad8dbfa33de9e321b670411b3370ad907f770a666?s=96&d=mm&r=g\",\"caption\":\"Franz-Martin\"},\"logo\":{\"@id\":\"https:\/\/www.virtualberater.com\/#\/schema\/person\/image\/\"},\"url\":\"https:\/\/www.virtualberater.com\/index.php\/author\/franz-martin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"SQL Tag Library - Virtualberater","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.virtualberater.com\/index.php\/2018\/01\/30\/sql-tag-library\/","og_locale":"de_DE","og_type":"article","og_title":"SQL Tag Library - Virtualberater","og_description":"Wir haben uns verirrt, kommen aber gut voran.Tom DeMarco Mit der SQL Tag Library wird die M\u00f6glichkeit geschaffen, direkt in JSPs auf Datenbanken zuzugreifen. Es ist allerdings schon sehr merkw\u00fcrdig, dass diese Bibliothek den Weg in die JSTL geschafft hat. Da wurde bisher immer wieder von MVC also M\u00f6glichkeit eines [&hellip;]","og_url":"https:\/\/www.virtualberater.com\/index.php\/2018\/01\/30\/sql-tag-library\/","og_site_name":"Virtualberater","article_published_time":"2018-01-30T17:46:51+00:00","article_modified_time":"2020-05-15T14:57:14+00:00","author":"Franz-Martin","twitter_card":"summary_large_image","twitter_misc":{"Verfasst von":"Franz-Martin","Gesch\u00e4tzte Lesezeit":"5\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.virtualberater.com\/index.php\/2018\/01\/30\/sql-tag-library\/#article","isPartOf":{"@id":"https:\/\/www.virtualberater.com\/index.php\/2018\/01\/30\/sql-tag-library\/"},"author":{"name":"Franz-Martin","@id":"https:\/\/www.virtualberater.com\/#\/schema\/person\/c70d622c592ff122093a39649b040609"},"headline":"SQL Tag Library","datePublished":"2018-01-30T17:46:51+00:00","dateModified":"2020-05-15T14:57:14+00:00","mainEntityOfPage":{"@id":"https:\/\/www.virtualberater.com\/index.php\/2018\/01\/30\/sql-tag-library\/"},"wordCount":1126,"commentCount":0,"publisher":{"@id":"https:\/\/www.virtualberater.com\/#\/schema\/person\/c70d622c592ff122093a39649b040609"},"keywords":["Jsp","Jstl","sql Bibliothek"],"articleSection":["Java Server Pages","Java Web"],"inLanguage":"de","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.virtualberater.com\/index.php\/2018\/01\/30\/sql-tag-library\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.virtualberater.com\/index.php\/2018\/01\/30\/sql-tag-library\/","url":"https:\/\/www.virtualberater.com\/index.php\/2018\/01\/30\/sql-tag-library\/","name":"SQL Tag Library - Virtualberater","isPartOf":{"@id":"https:\/\/www.virtualberater.com\/#website"},"datePublished":"2018-01-30T17:46:51+00:00","dateModified":"2020-05-15T14:57:14+00:00","breadcrumb":{"@id":"https:\/\/www.virtualberater.com\/index.php\/2018\/01\/30\/sql-tag-library\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.virtualberater.com\/index.php\/2018\/01\/30\/sql-tag-library\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.virtualberater.com\/index.php\/2018\/01\/30\/sql-tag-library\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Startseite","item":"https:\/\/www.virtualberater.com\/"},{"@type":"ListItem","position":2,"name":"SQL Tag Library"}]},{"@type":"WebSite","@id":"https:\/\/www.virtualberater.com\/#website","url":"https:\/\/www.virtualberater.com\/","name":"Virtualberater","description":"Java und mehr","publisher":{"@id":"https:\/\/www.virtualberater.com\/#\/schema\/person\/c70d622c592ff122093a39649b040609"},"alternateName":"Java Entwicklung, Microframeworks und Cloud-Native Solutions","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.virtualberater.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":["Person","Organization"],"@id":"https:\/\/www.virtualberater.com\/#\/schema\/person\/c70d622c592ff122093a39649b040609","name":"Franz-Martin","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.virtualberater.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/383ead0152e9bb024087006ad8dbfa33de9e321b670411b3370ad907f770a666?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/383ead0152e9bb024087006ad8dbfa33de9e321b670411b3370ad907f770a666?s=96&d=mm&r=g","caption":"Franz-Martin"},"logo":{"@id":"https:\/\/www.virtualberater.com\/#\/schema\/person\/image\/"},"url":"https:\/\/www.virtualberater.com\/index.php\/author\/franz-martin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.virtualberater.com\/index.php\/wp-json\/wp\/v2\/posts\/183","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.virtualberater.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.virtualberater.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.virtualberater.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.virtualberater.com\/index.php\/wp-json\/wp\/v2\/comments?post=183"}],"version-history":[{"count":12,"href":"https:\/\/www.virtualberater.com\/index.php\/wp-json\/wp\/v2\/posts\/183\/revisions"}],"predecessor-version":[{"id":787,"href":"https:\/\/www.virtualberater.com\/index.php\/wp-json\/wp\/v2\/posts\/183\/revisions\/787"}],"wp:attachment":[{"href":"https:\/\/www.virtualberater.com\/index.php\/wp-json\/wp\/v2\/media?parent=183"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.virtualberater.com\/index.php\/wp-json\/wp\/v2\/categories?post=183"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.virtualberater.com\/index.php\/wp-json\/wp\/v2\/tags?post=183"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}