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)
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
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
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. –