2010-12-01 25 views
9

para un proyecto de base de datos de la escuela estamos haciendo un programa de base de datos (interfaz gráfica de usuario del usuario y la base de datos). Utilizando Microsoft Access 2010, creé la base de datos y la llené con algunos datos de muestra, y la guardé en formato .mdb y la coloqué en la carpeta de mi proyecto.Conexión de una base de datos Microsoft Access para Java utilizando JDBC y compilar

Cuando se ejecuta en Eclipse el siguiente código funciona bien, conecta e incluso recupera la consulta. Sin embargo, me parece que no puedo exportar el código a un jar y ejecutarlo (que es necesario para el proyecto, darles una copia de trabajo de su programa en un CD o unidad flash), y tampoco puedo transferir el codificar a Netbeans para que funcione, e intentar compilar en una máquina Linux.

Supongo que esto es un problema con la inclusión de los conductores o tratando de utilizar el acceso de Microsoft. El error que obtengo al ejecutar el jar o ejecutar en Netbeans aparece debajo del código. Entonces, pregunto ¿cómo incluyo los controladores para hacer que el programa sea portátil o de qué otra forma puedo abordar este problema?

Gracias de antemano

import java.sql.*; 

public class JDBCTest { 
    static Connection connection; 
    static Statement statement; 

    public static void main(String args[]){ 

     try { 
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver").newInstance(); 
      String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=TLDATABASEDBM.mdb"; 
      connection = DriverManager.getConnection(database ,"",""); 

      buildStatement(); 
      executeQuery(); 

     }catch(Exception e){ 
      e.printStackTrace(); 
      System.out.println("Error!"); 
     } 
    } 

    public static void buildStatement() throws SQLException { 
     statement = connection.createStatement(); 
    } 

    public static void executeQuery() throws SQLException { 

     boolean foundResults = statement.execute("SELECT * FROM tblStaff AS x WHERE City='Calgary'"); 
     if(foundResults){ 
      ResultSet set = statement.getResultSet(); 
      if(set!=null) displayResults(set); 
     }else { 
      connection.close(); 
     } 
    } 

    public static void displayResults(ResultSet rs) throws SQLException { 
     ResultSetMetaData metaData = rs.getMetaData(); 
     int columns=metaData.getColumnCount(); 
     String text=""; 

     while(rs.next()){ 
      for(int i=1;i<=columns;++i) { 
       text+=""+metaData.getColumnName(i)+":\t"; 
       text+=rs.getString(i); 
       //text+="</"+metaData.getColumnName(i)+">"; 
       text+="\n"; 
      } 
      text+="\n"; 
     } 

     System.out.println(text); 

    } 
} 

el error mencionado anteriormente:

 
java.sql.SQLException: [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified 
     at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957) 
     at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114) 
     at sun.jdbc.odbc.JdbcOdbc.SQLDriverConnect(JdbcOdbc.java:3073) 
     at sun.jdbc.odbc.JdbcOdbcConnection.initialize(JdbcOdbcConnection.java:323) 
     at sun.jdbc.odbc.JdbcOdbcDriver.connect(JdbcOdbcDriver.java:174) 
     at java.sql.DriverManager.getConnection(DriverManager.java:582) 
     at java.sql.DriverManager.getConnection(DriverManager.java:207) 
     at tldatabase.DataConnect.makeConnection(DataConnect.java:35) 
     at tldatabase.Main.main(Main.java:24) 

Respuesta

0

creo que su aplicación no se ve TLDATABASEDBM.mdb en el directorio actual. Puede dar una ruta completa a este archivo en la cadena de conexión o agregar el DSN del sistema en ODBC Manager y luego conectarse a él con una cadena de conexión como: jdbc:odbc:TLDATABASEDBM

+0

