Interfases de Conexión y Lenguajes de Programación

Anuncio
WikiPrint - from Polar Technologies
Interfases de Conexión y Lenguajes de Programación
Índice
Interfases de Conexión y Lenguajes de Programación
1. ¿Como conectarse a PostgreSQL vía ODBC?
2. ¿Cómo conectarse a PostgreSQL desde Access?
3. ¿Cómo conectarse a PostgreSQL desde Visual Basic?
4. ¿Como conectarse a PostgreSQL desde .NET (o Mono)?
5. ¿Cómo conectarse a PostgreSQL desde Python?
6. ¿Cómo conectarse a PostgreSQL desde PHP?
7. ¿Cómo conectarse a PostgreSQL desde JAVA (JDBC)?
En esta sección se cubren las distintas opciones de conexión y sus respectivos lenguajes. Para más información ver Documentación y Preguntas
Frecuentes
¿Como conectarse a PostgreSQL vía ODBC?
1. Bajar e instalar el controlador oficial de ODBC para PostgreSQL, ver sección Archivos, Controladores ODBC
1. Para conectarse vía ADO se pueden usar las siguientes opciones en la cadena de conexión:
•
Provider=MSDASQL; indicar que usamos el proveedor ODBC para ADO
•
Driver={PostgreSQL ANSI}; seleccionar el controlador ODBC PostgreSQL ANSI
•
SERVER=localhost; ubicación del servidor (ip o dns)
•
DATABASE=saraza; nombre de la base de datos a usar
•
UID=sistema; usuario (dentro de la base de datos)
•
PWD=saraza; contraseña del usuario
•
CONNSETTINGS=SET Datestyle TO 'DMY'%3bSET client_ecoding TO 'LATIN1'3b; parámetros de conexión (ej: formato fecha a
dia-mes-año y codificación latin1)
•
BOOLSASCHAR=0; no devolver booleanos como chars 't' o 'f'
•
TrueIsMinus1=1; booleanos verdaderos convertirlos a -1 (para compatibilidad con VB)
•
TEXTASLONGVARCHAR=1; devolver campos Text como LongVarChar?
•
SSLMODE=prefer; preferir encriptación SSL (require: falla si no hay SSL, prefer: se conecta igual aunque no haya SSL, allow: primero
intenta sin SSL, luego con SSL, disable: se conecta sólo sin SSL)
•
UseDeclareFetch=0; no usar cursores (habilitar para consultas extensas asi utliza una cache en memoria y mejora la performance)
•
UpdatableCursors=0; no habilitar la emulación de cursores modificables
•
PARSE=1; analizar las consultas para determinar campos, tipos de datos, etc.
•
UseServerSidePrepare=0; no usar el protocolo extendido para preparar y analizar las consultas en el servidor (más efectivo y correcto a
partir de 7.4+)
•
DisallowPremature=0; deshabilitar preparación prematura de las consultas para analizarlas (7.3 y anteriores)
Ejemplo de cadena de conexión (connection string) simple:
Provider=MSDASQL;Driver={PostgreSQL ANSI};SERVER=localhost;DATABASE=saraza;UID=sistema;PWD=saraza;
Ejemplo de cadena de conexión avanzado:
Provider=MSDASQL;Driver={PostgreSQL ANSI};
SERVER=localhost;DATABASE=saraza;UID=sistema;PWD=saraza;
CONNSETTINGS=SET Datestyle TO 'DMY'%3bSET client_ecoding TO 'LATIN1'3b;
BOOLSASCHAR=0;TrueIsMinus1=1;TEXTASLONGVARCHAR=1;
SSLMODE=prefer;
UseDeclareFetch=0;UpdatableCursors=0;
PARSE=1;UseServerSidePrepare=0;DisallowPremature=0;
Para más información ver Sitio Oficial
1
WikiPrint - from Polar Technologies
¿Cómo conectarse a PostgreSQL desde Access?
Se recomienda usar ADO (ActiveX Data Objects) y el controlador oficial ODBC (ver pregunta anterior):
•
En la vista de Objetos, Tablas, Botón derecho (sobre el fondo), elegir el tipo de acción a realizar:
•
Importar: para obtener una copia de los datos de PostgreSQL y modificarlos localmente
•
Vincular: para poder obtener y actualizar los datos directamente sobre PostgreSQL
•
En tipo de Archivo, elegir la opción Base de Datos ODBC
•
Elegir PostgreSQL ... (en solapa Origen de Datos de Archivo o de equipo, dependiendo como se haya instalado el controlador ODBC, ver pregunta
anterior)
•
Ingresar los datos de conexión (PostgreSQL Connection, ver pregunta anterior): base de datos (database), servidor (server), usuario (username),
contraseña (password), presionar Ok
•
Buscar y marcar las tablas a Importar/Vincular (notar que figuran con el nombre de esquema antepuesto, ej. public.mi_tabla), presionar Aceptar.
¿Cómo conectarse a PostgreSQL desde Visual Basic?
Se recomienda usar ADO (ActiveX Data Objects) y el controlador oficial ODBC (ver pregunta anterior)
Ejemplo para VB 5/6:
Dim cn As Connection
Dim rs As Recordset
Set cn = CreateObject("ADODB.Connection")
cn.Open "Provider=MSDASQL;Driver={PostgreSQL ANSI};SERVER=localhost;DATABASE=saraza;UID=sistema;PWD=saraza;"
Set rs = CreateObject("ADODB.Recordset")
rs.Open "SELECT * FROM prueba", cn, adUseClient
Do Until rs.EOF
Debug.Print rs!campo1, rs!campo2
rs.MoveNext
Loop
¿Como conectarse a PostgreSQL desde .NET (o Mono)?
Npgsql es un .Net Data Provider (Proveedor de Datos) para PostgreSQL. Permite a aplicaciones cliente .Net (Console, WinForms?, ASP.NET, Web
Services...) comunicarse con el servidor. Si tiene experiencia desarrollando aplicaciones de acceso a datos usando los proveedores Sql Server, OleDB o
ODBC.NET, encontrará que Npgsql es muy similar, en muchos aspectos igual o más robusto, y soportado por una comunidad activa.
1. Descargar Npgsql compilado para MS.Net y Mono desde El proyecto.
2. Instalación:
1. Copiar la libreria Npgsql.dll en el directorio de la aplicación (o en otro directorio si ha configurado Path to Private Components)
2. En aplicaciones ASP.NET y Web Services debe alojar Npgsql.dll y Mono.Security.dll en un subdirectorio bin de la aplicación.
3. Alternativamente, puede poner el assembly Npgsql en la Global Assembly Cache (GAC) ejecutando: gacutil -i Npgsql.dll
3. Uso:
1. Agregar los espacios de nombre (namespaces) requeridos en los archivos fuente: System.Data y Npgsql
2. Establecer una conexión usando NpgsqlConnection con la correspondiente cadena de conexión (connection string)
3. Usar NpgsqlCommand para ejecutar consultas SQL
4. Usar NpgsqlDataReader para obtener las filas de la consulta
Ejemplo completo para C#:
using System;
using System.Data;
using Npgsql;
public class NpgsqlPrueba
{
2
WikiPrint - from Polar Technologies
public static void Main(String[] args)
{
// Establecer una conexión al servidor ubicado en la IP 127.0.0.1, puerto 5432
// como usuario "juan", con contraseña "secreta", en la base de datos "datosjuan"
NpgsqlConnection conn = new NpgsqlConnection("Server=127.0.0.1;Port=5432;" +
"User Id=juan;Password=secreto;Database=datosjuan;");
conn.Open();
try {
// Agregar una fila en una tabla
NpgsqlCommand command1 = new NpgsqlCommand("insert into tabla1 values(1, 1)", conn);
Int32 rowsaffected;
rowsaffected = command1.ExecuteNonQuery();
Console.WriteLine("Se agregaron {0} filas en tabla1", rowsaffected);
// Obteniendo un conjunto de filas de una consulta
NpgsqlCommand command2 = new NpgsqlCommand("select * from tabla1", conn);
NpgsqlDataReader dr = command2.ExecuteReader();
while(dr.Read()) {
for (i = 0; i < dr.FieldCount; i++) {
Console.Write("{0} \t", dr[i]);
}
}
Console.WriteLine();
} finally {
conn.Close();
}
}
}
Para mayor información ver la Documentación del Proyecto
¿Cómo conectarse a PostgreSQL desde Python?
Se recomienda usar el controlador Psycopg2 compatible con dbapi (ver Psycopg2 para windows) En debian/ubuntu instalar:
sudo apt-get install python-psycopg2
Ejemplo para Python 2.x y psycopg2:
import psycopg2
cn = psycopg2.connect("host=localhost dbname=saraza user=mariano password=saraza")
cur = cn.cursor()
cur.execute("SELECT campo1, campo2 FROM prueba")
for fila in cur:
campo1, campo2 = fila # extraer los campos
print campo1, campo2
¿Cómo conectarse a PostgreSQL desde PHP?
Se pueden utilizar dos métodos:
•
La extensión pgsql: habilitando la opción
•
El controlador para PHP Data Objects (PDO):
Para instalarlo en windows, seleccionar en el instalador (pantalla Chose Items to Install):
•
Extensión pgsql: PHP, Extensions, PostgreSQL
3
WikiPrint - from Polar Technologies
•
Controlador PDO: PHP, Extensions, PDO y PHP, Extensions, PDO, PostgreSQL
Para instalarlo en linux (debian) hacer:
sudo apt-get install php5-pgsql
Ejemplo para PHP 5.2 con pgsql:
<?php
// Conectarse a la base de datos prueba con usuario www y contraseña foo
$dbconn = pg_connect("host=localhost dbname=prueba user=www password=foo")
or die('No se pudo conectar: ' . pg_last_error());
// Realizando una consulta SQL
$query = 'SELECT * FROM autores';
$result = pg_query($query) or die('Falló consulta: ' . pg_last_error());
// Imprimiendo los resultados en HTML
echo "<table>\n";
while ($line = pg_fetch_array($result, null, PGSQL_ASSOC)) {
echo "\t<tr>\n";
foreach ($line as $col_value) {
echo "\t\t<td>$col_value</td>\n";
}
echo "\t</tr>\n";
}
echo "</table>\n";
// Liberar el resultset
pg_free_result($result);
// Cerrar la conexión
pg_close($dbconn);
?>
Ejemplo para PHP 5.2.x con PDO:
<?php
# me conecto a la base prueba, usuario mariano contraseña foo
# (habilitando conexiones persistentes)
$conn = new PDO('pgsql:dbname=prueba;host=localhost', 'mariano', 'foo',
array(PDO::ATTR_PERSISTENT => true));
# establezco el atributo para lanzar excepciones en caso de error
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
# ejecuto una consulta y retorno los datos
$res = $conn->query("SELECT * FROM autores");
# recorro los registros
foreach ($res as $reg) {
echo $reg['nombre'],$reg['apellido'];
}
# ejecutar una consulta DML:
try {
# comienzo la transacción
$conn->beginTransaction();
$conn->exec("INSERT INTO autores (nombre, apellido) VALUES ('Juan', 'Perez')");
# grabo (confirmo) los cambios
$conn->commit();
return NULL;
} catch (Exception $e) {
4
WikiPrint - from Polar Technologies
# excepción, vuelvo atrás y devuelvo mensaje de error
$conn->rollback();
echo "Error: ", $e->getMessage();
}
?>
En Windows puede ocurrir el siguiente error:
Unable to load dynamic library 'php_pgsql.dll' - The specified module could not be found.
Para solucionar este error de carga de la extensión pgsql se puede:
•
Agregar la ruta de los binarios de postgres al PATH del sistema, haciendo click derecho en Mi PC, seleccionar Propiedades, solapa Avanzado, botón
"Variables de Entorno,sección Variables del Sistema, seleccionar Path y presionar Editar y agregar la ruta de PostgreSQL al final: C:\Archivos de
programa\PostgreSQL\8.4\bin (separado por ;). Luego reiniciar
•
Ubicar la biblioteca libpq.dll y sus dependencias (comerr32.dll, gssapi32.dll, k5sprt32.dll, krb5_32.dll, libeay32.dll,
libiconv2.dll, libintl3.dll, ssleay32.dll), y copiarla a la carpeta de ext de PHP (C:\Archivos de programa\php\ext) y/o agregar
Loadfile "C:\Archivos de programa\php\ext\libpq.dll" a la configuración de apache (httpd.conf)
Para más información ver Manual de PHP
¿Cómo conectarse a PostgreSQL desde JAVA (JDBC)?
Instalación:
•
Obtener la versión precompilada del driver JDBC del descargas
Ajustar el CLASSPATH:
export CLASSPATH=...:/ruta/a/postgresql.jar:.
Ejemplo para Java:
// importar JDBC
import java.sql.*;
public class PruebaPgJdbc {
public static void main(String args[]) {
try {
// cargar y registrar el manejador para postgres
Class.forName("org.postgresql.Driver");
// conectarse a la base de datos (base prueba, usuario pedro, contraseña secreto, ssl habilitado):
String url = "jdbc:postgresql://localhost/prueba";
Properties props = new Properties();
props.setProperty("user","pedro");
props.setProperty("password","secreto");
props.setProperty("ssl","true");
Connection conn = DriverManager.getConnection(url, props);
// enviar una consulta y obtener los resultados:
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM mitabla WHERE columna1 = 500");
while (rs.next()) {
System.out.print("Columna 1 devolvio ");
System.out.println(rs.getString(1));
}
rs.close();
st.close();
// ejecutando actualizaciones:
int valor = 500;
5
WikiPrint - from Polar Technologies
PreparedStatement st = conn.prepareStatement("DELETE FROM mitabla WHERE columna1 = ?");
st.setInt(1, valor);
int rowsDeleted = st.executeUpdate();
System.out.println(rowsDeleted + " filas eliminadas");
st.close();
catch (Exception e) {
e.printStackTrace();
}
}
}
Para más información ver sitio oficial
6
Descargar