gpt4 book ai didi

java - Java Web 应用程序中的 Oracle 10g 数据库集成

转载 作者:行者123 更新时间:2023-12-01 13:18:12 26 4
gpt4 key购买 nike

我正在用 java 构建一个通过 Jboss 5.0.1 应用程序服务器运行的程序。该程序必须查询和更新 Oracle 10g 数据库中的表,但我遇到了很多麻烦。

基本上,我有一个名为 DAO 的类,它连接数据库并通过方法“prueba()”进行简单的查询。下面是该类的实现:

package dao;

import java.io.File;
import java.io.FileInputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.Properties;

import valueObject.ItemFisico;



public class DAO {

//----------------------------------------------------
//Constantes
//----------------------------------------------------
/**
* ruta donde se encuentra el archivo de conexion.
*/
public final static String ARCHIVO_PROPIEDADES = "./data/conexion.properties";

//----------------------------------------------------
//Atributos
//----------------------------------------------------
/**
* conexion con la base de datos
*/
public Connection conexion;

/**
* nombre del usuario para conectarse a la base de datos.
*/
private String usuario;

/**
* clave de conexion a la base de datos.
*/
private String clave;

/**
* URL al cual se debe conectar para acceder a la base de datos.
*/
private String cadenaConexion;

/**
* constructor de la clase. No inicializa ningun atributo.
*/
public DAO()
{

}

// -------------------------------------------------
// Metodos
// -------------------------------------------------

/**
* obtiene ls datos necesarios para establecer una conexion
* Los datos se obtienen a partir de un archivo properties.
*/
public void inicializar()
{
try
{
File arch= new File(ARCHIVO_PROPIEDADES);
Properties prop = new Properties();
FileInputStream in = new FileInputStream( arch );

prop.load( in );
in.close( );

cadenaConexion = prop.getProperty("url");
usuario = prop.getProperty("usuario");
clave = prop.getProperty("clave");
final String driver = prop.getProperty("driver");
Class.forName(driver);

}
catch(Exception e)
{
e.printStackTrace();
}
}

/**
* Metodo que se encarga de crear la conexion con el Driver Manager
* a partir de los parametros recibidos.
* @param url direccion url de la base de datos a la cual se desea conectar
* @param usuario nombre del usuario que se va a conectar a la base de datos
* @param clave clave de acceso a la base de datos
* @throws SQLException si ocurre un error generando la conexion con la base de datos.
*/
private void establecerConexion(String url, String usuario, String clave) throws SQLException
{
try
{
conexion = DriverManager.getConnection(url,usuario,clave);
}
catch( SQLException exception )
{
throw new SQLException( "ERROR: ConsultaDAO obteniendo una conexion." );
}
}

/**
*Cierra la conexion activa a la base de datos. Ademas, con=null.
* @param con objeto de conexion a la base de datos
* @throws SistemaCinesException Si se presentan errores de conexion
*/
public void closeConnection(Connection connection) throws Exception {
try {
connection.close();
connection = null;
} catch (SQLException exception) {
throw new Exception("ERROR: ConsultaDAO: closeConnection() = cerrando una conexion.");
}
}

// ---------------------------------------------------
// Metodos asociados a los casos de uso: Consulta
// ---------------------------------------------------

public void prueba() throws Exception{
String prueba = "SELECT * FROM PARRANDEROS.BARES b where b.presupuesto='Bajo' ";


PreparedStatement st=null;

try{
inicializar();
establecerConexion(cadenaConexion, usuario, clave);
st = conexion.prepareStatement(prueba);

ResultSet r= st.executeQuery(prueba);
while(r.next()){
System.out.println(r.getInt("ID")+":"+r.getString("NOMBRE")+":"+r.getString("CIUDAD")+":"+r.getString("PRESUPUESTO")+":"+r.getString("CANT_SEDES"));

}

}
catch(Exception e)
{
e.printStackTrace();

}

finally{
if (st != null)
{
try {
st.close();
} catch (SQLException exception) {

throw new Exception("ERROR: ConsultaDAO: loadRow() = cerrando una conexi�n.");
}
}
closeConnection(conexion);
}

}


}

事情是这样的,这个类中的所有内容都工作正常,我通过一个简单的 main() 方法将它作为 Java 应用程序运行,并且它执行查询得很好。驱动程序 .jar 放置得很好并被引用,并且用于连接的所有属性都很好。

现在,当我运行安装在正在运行的服务器上的整个应用程序(包括其他类,如 servlet 等),然后尝试再次运行方法“prueba()”时,它崩溃了。它收到由 conexion.properties 文件引起的 FileNotFoundException,该文件存在!!!。

我并不是真正的网络应用程序专家,并且真的不知道是否需要对服务器配置或其他地方进行任何更改。有人可以帮助我吗?

最佳答案

问题是您使用的是绝对路径./data/conexion.properties,当您在本地运行程序时,这很好。但是部署到应用程序服务器会使路径无效,因为该文件将位于其他位置(例如 /apps/jboss/.../myapp/data/conexion.properties)。在 initializar 方法中替换以下内容

File arch= new File(ARCHIVO_PROPIEDADES);

URL url = getClass().getClassLoader().getResource("conexion.properties");
File arch= new File(url.getFile());

关于java - Java Web 应用程序中的 Oracle 10g 数据库集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22291443/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com