pruebas de pozos con la versión de Eclipse de trabajo del código, si la ruta de acceso al archivo es incorrecto consigo una no puede abrir error de archivo desconocido, no es un "nombre de la fuente de datos que no se encuentra y ningún controlador predeterminado especificado" error. No estoy seguro si puedo usar un DSN y hacer que funcione el tarro porque necesito empaquetar todo el programa de la base de datos y dársela al profesor para que se ejecute. Intenté usar la ruta DSN antes, pero tuve problemas para ponerla en funcionamiento. Volveré a intentarlo y preguntaré si puedo hacer que me lean para ejecutar el programa cuando lo entregue a la asistencia técnica para la demostración. Gracias por la ayuda sin embargo. – Moogle

+0

De acuerdo, funciona con un DSN como archivo jar. Mi única pregunta ahora es que esto no funcionará si ejecutan el programa en una computadora que no sea de Windows, ya que solo Windows tiene los controladores para conectarse a los archivos de acceso ms, ¿no? y supongo que no hay otra manera de conectarse a un ms acceso archivo .mdb usando java? ¡Gracias! – Moogle

+0

Lo probé usando Jython con la base de datos de Neptuno Access. Funcionó con la cadena de conexión que contiene el nombre completo de archivo .mdb y con DSN. No estoy seguro si en Java tienes que agregar 'newInstance()' después de 'Class.forName()'. En Java6 ni siquiera necesita llamar a 'Class.forName()'. Eche un vistazo a http://onjava.com/pub/a/onjava/2006/08/02/jjdbc-4-enhancements-in-java-se-6.html. –

10

Sé que la publicación fue hace años, pero me sentí como respondiendo la pregunta para aquellos que están experimentando esto ahora mismo. Me tomó un tiempo para conocer la respuesta a la pregunta así que aquí está la solución:

http://wiki.netbeans.org/FaqSettingHeapSize

Siga el "Ejecución de la JVM de 32 bits".

Todo lo que tiene que hacer es encontrar el netbeans.conf en la carpeta de instalación de sus NetBeans y cambiar el directorio desde algo como esto:

netbeans_jdkhome = "C: \ Archivos de programa \ Java \ jdk1.6.0_24 "

a esto:

netbeans_jdkhome =" C: \ archivos de programa (x86) \ Java \ jdk1.6.0_21"

El problema se netbeans podría estar en ejecución en 64 bits, pero MS Access único apoyo 32 bits Así que hacer esto con suerte resolvería el problema. También asegúrese de instalar esto:

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=23734

0

Honestamente, no me gusta lo que voy a decir ... pero, que resuelve el mismo problema para mí ... misteriosamente ...: (((

en la línea en la que está definiendo la variable de base de datos, he cambiado ... (.mdb) ... en ... ( .mdb, * .accdb) ...

Todo el ¡Lo mejor para descubrir qué diferencia hizo!

+0

Ese es el nombre real de su controlador en Fuentes de datos, por lo que lo resolvió. – Anuja

1

El principal problema radica en la línea:

String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ=TLDATABASEDBM.mdb"; 
  1. Asegúrese de que el archivo .mdb está en el directorio correcto.
  2. Compruebe la extensión del archivo como .mdb o .mdbacc.

Además, si desea utilizar el mismo DSN cada vez, es mejor agregar el DSN (nombre de fuente de datos) en el sistema respectivo en el que está almacenado el mdb.

0
package javaapplication1; 

import java.sql.*; 

public class MSaccess_archive { 
public static void main(String[] args) { 

    try { 

     Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
// set this to a MS Access DB you have on your machine 
String filename = "mdbTEST.mdb"; 
String database = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb)};DBQ="; 
database+= filename.trim() + ";DriverID=22;}"; // add on to the end 
// now we can get the connection from the DriverManager 
Connection con = DriverManager.getConnection(database ,"",""); 

     Statement stmt = con.createStatement(); 

     stmt.execute("select * from student"); // execute query in table student 

     ResultSet rs = stmt.getResultSet(); // get any Result that came from our query 

     if (rs != null) 
     while (rs.next()){ 

      System.out.println("Name: " + rs.getInt("Age") + " ID:  "+rs.getString("Course")); 
      } 

      stmt.close(); 
      con.close(); 
     } 
     catch (Exception err) { 
      System.out.println("ERROR: " + err); 
     } 
    } 

} 
Cuestiones relacionadas