Conexión entre Java y SQL Server 2005

sql server 2005

Viendo que no había formulado un ejemplo para tal función, hoy decidí hace este pequeño código para ir empezando con ello.

Nada fuera de lo normal a otros tipos de conexiones yo en mi caso he utilizado los siguientes elementos:

  • Java 1.6
  • JRE 1.6
  • SQL Server 2005

Adicional a esos tres elementos me he descascardo el driver JDBC que soporta SQL server 2005 desde su pagina principal.

Una vez descargado el driver que por cierto es un zip, lo descomprimimos. En él vamos a encontrar dos archivos jar:

  • sqljdbc4.jar
  • sqljdbc.jar

Únicamente agregamos el sqljdbc4.jar al proyecto

Con ayuda de SQL Server Management Studio he creado una base de datos llamada Google, un usuario nombrado como sa y la contrasena asignada como adminadmin.

Creamos la conexión:

DriverManager.registerDriver( new com.microsoft.sqlserver.jdbc.SQLServerDriver() );
Connection connection = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=Google", "sa", "adminadmin");

El String de conexión es mas que claro, pero veamos cuales son los argumentos:

  • jdbc:sqlserver : es el protocolo de la conexión, es una obligación ponerlo
  • localhost : es el servidor al que nos vamos a conectar, en este caso la base de datos y la aplicación están la misma pc.
  • 1433 : el puesto donde escucha el servicio de SQL Server 2005 (el puerto 1433 viene por defecto)
  • databaseName=Google : es el parámetro de la base datos, la palabra “Google” puede cambiarse por otro nombre, según sea su nombre de base de datos.

Por último probamos la conexión:


if (connection != null) {
System.out.println();
System.out.println("Successfully connected");
System.out.println();
// Meta data
DatabaseMetaData meta = connection.getMetaData();
System.out.println("\nDriver Information");
System.out.println("Driver Name: " + meta.getDriverName());
System.out.println("Driver Version: " + meta.getDriverVersion());
System.out.println("\nDatabase Information ");
System.out.println("Database Name: " + meta.getDatabaseProductName());
System.out.println("Database Version: " + meta.getDatabaseProductVersion());
}

Si todo ha salido bien, y hemos establecido una conexión la aplicación debería imprimir algo como esto:

Driver Information
Driver Name: Microsoft SQL Server JDBC Driver 2.0
Driver Version: 2.0.1803.100

Database Information
Database Name: Microsoft SQL Server
Database Version: 9.00.1399

Errores encontrados durante la creación de la conexión

Mientras trataba de crear la conexión me encontre con varios problemas, y bueno, investigando dí con la solución. Acá voy a poner cuáles fueron y su resolución (al menos para mí).

  • Use the sqljdbc4.jar class library, which provides support for JDBC 4.0.”

Al descomprimir el zip del driver, cometí el error de agregar los dos jars mencionados al principio de éste post. La solución: eliminar el jar sqljdbc.jar del proyecto.

  • The TCP/IP connection to the host has failed. java.net.ConnectException: Connection refused: connect

Al parecer este error se debe a que el servicio de SQL server no acepta conexiones así no más, y por lo tanto, el protoco TCP/IP esta desabilitado por medio de SQL Server. La solución que encontré fue la siguiente, abrir SQL Server Configuration Manager, luego seleccionar la opción Protocols for SQL SQLEXPRESS, seleccionas las propiedades para TCP/IP; luego seleccionas el tab IP Adresses, por último asignarle el valor 1433 a la propiedad IPAll. Y claro, no olvidarse de dar clic derecho sobre TCP/IP
y habiliar ésta opción.

  • WARNING: Failed to load the sqljdbc_auth.dll

El driver JDBC soporta el uso de dos tipos de autentificación integrada sobre Windows a través del argumento de conexión integratedSecurity. Para usar la autentificación integrada se debe copiar el archivo sqljdbc_auth.dll al directorio de WINDOWS.  Si embargo, para evitarme cualquier tipo de error también lo he copiado en el directorio system32 y en la carpeta root de mi proyecto.

