Testar uma lista (List) com JDBC

7 respostas
arthurgon

Bom dia pessoal. Estou com um grande problema. Criei um método para
buscar uma lista de turnos. O problema é que na hora de testar, ele pede
uma compilação no "main" em Java 5. Acontece que só posso utilizar pra esse projeto Java 1.4.
Alguem poderia me ajudar? Não posso nem compilar pois ele já pede pra converter.

Esse é o método List:

public class TurnoDAO extends DAOBase {

	private static String SELECT = null;
          public TurnoDAO() {
		this(null);
	}

          public TurnoDAO(Connection connection) {
		super(connection);
		
		StringBuffer stringBuffer = new StringBuffer();
                
                if(SELECT == null){
			stringBuffer.delete(0, stringBuffer.length());
			stringBuffer.append("select * from TUR_RPT ");
			stringBuffer.append("where CD_EMPGCB = ? AND ");
			stringBuffer.append(" CD_FIL = ? AND ");
			stringBuffer.append(" CD_TURRPT = ? ");
			SELECT = stringBuffer.toString();
		}


             }

                public List listar() throws SQLException{
		PreparedStatement preparedStatement = null;
		Connection conn = null;
		ResultSet rs = null;
		List lista = new ArrayList();
		TurnoVO turnoVO = null;
		try{
			conn = getConnection();
			
			preparedStatement = conn.prepareStatement("select * from TUR_RPT");
			
			int index = 1;
			preparedStatement.setInt(index++, turnoVO.getEmpresa());
			preparedStatement.setInt(index++, turnoVO.getFilial());
			preparedStatement.setInt(index++, turnoVO.getCodigo());
			
			rs = preparedStatement.executeQuery();
			
			while(rs.next()){
				turnoVO = new TurnoVO();
				
				turnoVO.setEmpresa(rs.getInt("CD_EMPGCB"));
				turnoVO.setFilial(rs.getInt("CD_FIL"));
				turnoVO.setCodigo(rs.getInt("CD_TURRPT"));
				turnoVO.setDescricao(rs.getString("DS_TURRPT"));
				turnoVO.setHoraEntrada(sqlTimeTOutilDate(rs.getTime("HR_TURRPT_ENT")));
				turnoVO.setHoraSaida(sqlTimeTOutilDate(rs.getTime("HR_TURRPT_SAI")));
				
				lista.add(turnoVO);
			}
		} finally {
			close(null, preparedStatement, conn);
		}
		return lista;
	}

Esse é o meu método MAIN:

public static void main(String[] args) throws SQLException {
		TurnoDAO dao = new TurnoDAO();
		List<TurnoVO> turnos = dao.listar();

		for (TurnoVO turnoVO : turnos) {
			
			System.out.println("Empresa:"+ turnoVO.getEmpresa());
			System.out.println("Filial:" + turnoVO.getFilial());
			System.out.println("Codigo do Turno:"+ turnoVO.getCodigo());
			System.out.println("Descricao do Turno:"+ turnoVO.getDescricao());
			System.out.println("Horario de Entrada:"+ turnoVO.getHoraEntrada());
			System.out.println("Horario de Saida:"+ turnoVO.getHoraSaida());
			
			System.out.println("Listado com sucesso!!");
		}
	}
}

Se alguem souber como resolver agradeço. O erro só dá no método MAIN.

7 Respostas

D

Segue o código para versão 1.4, qualquer problema me avisa!

public static void main(String[] args) throws SQLException {
		TurnoDAO dao = new TurnoDAO();
		List turnos = dao.listar();

		for (int i=0;i<turnos.size();i++) {
			
			TurnoVO turnoVO = (TurnoVO) turnos.get(i);
			
			System.out.println("Empresa:"+ turnoVO.getEmpresa());
			System.out.println("Filial:" + turnoVO.getFilial());
			System.out.println("Codigo do Turno:"+ turnoVO.getCodigo());
			System.out.println("Descricao do Turno:"+ turnoVO.getDescricao());
			System.out.println("Horario de Entrada:"+ turnoVO.getHoraEntrada());
			System.out.println("Horario de Saida:"+ turnoVO.getHoraSaida());
			
			System.out.println("Listado com sucesso!!");
		}
	}
L

arthurgon,

o problema eh que voce está tipando a sua lista na expressão

List<TurnoVO> turnos = dao.listar();

essa tipagem eh chamada de Generics e soh foi implementada no Java a partir da versão 1.5, por isso no momento da compilação nao funciona com 1.4. Tire esta tipagem deixando apenas List que irá funcionar…

[]'ssss

arthurgon

Tirei a TIPAGEM…mas o erro prossegue. Agora ele compila…porém…a MSG que me retorna é esse erro:

03/06/2008 09:57:52 com.mchange.v2.log.MLog <clinit> INFO: MLog clients using java 1.4+ standard logging. 03/06/2008 09:57:53 com.mchange.v2.c3p0.C3P0Registry <clinit> INFO: jdk1.5 management interfaces unavailable... JMX support disabled. java.lang.ClassNotFoundException: java.lang.management.ManagementFactory at java.net.URLClassLoader$1.run(URLClassLoader.java:199) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:187) at java.lang.ClassLoader.loadClass(ClassLoader.java:289) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:274) at java.lang.ClassLoader.loadClass(ClassLoader.java:235) at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:302) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:141) at com.mchange.v2.c3p0.C3P0Registry.<clinit>(C3P0Registry.java:132) at com.mchange.v2.c3p0.impl.PoolBackedDataSourceBase.<init>(PoolBackedDataSourceBase.java:228) at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.<init>(AbstractPoolBackedDataSource.java:62) at com.mchange.v2.c3p0.ComboPooledDataSource.<init>(ComboPooledDataSource.java:109) at com.mchange.v2.c3p0.ComboPooledDataSource.<init>(ComboPooledDataSource.java:105) at casasbahia.relogio.dao.DBConnectionFactory.<init>(DBConnectionFactory.java:55) at casasbahia.relogio.dao.DBConnectionFactory.getInstance(DBConnectionFactory.java:24) at casasbahia.relogio.dao.DAOBase.getConnection(DAOBase.java:36) at casasbahia.relogio.dao.TurnoDAO.listar(TurnoDAO.java:193) at casasbahia.relogio.dao.TurnoDAO.main(TurnoDAO.java:380) 03/06/2008 09:57:53 com.mchange.v2.c3p0.C3P0Registry banner INFO: Initializing c3p0-0.9.1.2 [built 21-May-2007 15:04:56; debug? true; trace: 10] 03/06/2008 09:57:53 com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource getPoolManager INFO: Initializing c3p0 pool... com.mchange.v2.c3p0.ComboPooledDataSource [ acquireIncrement -> 2, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 15000, connectionCustomizerClassName -> null, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, dataSourceName -> 1hge15a7uls5xlciqa3zz|27391d, debugUnreturnedConnectionStackTraces -> false, description -> null, driverClass -> com.mysql.jdbc.Driver, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, identityToken -> 1hge15a7uls5xlciqa3zz|27391d, idleConnectionTestPeriod -> 150, initialPoolSize -> 3, jdbcUrl -> jdbc:mysql://localhost/relogio, maxAdministrativeTaskTime -> 0, maxConnectionAge -> 0, maxIdleTime -> 0, maxIdleTimeExcessConnections -> 0, maxPoolSize -> 10, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 2, numHelperThreads -> 3, numThreadsAwaitingCheckoutDefaultUser -> 0, preferredTestQuery -> SELECT 1, properties -> {user=******, password=******}, propertyCycle -> 0, testConnectionOnCheckin -> true, testConnectionOnCheckout -> true, unreturnedConnectionTimeout -> 0, usesTraditionalReflectiveProxies -> false ] java.lang.NullPointerException at casasbahia.relogio.dao.TurnoDAO.listar(TurnoDAO.java:198) at casasbahia.relogio.dao.TurnoDAO.main(TurnoDAO.java:380) Exception in thread "main"

Acredito…pelo que entendi que ainda é problema de incompatibilidade.
Se alguem conseguir entender outra coisa…agradeço.

L

me parece agora q está dando erro na hora de fazer a conexão com o banco de dados

vc está usando o jar c3p0?

qual banco vc está conectando?, vc está usando o driver de acesso ao banco?

B

arthurgon:
Tirei a TIPAGEM…mas o erro prossegue. Agora ele compila…porém…a MSG que me retorna é esse erro:

java.lang.NullPointerException at casasbahia.relogio.dao.TurnoDAO.listar(TurnoDAO.java:198) at casasbahia.relogio.dao.TurnoDAO.main(TurnoDAO.java:380) Exception in thread "main"

Acredito…pelo que entendi que ainda é problema de incompatibilidade.
Se alguem conseguir entender outra coisa…agradeço.

Não, é problema de lógica mesmo. Você está iniciando turnoVo com null e depois usando um método dele.

PS: O compilador te dá até a linha onde ocorreu o erro, preste atenção nisso.

D
leonickel:
arthurgon,

o problema eh que voce está tipando a sua lista na expressão

List<TurnoVO> turnos = dao.listar();
essa tipagem eh chamada de Generics e soh foi implementada no Java a partir da versão 1.5, por isso no momento da compilação nao funciona com 1.4. Tire esta tipagem deixando apenas List que irá funcionar.....

[]'ssss

Não se esqueça do For.

Sobre a exceção seu erro está aqui
TurnoVO turnoVO = null;  
         try{  
             conn = getConnection();  
               
             preparedStatement = conn.prepareStatement("select * from TUR_RPT");  
               
           int index = 1;  

            preparedStatement.setInt(index++, turnoVO.getEmpresa());  
            preparedStatement.setInt(index++, turnoVO.getFilial());  
            preparedStatement.setInt(index++, turnoVO.getCodigo());

Remova essas linhas aki

int index = 1;  

            preparedStatement.setInt(index++, turnoVO.getEmpresa());  
            preparedStatement.setInt(index++, turnoVO.getFilial());  
            preparedStatement.setInt(index++, turnoVO.getCodigo());

Voce estava invocando metodos de uma referencia nula, por isso essa sua NullPointer, essas linhas não parecem fazer parte da lógica deste método, se o seu objetivo é listar tudo sem restrição alguma então não há uma necessidade nesse seu caso de parametrizar a sua query.

Abraço

arthurgon

Deu certo por aqui…

Valeu amigão;

Criado 3 de junho de 2008
Ultima resposta 3 de jun. de 2008
Respostas 7
Participantes 4