{"id":267,"date":"2004-11-30T04:30:00","date_gmt":"2004-11-30T11:30:00","guid":{"rendered":"http:\/\/kodegeek.com\/blog\/?p=267"},"modified":"2004-11-30T04:30:00","modified_gmt":"2004-11-30T11:30:00","slug":"echando-codigo-obteniendo-la-metadata-de-una-base-de-datos-en-java","status":"publish","type":"post","link":"http:\/\/kodegeek.com\/blog\/2004\/11\/30\/echando-codigo-obteniendo-la-metadata-de-una-base-de-datos-en-java\/","title":{"rendered":"Echando c\u00f3digo: Obteniendo la metadata de una base de datos en Java"},"content":{"rendered":"<p><img decoding=\"async\" src=\"http:\/\/java.sun.com\/im\/logo_java_grey.gif\" \/><br \/>\n<br \/>M\u00e1s de una vez me toc\u00f3 revizar si pod\u00eda conectarme a una base de datos despu\u00e9s de la instalaci\u00f3n; Normalmente estas base de datos eran Open Source (MySQL, PostgreSQL) o comerciales (Oracle, Sybase). Cada una de ellas tiene una herramienta nativa que permite ejecutar SQL desde la l\u00ednea de comando.<\/p>\n<p>Por ejemplo, para PostgreSQL usted puede utilizar el comand &#8216;<span style=\"font-family:courier new;\">psql<\/span>&#8216;:<\/p>\n<p><span style=\"font-family:courier new;\">psql -U postgres -d template1 -h 127.0.0.1<\/span><\/p>\n<p>Y para Sybase puede utilizar el comando &#8216;<span style=\"font-family:courier new;\">isql<\/span>:&#8217;<\/p>\n<p><span style=\"font-family:courier new;\">isql -U sa -P -S localhost -D tempdb<\/span><\/p>\n<p>\u00bfNo tienen nada que ver, verdad?. Bueno, viene Java al rescate. Java cuenta con un API estandar para conectarse a base de datos llamada &#8216;<a href=\"http:\/\/java.sun.com\/docs\/books\/tutorial\/jdbc\/\">JDBC<\/a>&#8216;. JDBC ofrece m\u00e9todos consistentes sin importar el tipo de base de datos, lo cual hace la programaci\u00f3n mucho m\u00e1s f\u00e1cil.<\/p>\n<p>\u00bfY que tipo de informaci\u00f3n podemos obtener con el <a href=\"http:\/\/java.sun.com\/j2se\/1.3\/docs\/guide\/jdbc\/\">API de JDBC<\/a> acerca de la base de datos? Bueno, esa parte si es dependiente del driver (manejador) particular con el que nos conectamos a la base de datos; Si un m\u00e9todo no es soportado entonces lo m\u00e1s seguro es que Java arroja una &#8216;<span style=\"font-family:courier new;\">MethodNotImplementedException<\/span>&#8216;, asique es bueno revizar el manual del vendedor antes de utilizarlo para evitar sorpresas.<\/p>\n<p>Este no es un tutorial completo de JDBC, pero si le voy a mostrar el c\u00f3digo de un programa que escrib\u00ed hace tiempo para probar instalaciones nuevas de BD; No es perfecto pero le dar\u00e1 una idea de todo lo que se puede hacer. El ejemplo est\u00e1 corriendo contra una base de datos Sybase 12.5.1 en Linux:<\/p>\n<style type=\"text\/css\"><!-- .syntax0 { color: #000000; } .syntax1 { color: #cc0000; } .syntax2 { color: #ff8400; } .syntax3 { color: #6600cc; } .syntax4 { color: #cc6600; } .syntax5 { color: #ff0000; } .syntax6 { color: #9966ff; } .syntax7 { background: #ffffcc; color: #ff0066; } .syntax8 { color: #006699; font-weight: bold; } .syntax9 { color: #009966; font-weight: bold; } .syntax10 { color: #0099ff; font-weight: bold; } .syntax11 { color: #66ccff; font-weight: bold; } .syntax12 { color: #02b902; } .syntax13 { color: #ff00cc; } .syntax14 { color: #cc00cc; } .syntax15 { color: #9900cc; } .syntax16 { color: #6600cc; } .syntax17 { color: #0000ff; } .syntax18 { color: #000000; font-weight: bold; } .gutter { background: #dbdbdb; color: #000000; } .gutterH { background: #dbdbdb; color: #666699; } --><br \/><\/style>\n<p><\/p>\n<pre><span class=\"gutter\">   1:<\/span><span class=\"syntax9\">import<\/span> java.sql.Connection;\n<br \/><span class=\"gutter\">   2:<\/span><span class=\"syntax9\">import<\/span> java.sql.DatabaseMetaData;\n<br \/><span class=\"gutter\">   3:<\/span><span class=\"syntax9\">import<\/span> java.sql.DriverManager;\n<br \/><span class=\"gutter\">   4:<\/span><span class=\"syntax9\">import<\/span> java.sql.ResultSet;\n<br \/><span class=\"gutterH\">   5:<\/span><span class=\"syntax9\">import<\/span> java.sql.SQLException;\n<br \/><span class=\"gutter\">   6:<\/span><span class=\"syntax9\">import<\/span> java.util.ResourceBundle;\n<br \/><span class=\"gutter\">   7:<\/span>\n<br \/><span class=\"gutter\">   8:<\/span><span class=\"syntax3\">\/**<\/span>\n<br \/><span class=\"gutter\">   9:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">This<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">program<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">performs<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">metadata<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">tests<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">on<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">a<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">given<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">database<\/span><span class=\"syntax3\">.<\/span>\n<br \/><span class=\"gutterH\">  10:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">License<\/span><span class=\"syntax3\">:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">LGPL<\/span>\n<br \/><span class=\"gutter\">  11:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@author<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Jose<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Vicente<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Nunez<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Zuleta<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">(<\/span><span class=\"syntax3\">josevnz@yahoo<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">com<\/span><span class=\"syntax3\">)<\/span>\n<br \/><span class=\"gutter\">  12:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@version<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">0<\/span><span class=\"syntax3\">.<\/span><span class=\"syntax3\">1<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">-<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">05<\/span><span class=\"syntax3\">\/<\/span><span class=\"syntax3\">06<\/span><span class=\"syntax3\">\/<\/span><span class=\"syntax3\">2003<\/span>\n<br \/><span class=\"gutter\">  13:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span>\n<br \/><span class=\"gutter\">  14:<\/span><span class=\"syntax8\">public<\/span> <span class=\"syntax10\">class<\/span> TestJDBC <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutterH\">  15:<\/span>\n<br \/><span class=\"gutter\">  16:<\/span>  <span class=\"syntax3\">\/**<\/span>\n<br \/><span class=\"gutter\">  17:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Command<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">line<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">processing<\/span>\n<br \/><span class=\"gutter\">  18:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@param<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">args<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Currently<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">ignored<\/span>\n<br \/><span class=\"gutter\">  19:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax12\">@throws<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">Exception<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">If<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">any<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">of<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">the<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">required<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">properties<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">is<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">missing<\/span>\n<br \/><span class=\"gutterH\">  20:<\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\"> <\/span><span class=\"syntax3\">*\/<\/span>\n<br \/><span class=\"gutter\">  21:<\/span>  <span class=\"syntax8\">public<\/span> <span class=\"syntax8\">static<\/span> <span class=\"syntax10\">void<\/span> <span class=\"syntax6\">main<\/span>(String [] args) <span class=\"syntax8\">throws<\/span> Exception <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  22:<\/span>          Connection con <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;\n<br \/><span class=\"gutter\">  23:<\/span>          ResultSet result <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;\n<br \/><span class=\"gutter\">  24:<\/span>          ResultSet result2 <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;\n<br \/><span class=\"gutterH\">  25:<\/span>          DatabaseMetaData metadata <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;\n<br \/><span class=\"gutter\">  26:<\/span>          <span class=\"syntax8\">try<\/span> <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  27:<\/span>                  <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Connect<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">to<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">the<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">database<\/span>\n<br \/><span class=\"gutter\">  28:<\/span>                  ResourceBundle bundle <span class=\"syntax18\">=<\/span> ResourceBundle.<span class=\"syntax6\">getBundle<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">TestJDBC<\/span><span class=\"syntax13\">\"<\/span>);\n<br \/><span class=\"gutter\">  29:<\/span>                  System.out.<span class=\"syntax6\">println<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Using<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">driver:<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span> bundle.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">driver<\/span><span class=\"syntax13\">\"<\/span>));\n<br \/><span class=\"gutterH\">  30:<\/span>                  Class.<span class=\"syntax6\">forName<\/span>(bundle.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">driver<\/span><span class=\"syntax13\">\"<\/span>)).<span class=\"syntax6\">newInstance<\/span>();\n<br \/><span class=\"gutter\">  31:<\/span>                  System.out.<span class=\"syntax6\">println<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Requesting<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">connection<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">using:<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">user='<\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span>\n<br \/>\t\t\t\tbundle.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">user<\/span><span class=\"syntax13\">\"<\/span>) <span class=\"syntax18\">+<\/span>\n<br \/><span class=\"syntax13\">\t\t\t\t\"<\/span><span class=\"syntax13\">',<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">password='<\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span> bundle.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">password<\/span><span class=\"syntax13\">\"<\/span>) <span class=\"syntax18\">+<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">',<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">url='<\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span>\n<br \/>\t\t\t\tbundle.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">url<\/span><span class=\"syntax13\">\"<\/span>) <span class=\"syntax18\">+<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\">'<\/span><span class=\"syntax13\">\"<\/span>);\n<br \/><span class=\"gutter\">  32:<\/span>                  con <span class=\"syntax18\">=<\/span> DriverManager.<span class=\"syntax6\">getConnection<\/span>(bundle.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">url<\/span><span class=\"syntax13\">\"<\/span>),\n<br \/>\t\t\t\tbundle.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">user<\/span><span class=\"syntax13\">\"<\/span>), bundle.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">password<\/span><span class=\"syntax13\">\"<\/span>));\n<br \/><span class=\"gutter\">  33:<\/span>                  System.out.<span class=\"syntax6\">println<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Got<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">connection<\/span><span class=\"syntax13\">\"<\/span>);\n<br \/><span class=\"gutter\">  34:<\/span>\n<br \/><span class=\"gutterH\">  35:<\/span>                  <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Retrieve<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">the<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">database<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">metadata<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">information<\/span>\n<br \/><span class=\"gutter\">  36:<\/span>                  metadata <span class=\"syntax18\">=<\/span> con.<span class=\"syntax6\">getMetaData<\/span>();\n<br \/><span class=\"gutter\">  37:<\/span>                  result <span class=\"syntax18\">=<\/span> metadata.<span class=\"syntax6\">getCatalogs<\/span>();\n<br \/><span class=\"gutter\">  38:<\/span>                  String catalog <span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>;\n<br \/><span class=\"gutter\">  39:<\/span>                  <span class=\"syntax8\">while<\/span>(result.<span class=\"syntax6\">next<\/span>()) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutterH\">  40:<\/span>                          System.out.<span class=\"syntax6\">println<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Catalog:<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span> result.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax5\">1<\/span>));\n<br \/><span class=\"gutter\">  41:<\/span>                          catalog <span class=\"syntax18\">=<\/span> result.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax5\">1<\/span>);\n<br \/><span class=\"gutter\">  42:<\/span>                  <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\">  43:<\/span>                  result.<span class=\"syntax6\">close<\/span>();\n<br \/><span class=\"gutter\">  44:<\/span>                  <span class=\"syntax2\">\/\/<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">Get<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">information<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">about<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">a<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">catalog<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">and<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">table<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">if<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">both<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">are<\/span><span class=\"syntax2\"> <\/span><span class=\"syntax2\">defined<\/span>\n<br \/><span class=\"gutterH\">  45:<\/span>                  <span class=\"syntax8\">if<\/span> ( (bundle.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">catalog<\/span><span class=\"syntax13\">\"<\/span>) <span class=\"syntax18\">!<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">&<\/span><span class=\"syntax18\">&amp;<\/span>\n<br \/>\t\t\t\t(bundle.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">catalog<\/span><span class=\"syntax13\">\"<\/span>).<span class=\"syntax6\">length<\/span>() <span class=\"syntax18\">&gt;<\/span> <span class=\"syntax5\">0<\/span>) <span class=\"syntax18\">&<\/span><span class=\"syntax18\">&amp;<\/span>\n<br \/>\t\t\t\t(bundle.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">tableName<\/span><span class=\"syntax13\">\"<\/span>) <span class=\"syntax18\">!<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">&<\/span><span class=\"syntax18\">&amp;<\/span>\n<br \/>\t\t\t\t(bundle.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">tableName<\/span><span class=\"syntax13\">\"<\/span>).<span class=\"syntax6\">length<\/span>() <span class=\"syntax18\">&gt;<\/span> <span class=\"syntax5\">0<\/span>)) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  46:<\/span>                          result <span class=\"syntax18\">=<\/span> metadata.<span class=\"syntax6\">getTables<\/span>(bundle.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">catalog<\/span><span class=\"syntax13\">\"<\/span>), <span class=\"syntax14\">\n<br \/>\t\t\t\tnull<\/span>, bundle.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">tableName<\/span><span class=\"syntax13\">\"<\/span>), <span class=\"syntax14\">null<\/span>);\n<br \/><span class=\"gutter\">  47:<\/span>                          <span class=\"syntax8\">while<\/span>(result.<span class=\"syntax6\">next<\/span>()) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  48:<\/span>                                  System.out.<span class=\"syntax6\">println<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Table<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">name:<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span>\n<br \/>\t\t\t\t\tresult.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">TABLE_NAME<\/span><span class=\"syntax13\">\"<\/span>));\n<br \/><span class=\"gutter\">  49:<\/span>                          <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutterH\">  50:<\/span>                          result.<span class=\"syntax6\">close<\/span>();\n<br \/><span class=\"gutter\">  51:<\/span>                          System.out.<span class=\"syntax6\">println<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Getting<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">the<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">best<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">identifiers<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">for<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">table<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">\n<br \/>\t\t\t\t\t+<\/span> bundle.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">tableName<\/span><span class=\"syntax13\">\"<\/span>));\n<br \/><span class=\"gutter\">  52:<\/span>                          result <span class=\"syntax18\">=<\/span> metadata.<span class=\"syntax6\">getIndexInfo<\/span>(bundle.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">catalog<\/span><span class=\"syntax13\">\"<\/span>),<span class=\"syntax14\"> null<\/span>,\n<br \/>\t\t\t\t\tbundle.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">tableName<\/span><span class=\"syntax13\">\"<\/span>), <span class=\"syntax14\">true<\/span>, <span class=\"syntax14\">false<\/span>);\n<br \/><span class=\"gutter\">  53:<\/span>                          <span class=\"syntax8\">while<\/span>(result.<span class=\"syntax6\">next<\/span>()) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  54:<\/span>                                  <span class=\"syntax8\">if<\/span> (result.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">INDEX_NAME<\/span><span class=\"syntax13\">\"<\/span>) <span class=\"syntax18\">!<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutterH\">  55:<\/span>                                          System.out.<span class=\"syntax6\">println<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">\\t\\tBest<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">id<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">for<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">the<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">table:<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">\n<br \/>\t\t\t\t\t\t\t+<\/span> result.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">COLUMN_NAME<\/span><span class=\"syntax13\">\"<\/span>));\n<br \/><span class=\"gutter\">  56:<\/span>                                  <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\">  57:<\/span>                          <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\">  58:<\/span>                          result.<span class=\"syntax6\">close<\/span>();\n<br \/><span class=\"gutter\">  59:<\/span>                  <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutterH\">  60:<\/span>                  <span class=\"syntax8\">if<\/span> ( (bundle.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">catalog<\/span><span class=\"syntax13\">\"<\/span>) <span class=\"syntax18\">!<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">&<\/span><span class=\"syntax18\">&amp;<\/span>\n<br \/>\t\t\t\t(bundle.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">catalog<\/span><span class=\"syntax13\">\"<\/span>).<span class=\"syntax6\">length<\/span>() <span class=\"syntax18\">&gt;<\/span> <span class=\"syntax5\">0<\/span>) <span class=\"syntax18\">\n<br \/>\t\t\t\t&<\/span><span class=\"syntax18\">&amp;<\/span> (bundle.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">procedureName<\/span><span class=\"syntax13\">\"<\/span>) <span class=\"syntax18\">!<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">&<\/span><span class=\"syntax18\">&amp;<\/span>\n<br \/>\t\t\t\t(bundle.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">procedureName<\/span><span class=\"syntax13\">\"<\/span>).<span class=\"syntax6\">length<\/span>() <span class=\"syntax18\">&gt;<\/span> <span class=\"syntax5\">0<\/span>)) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  61:<\/span>                          result <span class=\"syntax18\">=<\/span> metadata.<span class=\"syntax6\">getProcedureColumns<\/span>(bundle.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">catalog<\/span><span class=\"syntax13\">\"<\/span>),\n<br \/>\t\t\t\t <span class=\"syntax14\">null<\/span>,  bundle.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">procedureName<\/span><span class=\"syntax13\">\"<\/span>), <span class=\"syntax14\">null<\/span>);\n<br \/><span class=\"gutter\">  62:<\/span>                          <span class=\"syntax8\">while<\/span>(result.<span class=\"syntax6\">next<\/span>()) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  63:<\/span>                                  System.out.<span class=\"syntax6\">println<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Procedure<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">parameter:<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span>\n<br \/>\t\t\t\t\t\tresult.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">COLUMN_NAME<\/span><span class=\"syntax13\">\"<\/span>));\n<br \/><span class=\"gutter\">  64:<\/span>                                  System.out.<span class=\"syntax6\">println<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">\\t\\t<\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span>\n<br \/>\t\t\t\t\t\tresult.<span class=\"syntax6\">getString<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">COLUMN_NAME<\/span><span class=\"syntax13\">\"<\/span>) <span class=\"syntax18\">+<\/span> <span class=\"syntax13\">\"<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">Is<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">there\\n<\/span><span class=\"syntax13\">\"<\/span>);\n<br \/><span class=\"gutterH\">  65:<\/span>                          <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\">  66:<\/span>                  <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\">  67:<\/span>    <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">catch<\/span> (SQLException sqlExp) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  68:<\/span>            System.err.<span class=\"syntax6\">println<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Error<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">code<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">#:<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span> sqlExp.<span class=\"syntax6\">getErrorCode<\/span>());\n<br \/><span class=\"gutter\">  69:<\/span>            System.err.<span class=\"syntax6\">println<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">Error<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">string<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">:<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span> sqlExp.<span class=\"syntax6\">toString<\/span>());\n<br \/><span class=\"gutterH\">  70:<\/span>            System.err.<span class=\"syntax6\">println<\/span>(<span class=\"syntax13\">\"<\/span><span class=\"syntax13\">SQLState:<\/span><span class=\"syntax13\"> <\/span><span class=\"syntax13\">\"<\/span> <span class=\"syntax18\">+<\/span> sqlExp.<span class=\"syntax6\">getSQLState<\/span>());\n<br \/><span class=\"gutter\">  71:<\/span>            sqlExp.<span class=\"syntax6\">printStackTrace<\/span>();\n<br \/><span class=\"gutter\">  72:<\/span>    <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">catch<\/span> (Exception exp) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  73:<\/span>            exp.<span class=\"syntax6\">printStackTrace<\/span>();\n<br \/><span class=\"gutter\">  74:<\/span>    <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">finally<\/span> <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutterH\">  75:<\/span>            <span class=\"syntax8\">if<\/span> (result <span class=\"syntax18\">!<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  76:<\/span>                    <span class=\"syntax8\">try<\/span> <span class=\"syntax18\">{<\/span> result.<span class=\"syntax6\">close<\/span>(); <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">catch<\/span> (SQLException ignore) <span class=\"syntax18\">{<\/span><span class=\"syntax18\">}<\/span>;\n<br \/><span class=\"gutter\">  77:<\/span>            <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\">  78:<\/span>            <span class=\"syntax8\">if<\/span> (result2 <span class=\"syntax18\">!<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  79:<\/span>                    <span class=\"syntax8\">try<\/span> <span class=\"syntax18\">{<\/span> result2.<span class=\"syntax6\">close<\/span>(); <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">catch<\/span> (SQLException ignore) <span class=\"syntax18\">{<\/span><span class=\"syntax18\">}<\/span>;\n<br \/><span class=\"gutterH\">  80:<\/span>            <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\">  81:<\/span>            <span class=\"syntax8\">if<\/span> (con <span class=\"syntax18\">!<\/span><span class=\"syntax18\">=<\/span> <span class=\"syntax14\">null<\/span>) <span class=\"syntax18\">{<\/span>\n<br \/><span class=\"gutter\">  82:<\/span>                    <span class=\"syntax8\">try<\/span> <span class=\"syntax18\">{<\/span> con.<span class=\"syntax6\">close<\/span>(); <span class=\"syntax18\">}<\/span> <span class=\"syntax8\">catch<\/span> (SQLException ignore) <span class=\"syntax18\">{<\/span><span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\">  83:<\/span>            <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\">  84:<\/span>    <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutterH\">  85:<\/span>  <span class=\"syntax18\">}<\/span>\n<br \/><span class=\"gutter\">  86:<\/span><span class=\"syntax18\">}<\/span>\n<br \/><\/pre>\n<p>Y el archivo de configuracion (ResourceBundle):<\/p>\n<style type=\"text\/css\"><!-- .syntax0 { color: #000000; } .syntax1 { color: #cc0000; } .syntax2 { color: #ff8400; } .syntax3 { color: #6600cc; } .syntax4 { color: #cc6600; } .syntax5 { color: #ff0000; } .syntax6 { color: #9966ff; } .syntax7 { background: #ffffcc; color: #ff0066; } .syntax8 { color: #006699; font-weight: bold; } .syntax9 { color: #009966; font-weight: bold; } .syntax10 { color: #0099ff; font-weight: bold; } .syntax11 { color: #66ccff; font-weight: bold; } .syntax12 { color: #02b902; } .syntax13 { color: #ff00cc; } .syntax14 { color: #cc00cc; } .syntax15 { color: #9900cc; } .syntax16 { color: #6600cc; } .syntax17 { color: #0000ff; } .syntax18 { color: #000000; font-weight: bold; } .gutter { background: #dbdbdb; color: #000000; } .gutterH { background: #dbdbdb; color: #666699; } --><br \/><\/style>\n<p><\/p>\n<pre><span class=\"gutter\">   1:<\/span><span class=\"syntax8\">user<\/span>=postgres\n<br \/><span class=\"gutter\">   2:<\/span><span class=\"syntax1\">#<\/span><span class=\"syntax1\">user=XXXX<\/span>\n<br \/><span class=\"gutter\">   3:<\/span><span class=\"syntax1\">#<\/span><span class=\"syntax1\">password=XXXX<\/span>\n<br \/><span class=\"gutter\">   4:<\/span><span class=\"syntax8\">password<\/span>=\n<br \/><span class=\"gutterH\">   5:<\/span><span class=\"syntax8\">url<\/span>=jdbc:postgresql:<span class=\"syntax5\">dbsrv<\/span><span class=\"syntax5\"><\/span>:<span class=\"syntax5\">5432<\/span>\/template1\n<br \/><span class=\"gutter\">   6:<\/span><span class=\"syntax1\">#<\/span><span class=\"syntax1\">url=jdbc:sybase:Tds:dbsrv:4100\/tempdb<\/span>\n<br \/><span class=\"gutter\">   7:<\/span><span class=\"syntax1\">#<\/span><span class=\"syntax1\">driver=com.sybase.jdbc2.jdbc.SybDriver<\/span>\n<br \/><span class=\"gutter\">   8:<\/span><span class=\"syntax8\">driver<\/span>=org.postgresql.Driver\n<br \/><span class=\"gutter\">   9:<\/span><span class=\"syntax8\">tableName<\/span>=cmo_details\n<br \/><span class=\"gutterH\">  10:<\/span><span class=\"syntax1\">#<\/span><span class=\"syntax1\">catalog=SECURITIESDB<\/span>\n<br \/><span class=\"gutter\">  11:<\/span><span class=\"syntax1\">#<\/span><span class=\"syntax1\">procedureName=dealpool_bucket<\/span>\n<br \/><span class=\"gutter\">  12:<\/span><span class=\"syntax8\">catalog<\/span>=\n<br \/><span class=\"gutter\">  13:<\/span><span class=\"syntax8\">procedureName<\/span>=\n<br \/><\/pre>\n<p>La salida del programa es como sigue:<\/p>\n<blockquote style=\"font-family: courier new;\"><p>[josevnz@god jdbc]$ java TestJDBC<br \/>\n<br \/>Using driver: com.sybase.jdbc2.jdbc.SybDriver<br \/>\n<br \/>Requesting connection using: user=&#8217;XXXX&#8217;, password=&#8217;XXXX&#8217;, url=&#8217;jdbc:sybase:Tds:dbsrv:4100\/tempdb&#8217;<br \/>\n<br \/>Got connection<br \/>\n<br \/>Catalog: MYDB1<br \/>\n<br \/>Catalog: MYDB2<br \/>\n<br \/>Catalog: SECURITIESDB<br \/>\n<br \/>Catalog: master<br \/>\n<br \/>Catalog: model<br \/>\n<br \/>Catalog: sybsystemdb<br \/>\n<br \/>Catalog: sybsystemprocs<br \/>\n<br \/>Catalog: tempdb<br \/>\n<br \/>Table name: cmo_details<br \/>\n<br \/>Getting the best identifiers for table cmo_details<br \/>\n<br \/>           Best id for the table: dealname<br \/>\n<br \/>           Best id for the table: groupnumber<br \/>\n<br \/>Procedure parameter: RETURN_VALUE<br \/>\n<br \/>           RETURN_VALUE Is there<\/p>\n<p>Procedure parameter: @deal_name<br \/>\n<br \/>           @deal_name Is there<\/p>\n<p>Procedure parameter: @groupnumber<br \/>\n<br \/>           @groupnumber Is there<\/p>\n<p>Procedure parameter: @total_currentbalance<br \/>\n<br \/>           @nb_total_currentbalance Is there<\/p>\n<p>Procedure parameter: @debug_flag<br \/>\n<br \/>           @debug_flag Is there<\/p>\n<p>[josevnz@god jdbc]$<\/p><\/blockquote>\n<p>Como siempre, espero haberle <a href=\"http:\/\/www.onjava.com\/pub\/a\/onjava\/synd\/2001\/08\/21\/jdbc.html\">despertado su curiosidad<\/a> \ud83d\ude42<\/p>\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>M\u00e1s de una vez me toc\u00f3 revizar si pod\u00eda conectarme a una base de datos despu\u00e9s de la instalaci\u00f3n; Normalmente estas base de datos eran Open Source (MySQL, PostgreSQL) o comerciales (Oracle, Sybase). Cada una de ellas tiene una herramienta nativa que permite ejecutar SQL desde la l\u00ednea de comando. Por ejemplo, para PostgreSQL usted <a class=\"read-more\" href=\"http:\/\/kodegeek.com\/blog\/2004\/11\/30\/echando-codigo-obteniendo-la-metadata-de-una-base-de-datos-en-java\/\">[&hellip;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[],"tags":[],"_links":{"self":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/267"}],"collection":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/comments?post=267"}],"version-history":[{"count":0,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/267\/revisions"}],"wp:attachment":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/media?parent=267"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/categories?post=267"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/tags?post=267"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}