Nota: En un procesador de 32 bits, se debe usar el sqljdbc_auth.dll del folder auth/x86. Un procesar de 64 bits debe usar el  archivo sqljdbc_auth.dll del folder x64.

Adjunto las fuentes del proyecto:

Read More

SyntaxHighlighter – SMF

Author:Manfred Mod Name:Syntax Highlighter   Version:1.0
Tested:1.1.7, 1.1.8, 1.1.9, 1.1.10


This mod will install Syntax Highlighter version 1.0

Syntax Highlighter 1.0
- SyntaxHighlighter is a fully functional self-contained code syntax highlighter developed in JavaScript. To get an idea of what SyntaxHighlighter is capable of, have a look at the demo.

The project was started in 2004 and since then has gained a lot of acceptance. Version 2.0 is the new page in history of the project representing a near complete rewrite, clean up, optimization, standard compliance and new features.

- Current SyntaxHighlighter version: 1.5.2

SFM 1.1.7, 1.1.8, 1.1.9, 1.1.10 Supported Themes
- Default

Supported Languajes by SyntaxHighlighter
- C++, C#, CSS, Delphi, Java, Java Script, PHP, Python, Ruby, Sql, VB, XML/HTML

How to use it?
- Using the code bbc tag as is describe below:

//the code is here

Where the “alias” can be replaced by the languajes alias:
cpp, c, c++, c#, c-sharp, csharp, css, delphi, pascal, java, js, jscript, javascript, php, py, python, rb, ruby, rails, ror, sql, vb, vb.net, xml, html, xhtml, xslt

- Examples:

 System.out.println("this is java!");
 echo "this is a String in Php"; 

Credits
- The SyntaxHighlighter was coded by alexgorbatchev.com
- SyntaxHighlighter and SMF integration was coded by Delibertad.com

If you have any doubt about SyntaxHighlighter you can visit http://code.google.com/p/syntaxhighlighter/

————————————————————————————————–

Autor:Manfred Nombre del mod:Syntax Highlighter   Version:1.0
Probado en:1.1.7, 1.1.8, 1.1.9, 1.1.10


Este mod instalará Syntax Highlighter version 1.0

Syntax Highlighter 1.0
- SyntaxHighlighter es un contenedor de codigo enteramente funcional desaroolado en Javascript. Para tener una idea de lo que SyntaxHighlighter  es capaz de hacer, puesdes hechar un vistazo a este demo.

- Current SyntaxHighlighter version: 1.5.2

SFM 1.1.7, 1.1.8, 1.1.9, 1.1.10 Supported Themes
- Default

SFM 1.1.7, 1.1.8, 1.1.9, 1.1.10 Supported Themes
- Default

Lenguajes soportados por SyntaxHighlighter
- C++, C#, CSS, Delphi, Java, Java Script, PHP, Python, Ruby, Sql, VB, XML/HTML

How to use it?
- Usar la etiqueta code como se describe abajo:

//the code is here

Donde “alias” can ser reemplazado por los siguientes alias:
cpp, c, c++, c#, c-sharp, csharp, css, delphi, pascal, java, js, jscript, javascript, php, py, python, rb, ruby, rails, ror, sql, vb, vb.net, xml, html, xhtml, xslt

- Ejemplos:

 System.out.println("this is java!");
 echo "Esto es String en Php"; 

Creditos
- SyntaxHighlighter fue desarrollado por alexgorbatchev.com
- La integracion de SyntaxHighlighter y SMF fue desarrollado Delibertad.com

Si usted tiene alguna duda con SyntaxHighlighter puede visitar http://code.google.com/p/syntaxhighlighter/
SyntaxHighlighter_1-0.zip
Read More

Warning: SuexecUserGroup directive requires SUEXEC wrapper.

