Weblogs Código

RecorteX

» jdbc
73 usuarios y 243 recortes de código
Usuario

Contraseña
Crear cuenta
Estás viendo los recortes de la etiqueta jdbc

RSS
Recortes: 3

Etiquetas relacionadas:
java
sql
xml

Acceso JDBC básico

Estructura básica para acceder a una consulta SQL por JDBC. Creamos la conexión, pero típicamente la obtendremos de algún DataSource o la estaremos reutilizando.
 
PreparedStatement ps=null;
ResultSet rs=null;
String sql="SELECT algo FROM algunsitio WHERE algo=?";
Connection c=null;
 
try
{
     Class.forName ("oracle.jdbc.OracleDriver");
     c = DriverManager.getConnection("jdbc:oracle:thin:@maquina.dominio:1521:instancia", "usuario", "passwd");
     ps = c.prepareStatement(sql);
     //parametros
     ps.setString(1, "p");
     rs = ps.executeQuery();
 
     while (rs.next())
     {
           // dato = rs.getString(1);
     }
}catch (SQLException se)
{
   // excepcion !!
   se.printStackTrace(System.err);
}finally
{
  //ten en cuenta que esto puede lanzar SQLexception a su vez...
  if (rs!=null)
     rs.close();
  if (ps!=null)
     ps.close();
  if (c!=null)
     c.close();
}
 

Convertir un ResultSet a XML

Esta función convierte un ResultSet en formato XML y lo imprime.
 
public void rs2xml(ResultSet rs,
                  String tabla,
                  String elemento,
                 java.io.Writer out) throws java.io.IOException, SQLException {
    ResultSetMetaData rsmd=rs.getMetaData();
    out.write("<"+tabla+">\n");
    while (rs.next()) {
        out.write("    <"+elemento+">\n");
        for (int i = 1; i <= rsmd.getColumnCount(); i++) {
           out.write("        <"+rsmd.getColumnLabel(i).toLowerCase()+"><![CDATA[");
           String var=rs.getString(i);
           if (var!=null) {
                out.write(var);
           }
           out.write("]]></"+rsmd.getColumnLabel(i).toLowerCase()+">\n");
        }
        out.write("    </"+elemento+">\n");
    }
    out.write("</"+tabla+">\n");        
}
 
Recibe el ResultSet, el nombre que le queremos dar al elemento XML root y el nombre que le queremos dar al elemento XML de cada registro.

Llamar a un procedimiento almacenado

Aquí hay un ejemplo que trata prácticamente todos los casos en la ejecución de un procedimiento almacenado usando JDBC: parámetros de entrada y salida, retorno de resultados, etc.
 
package DBTest;
 
import java.sql.*;
 
public class JdbcTest {
 
    private String          msDbUrl = "jdbc:odbc:ms";
    private String          msJdbcClass = "sun.jdbc.odbc.JdbcOdbcDriver";
    private Connection      mcDbAccess;
    private CallableStatement       msProcedure;
 
    public JdbcTest() {
        try {
            Class.forName( msDbUrl ).newInstance();
            mcDbAccess = DriverManager.getConnection( msJdbcClass, "milestone", "milestone" );
            msProcedure = mcDbAccess.prepareCall(
                "{? = call sp_sav_Bom_Header( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? ) }"
            );
            msProcedure.registerOutParameter( 1, java.sql.Types.VARCHAR );
            msProcedure.setInt( 2, -1 );
            msProcedure.setInt( 3, 39 );
            msProcedure.setString( 4, "format" );
            long ltTest = new java.util.Date().getTime();
            System.out.println( "Today: " + ltTest );
            msProcedure.setTimestamp( 5, new Timestamp( ltTest ) );
            msProcedure.setString( 6, "type" );
            msProcedure.setString( 7, "submitter" );
            msProcedure.setString( 8, "email" );
            msProcedure.setString( 9, "phone" );
            msProcedure.setString( 10, "comments" );
            msProcedure.setString( 11, "label" );
            msProcedure.setInt( 12, 52 );
            msProcedure.setBoolean( 13, true );
            msProcedure.setBoolean( 14, false );
            msProcedure.setInt( 15, 53 );
            msProcedure.setString( 16, "runtime" );
            msProcedure.setString( 17, "configuration" );
            msProcedure.setBoolean( 18, true );
            msProcedure.setBoolean( 19, false );
            msProcedure.setString( 20, "special instructions" );
            msProcedure.setInt( 21, 54 );
 
            ResultSet lrsReturn = null;
            System.out.println( "Execute: " + (lrsReturn = msProcedure.executeQuery() ) );
            while( lrsReturn.next() ) {
                System.out.println( "Got from result set: " + lrsReturn.getInt( 1 ) );
            }
            System.out.println( "Got from stored procedure: " + msProcedure.getString( 1 ) );
        } catch( Throwable e ) {
            e.printStackTrace();
        }
    }
 
    public static void main(String[] args) {
        new JdbcTest();
    }
}
 
Proyecto: Juanjo Navarro, 2006 - Diseño: Albin