viernes, 21 de septiembre de 2012


Conexión de java con SQL server 2008 mediante JDBC.
Una de las operaciones más importantes que realizará con el Controlador JDBC de Microsoft para SQL Server es establecer una conexión con una base de datos de SQL Server. Todas las interacciones con la base de datos tienen lugar a través del objeto SQLServerConnection y, debido a que el controlador JDBC posee una arquitectura tan plana, casi todos los comportamientos interesantes afectan al objeto SQLServerConnection.

Entonces el formato general de la URL de conexión es:

jdbc:sqlserver://[serverName[\instanceName][:portNumber]]

[;property=value[;property=value]]

Dónde: 
jdbc:sqlserver:// (obligatorio) es el subprotocolo y es constante. 
serverName (opcional) es la dirección del servidor con el que se establece la conexión. Puede ser un DNS o una dirección IP o bien un host local o 127.0.0.1 para el equipo local. Si no se especifica en la URL de conexión, es necesario especificar el nombre del servidor en la colección de propiedades.
instanceName (opcional) es la instancia para establecer la conexión con serverName. Si no se especifica, se establece una conexión con la instancia predeterminada.
portNumber (opcional) es el puerto para establecer la conexión con serverName. El valor predeterminado es 1433. Si usa el valor predeterminado, no es necesario especificar el puerto ni el signo ":" precedente en la dirección URL.
Una vez que tengan definida su cadena de conexión, se puede crear la conexión a la BD, en mi caso me descargue el Microsoft SQL Server JDBC Driver 2.0 liberado en marzo de este año, pero bueno un ejemplo:

01
//carga del Driver
02
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

03
//Se establece la conexion con el servidor de BD
04
dbConnection = DriverManager.getConnection("jdbc:sqlserver://192.168.0.123:1433;databaseName=BD_Check;",

05
                    "User1", "12345");
06
//Se crea el objeto statement

07
Statement stm = dbConnection.createStatement();
08
private PreparedStatement enrollStmt;

09
enrollStmt = dbConnection.prepareStatement("SELECT * FROM enroll");
10
enrollStmt.executeQuery()

11
//Posteriormente se cierra la conexión
12
if(!enrollStmt.isClosed())

13
    enrollStmt.close();
14
if(!dbConnection.isClosed())

15
    dbConnection.close();

Conectar base de datos SQL Server 2008
En anteriores entradas  expliqué como he ido desarrollando una aplicación para Androide que enviaba mensajes al pc para un proyecto de fin de curso.
Bien, ahora voy a explicar en qué consiste la aplicación exactamente, que aún no lo he hecho. Se trata de desarrollar un programa para bares, en la cual cada camarero tendrá una PDA, o dispositivo androide, desde la cual anotará los pedidos de los clientes. La PDA enviará estos pedidos al servidor que contiene una Base de datos, y este imprimirá los tickets.
Para esto es necesario establecer una conexión PDA-Base de datos del Servidor.
Lo primero que hay que hacer es instalar SQL server 2008 y configurarlo para que se pueda acceder de dos formas (con autentificación Windows y con autentificación SQL server), esto se pregunta durante la instalación de SQL server, posteriormente hay que crear un usuario SQL server, aquí se explica cómo hacerlo . También debemos permitir conexiones remotas. 
Ahora vamos al código, (que he sacado de un ejemplo de la web de Microsoft ), al cual solo he añadido una consulta a una tabla de mi base de datos.
Ahora vamos a crear un proyecto, yo lo he creado en eclipse, es necesario agregarle las librerías JDBC para que hagan de puente entre la aplicación y la base de datos. En eclipse se añaden en las propiedades del proyecto/Java Build Path/Libraries, estas librerías podéis descargarlas de aquí , si no lo hacéis en eclipse, en este enlace  se ve como configurarlo
Dejo el código por aquí:
Data provided by Pastebin.com  - Download Raw  - See Original 
import java.sql.Statement;

public class Test {
        private java.sql.Connection connection = null;
        private final String url = "jdbc:microsoft:sqlserver://";
        private final String serverName = "192.168.1.38";
        private final String portNumber = "1433";
        private final String databaseName = "db_WifiBar";
        private final String userName = "algui91";
        private final String password = "1234";
        private final String statement = "select * from prueba;";
        // Informs the driver to use server a side-cursor,
        // which permits more than one active statement
        // on a connection.
        private final String selectMethod = "Direct";

        // Constructor
        public Test() {
        }
  private String getConnectionUrl() {
                return url + serverName + ":" + portNumber + ";databaseName="
                                + databaseName + ";selectMethod=" + selectMethod + ";";
        }
 private java.sql.Connection getConnection() {
                try {
                        Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
                        connection = java.sql.DriverManager.getConnection(getConnectionUrl(),
                                        userName, password);
                        if (connection != null)
                                System.out.println("Connection Successful!");
                } catch (Exception e) {
                        e.printStackTrace();
                        System.out.println("Error Trace in getConnection() : "
                                        + e.getMessage())
}  return connection;
        }
  public void displayDbProperties() {
                java.sql.DatabaseMetaData dm = null;
                java.sql.ResultSet result = null;
                try {
                        connection = this.getConnection();
                        if (connection != null) {
                                dm = connection.getMetaData();
                                System.out.println("Driver Information");
                                System.out.println("\tDriver Name: " + dm.getDriverName());
                                System.out
                                                .println("\tDriver Version: " +dm.getDriverVersion());
                                System.out.println("\nDatabase Information ");
                                System.out.println("\tDatabase Name: "
                                                + dm.getDatabaseProductName());
                                System.out.println("\tDatabase Version: "
                                                + dm.getDatabaseProductVersion());
                               
                                Statement select = connection.createStatement();
                                result = select.executeQuery(statement);
                                 while (result.next()) {
                                        System.out.println("Nombre: " + result.getString(1) + "\n");
                                        System.out.println("Apellido: " + result.getString(2) + "\n");
                                        System.out.println("Dni: " + result.getString(3) + "\n");
                                }
                                result.close();
                                result = null;
                                closeConnection();
                        } else
                                System.out.println("Error: No active Connection");
                } catch (Exception e) {
                        e.printStackTrace();
                }
                dm = null;
        }
 private void closeConnection() {
                try {
                        if (connection != null)
                                connection.close();
                        connection = null;
                } catch (Exception e) {
                        e.printStackTrace();
                }
        }
public static void main(String[] args) throws Exception {
                Test myDbTest = new Test();
                myDbTest.displayDbProperties();
        }
}
Y la sálida de ejecutar la aplicación:
Connection Successful!
Driver Information
 Driver Name: SQLServer
 Driver Version: 2.2.0022
 Database Information
 Database Name: Microsoft SQL Server
 Database Version: Microsoft SQL Server Yukon - 10.0.1600
Algunos datos de la BD
Nombre: Alejandro
 Apellido: Alcalde
 Dni: 12345678


No hay comentarios:

Publicar un comentario