Revisando los logs de apache me encontre con esto en el archivo error_log:

Warning: SuexecUserGroup directive requires SUEXEC wrapper.
Warning: SuexecUserGroup directive requires SUEXEC wrapper.
Warning: SuexecUserGroup directive requires SUEXEC wrapper.

Pues parece que el error se debe a que el archivo /usr/sbin/suexec tiene los permisos mal asignados, con esto quiero decir que cuando ejecuten el comando:

ls -la /usr/sbin/suexec

Deberpia imprimir esto:

-rwsr-xr-x 1 root root 12064 2008-04-17 01:15 /usr/sbin/suexec

Si no es así, entoces puede arreglarlo de la siguiente manera:

chown root:root /usr/sbin/suexec
chmod 4755 /usr/sbin/suexec

Hay que recordar que, el nombre para suexec podría ser diferente para SuSE 10, por ejemplo /usr/sbin/suexec2.

Read More

Creando un archivo XML con PHP

Hace unos días anduve investigando como hacer un sitemap.xml para una web, de forma que creará dinamicamente con php. Para la gente que maneja webs con tutoriales, webs, noticias, artículos en el sitio, es muy tedioso estar editando el sitemap.xml cada ves que se crea un registro nuevo de los antes mecionados. Imagínense estar editando 3, 5 hasta 10 veces el sitemap.xml todos los días, algo pesado no? Bueno, eso serpia “lo fácil”, pues la cosa se complica cuando hay que eliminar una url, o hay que editar algun dato dentro del sitemap.
En fin, no solo se trata de crear sitemaps, hay que recordad que los xml se han convertido hoy en día en los documentos estadar de estructura de datos, integración de servicion web, manejo de datos, y diversas compatibilidades entre plataformas sin importar las tecnologías ni la infraestructura.
Siguiendo con la creación de un archivo xml desde php, puedo decir que es bastante fáci, de hecho, si los registros están almacenados en una base de datos resulta aún mas atractivo y dinámico, pues se hace uso de ciclos recorriedo el resultado de la consulta hacia la base de datos.

Escenario.

Se requiere crear un xml básico, donde se tenga información de algunos libros con su titulo, número de páginas y el autor, usando la siguiente estructura:

<?xml version="1.0" encoding="UTF-8"?>
<libros>
<libro>
<titulo>Ciencias sociales</titulo>
<paginas>921</paginas>
<autor>Dave</autor>
</libro>
<libro>
<titulo>Programando con Java</titulo>
<paginas>1230</paginas>
<autor>Deitel</autor>
</libro>
</libros>

El xml se crea a partir de una clase que tiene php llamada DOM , que permite crear etiquetas, atributos, nodos, entre otros, si ingresan a la página de DOM verán una serie de funciones bastante utlices que ustedes pueden probar luego.
Áca lo primero es crear el documento con su versión, este documento es queda almacenado en una variable que luego vamos ir editando, y por últmo almacenar el contenido de este documente en un archivo físico.

Creamos el documento con la versión:

$mi_xml = new DomDocument('1.0', 'UTF-8');

Ahora hay que agregar la etiqueta <libros></libros>, de la siguiente forma:

$libros = $mi_xml -> createElement("libros");
$mi_xml -> appendChild($libros);

Hasta en este momento tenemos la estructura de nuestro xml se encuentra de la siguiente manera:

&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;libros>

&lt;/libros>

Como notan, al agregar el nodo $libros a $mi_xml de una sola vez agrega la etiqueta de <libros> y </libros>, de manera que nos “posiciona” en medio de esta etiqueta para poder agregarle los dos libros, por lo tanto, veamos:

Primer libro:

$libro_1 = $mi_xml -> createElement( "libro" );

Ahora agregar los tres elementos que corresponden al libro con su respectivo valor:

