EJB faz um insert numa table

4 respostas
Claudia.pt

Olá pessoal!
Ouvi dizer que vocês agora torcem pela nossa Selecção?
Obrigada :slight_smile:

Bem tenho um form numa jsp que submeto a uma servlet e este passa os dados a um session bean que faz o insert de uma linha numa tabela.
Até aqui, tudo bem.
A linha é introduzida com sucesso na tabela, mas é gerada a seguinte excepção:

22:02:59,781 INFO  [STDOUT] java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]No ResultSet set was produced.
22:02:59,781 INFO  [STDOUT] 	at com.microsoft.jdbc.base.BaseExceptions.createException(Unknown Source)
22:02:59,781 INFO  [STDOUT] 	at com.microsoft.jdbc.base.BaseExceptions.getException(Unknown Source)
22:02:59,781 INFO  [STDOUT] 	at com.microsoft.jdbc.base.BaseStatement.executeQueryInternal(Unknown Source)
22:02:59,781 INFO  [STDOUT] 	at com.microsoft.jdbc.base.BasePreparedStatement.executeQuery(Unknown Source)
22:02:59,781 INFO  [STDOUT] 	at org.jboss.resource.adapter.jdbc.WrappedPreparedStatement.executeQuery(WrappedPreparedStatement.java:296)
22:02:59,781 INFO  [STDOUT] 	at com.samples.TableBean.insert_Table_Diary(TableBean.java:178)
...

o código do bean:

Connection c = null; 
		PreparedStatement ps = null;
		ResultSet rs = null;
		
	
		
		try {
			// getConnection()
			c = getDataSource().getConnection();	
			
			String tab = "TABLE_DIARY";
			System.out.println(tab);
			
					
			// prepareStatement(sql statement)
			//ps = c.prepareStatement("
			//INSERT INTO titles(title_id, title, type, pub_id, price)
	        //VALUES   ('BU9876', 'Creating Web Pages', 'business', '1389', '29.99')
			//");
			ps = c.prepareStatement("INSERT INTO " + tab + " (cid_ap_fn, cid_ap_ln, cid_ap_fh, cid_ap_lh," +
					"cid_el_fn, cid_el_ln, cid_el_fh, cid_el_lh," +
					"cid_vale_maias, cid_ps1, cid_silval, cid_jk8, cid_ac2," +
					"cac_ap_fn, cac_ap_ln, cac_ap_fh, cac_ap_lh, " +
					"cac_el_fn, cac_el_ln, cac_el_fh, cac_el_lh," +
					"cac_jk4, cac_sl1, cac_silval, " +
					"sil_ap_fn, sil_ap_ln, sil_ap_fh, sil_ap_lh, " +
					"sil_el_fn, sil_el_ln, sil_el_fh, sil_el_lh, " +
					"sil_src, sil_jk2, sil_jk5, sil_jk6, sil_jk10, " +
					"sil_ac2, sil_ac5, sil_ac6, sil_ac8, sil_ac9)" + 
					"VALUES (" + cid_ap_fn + "," + cid_ap_ln + "," + cid_ap_fh + "," + cid_ap_lh + "," +
					cid_el_fn + "," + cid_el_ln + "," + cid_el_fh + "," + cid_el_lh + "," + 
					cid_vale_maias + "," + cid_ps1 + "," + cid_silval + "," + cid_jk8 + "," + cid_ac2 + "," + 
					cac_ap_fn + "," + cac_ap_ln + "," + cac_ap_fh + "," + cac_ap_lh + "," + 
					cac_el_fn + "," + cac_el_ln + "," + cac_el_fh + "," + cac_el_lh + "," +
					cac_jk4 + "," + cac_sl1 + "," + cac_silval + "," +
					sil_ap_fn + "," + sil_ap_ln + "," + sil_ap_fh + "," + sil_ap_lh + "," +
					sil_el_fn + "," + sil_el_ln + "," + sil_el_fh + "," + sil_el_lh + "," +
					sil_src + "," + sil_jk2 + "," + sil_jk5 + "," + sil_jk6 + "," + sil_jk10 + "," + 
					sil_ac2 + "," + sil_ac5 + "," + sil_ac6 + "," + sil_ac8 + "," + sil_ac9 + ")");
							
			// executeQuery()
			rs = ps.executeQuery();
				
			rs.close();
			ps.close();
			c.close();

É que é a 1ªvez que faço um insert, antes usava apenas selects!!
Obrigada
Cláudia

4 Respostas

ClashFM

Oi Claudia,
pois é, na falta da nossa, vamos torcer pelos patrícios! :wink:

Sobre seu código, vc não precisa executar o ps.executeQuery(), pq o comando passado não é um SELECT; ao invés disso, chame o método ps.executeUpdate().

Ele retorna um int, que aponta o número de linhas atualizadas/excluidas/incluidas pelo comando passado.
Desnecessário dizer que não precisa da variável rs

Fica assim, então:

// executeQuery()
   int nrRegistros = ps.executeUpdate();

   ps.close();

Cheers!

Claudia.pt

ps = c.prepareStatement("INSERT INTO " + tab + " user" + VALUES (" + "CLAUDIA" + ")");

Isso dá erro!!
pq não aceita o insert de uma string??

Obrigada
Claudia

J

Verifique novamente esse trecho de código,

ps = c.prepareStatement(“INSERT INTO " + tab + " user” + VALUES (" + “CLAUDIA” + “)”);

isso compila?

Tem certeza? Você não esqueceu algo?
Veja que você está a concatenar tab (variável) com a palavra fixa user, então o nome da tabela é o conteúdo de tab mais espaço em branco e a palavra user??

Acho que tem coisa errada aí, dê uma verificada.

Não sei no SQL Server, mas no Oracle um campo string deve ser gravado no banco entre aspas simples, exemplo ‘CLAUDIA’.
Verifique isso também.

Claudia.pt

De facto, a query que postei não estava correcta.
Para que o pessoal possa aprender com os meus erros, fica aqui a correcção:

...
try {
	// getConnection()
	c = getDataSource().getConnection();	
			
	String tab = "TABLE_DIARY";
	System.out.println(tab);
			
	// Prepare a statement to insert a record
	String sql = "INSERT INTO " + tab + " (operador, data, insertData, ...)";

        ps = c.prepareStatement(sql);
        
        // Today Date
	Date t = new Date();
	Timestamp today = new Timestamp(t.getTime());
			
	// Set the values
	ps.setString(1, user);
	ps.setString(2, sDate);
	ps.setTimestamp(3, today);
       ...
        ps.executeUpdate();
			
	ps.close();
	c.close();
	   
	} catch ...

Espero que ajude alguém!
Cláudia

Criado 3 de julho de 2006
Ultima resposta 6 de jul. de 2006
Respostas 4
Participantes 3