$titulo1 = $mi_xml -> createElement( "titulo" );
$titulo1 - >appendChild( $mi_xml -> createTextNode('Ciencias sociales') );
$libro_1 - >appendChild( $titulo1 );

$paginas1 = $mi_xml -> createElement( "paginas" );
$paginas1 -> appendChild( $mi_xml -> createTextNode('921') );
$libro_1 -> appendChild( $paginas1 );

$autor1 = $mi_xml -> createElement( "autor" );
$autor1 -> appendChild( $mi_xml -> createTextNode('Dave') );
$libro_1 -> appendChild( $autor1 );

Por último, se agrega el libro con todas sus propiedades al nodo de “libros”:

$libros - >appendChild( $libro_1 );

Básicamente para agragar el otro libro se repite el mismo proceso anterior:

$libro_2 = $mi_xml -> createElement( "libro" );

$titulo2 = $mi_xml -> createElement( "titulo" );
$titulo2 - >appendChild( $mi_xml -> createTextNode('Programando cno Java') );
$libro_2 - >appendChild( $titulo2 );

$paginas2 = $mi_xml -> createElement( "paginas" );
$paginas2 -> appendChild( $mi_xml -> createTextNode('1230') );
$libro_2 -> appendChild( $paginas2 );

$autor2 = $mi_xml -> createElement( "autor" );
$autor2 -> appendChild( $mi_xml -> createTextNode('Deitel') );
$libro_2 -> appendChild( $autor2 );

$libros - >appendChild( $libro_2 );

Hasta en este momento ya hemos creado totalmente el archivo xml como habiamos planteado. Sin embargo, para guardar el documento en un directorio especifico se debe:

Generar el xml, preparar el flujo de datos:

$mi_xml -> formatOutput = true;

Guardar el xml como un archivo de String, es decir, poner los string en la variable $strings_xml:

$strings_xml = $mi_xml -> saveXML(),

Finalmente, guardarlo en un directorio:

$mi_xml -> save('mi-sitio/biblioteca.xml');

Si juntan todo el código ya tienen un archivo php que genera un xml de libros con información. Este ejemplo es bástante básico para empezar a experimentar, por cierto, aca dejo un código adicional que les puede ser útil:

Para genera algo como esto: <libros universidad=”San Juan de Tibás”> </libros>, solo tienen que hacer algo como esto:

$libros = $mix_xml -> createElement("libros");
$libros_universidad = $mi_xml->createAttribute('universidad');
$libros -> appendChild( $libros_universidad );
$mi_xml -> appendChild( $libros );

$libros_universidad_valor =  $mi_xml ->createTextNode('San Juan de Tibás');
$libros_universidad -> appendChild($libros_universidad_valor);

Para concluir, aca dejo el el archivo crear-xml.php:
crear-xml.php

Read More

Error de sesión en phpMyAdmin desde Cpanel

phpMyAdmin – Error

Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly.

 

Este es un pequeño error que aparece muy pocas veces cuando tratamos de ingresar a phpMyAdmin desde el VHM o Cpanel.

Mi problema surgió cuando ejecute mal un script en unix y este me altero algunos archivos del sistema, en fin..

El error parece ser que se da con un problema en la sesion de phpMyAdmin, por alguna razon no las puede organizar bien en su directorio default. Ahora bien, para resolverte este problema hacemos lo siguiente:

1. Buscar el archivo y editar el archivo php.ini que se encuentra en:

/usr/local/cpanel/3rdparty/etc/phpmyadmin/

2. Cambiar el directorio donde se guardan las sesiones:

de:

session.save_handler = sqlite
session.save_path =/var/cpanel/userhomes/cpanelphpmyadmin/sessions/phpsess.sdb

a:

session.save_handler = files
session.save_path = /tmp

3. Salvan en archivo y listo

 

Lo importante es editar el valor del atributo session.save_path

Solo un detalle, y  es que tienen que ingresar al server como “root” para que tengan los permisos de modificacion correspondientes.

 

 

Read More