Atualizando Sql Server pelo JAVA

11 respostas
L

OI gente, estou na empresa onde faço estagio e fiz um programinha em vb mas n to conseguindo fazer em java.

Eu preciso atualizar uns dados do BD

Uso o seguinte código :

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Agenda_Campanha {

	public static void main(String[] args) {

		int dia = 1;
		String semana_1 = "D S T Q Q S S";
		String semana_2 = "S T Q Q S S D";
		String semana_3 = "T Q Q S S S D";
		String semana_4 = "Q Q S S D S T";
		String semana_5 = "Q S S D S T Q";
		String semana_6 = "S S D S T Q Q";
		String semana_7 = "S D S T Q Q S";

		try {
			Class.forName("net.sourceforge.jtds.jdbc.Driver");
			Connection con = DriverManager.getConnection(
					"jdbc:jtds:sqlserver://WA-TI05:1433;namedPipe=true", "sa",
					"");
			System.out.println("Conectado");
			Statement stm = con.createStatement();
			String SQL = "INSERT INTO FELLIPE2 (NOME) VALUES ('alguem');";

			ResultSet rs = stm.executeUpdate(SQL);

			while (rs.next()) {
				String tit = rs.getString("NOME");
				System.out.println(tit);
			}

			con.close();

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();

		}

	}
}

SEI QUE TEM ALGO ERRADO MAS NAO CONSIGO RESOLVER, É ALGO NO ResultSet rs = stm.executeUpdate(SQL);

SEI QUE O ExecuteQuery é apenas pra dar SELECT, os outros é usado o executeUpdate, mas quando uso isso da um erro justamente nessa linha:

Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from int to ResultSet

at Agenda_Campanha.main(Agenda_Campanha.java:29)

sera que alguem pode me dizer como q uso o executeUpdate sem dar nenhum erro !!!

OBS: O codigo esta com varias coisas que eu não usei, pois ainda não terminei o programa =) !!!

11 Respostas

E

http://docs.oracle.com/javase/6/docs/api/java/sql/Statement.html#executeUpdate(java.lang.String)

executeUpdate retorna um int, não um ResultSet.

lazaropj

Troque o executeUpate por executeQuery.

E de preferencia ao PreparedStatement ao invés do statement.

E

lazaropj:
Troque o executeUpate por executeQuery.

E de preferencia ao PreparedStatement ao invés do statement.

Mas não faz sentido usar executeQuery para um insert - tem de usar executeUpdate.
Mas é bom aprender a usar PreparedStatement, que ajuda a evitar vários problemas.

lazaropj

entanglement:
lazaropj:
Troque o executeUpate por executeQuery.

E de preferencia ao PreparedStatement ao invés do statement.

Mas não faz sentido usar executeQuery para um insert - tem de usar executeUpdate.
Mas é bom aprender a usar PreparedStatement, que ajuda a evitar vários problemas.

Mas ele quer como retorno um Result Set…
e o executeQuery retorna isso pra ele!!

L

EU FIZ O QUE DISSERAM, AGORA APARESENTA UM ERRO NESSA LINHA:

PreparedStatement stm = con.createPreparedStatement();

ERRO : Exception in thread “main” java.lang.Error: Unresolved compilation problem:
The method createPreparedStatement() is undefined for the type Connection

at Agenda_Campanha.main(Agenda_Campanha.java:26)
E

lazaropj:
entanglement:
lazaropj:
Troque o executeUpate por executeQuery.

E de preferencia ao PreparedStatement ao invés do statement.

Mas não faz sentido usar executeQuery para um insert - tem de usar executeUpdate.
Mas é bom aprender a usar PreparedStatement, que ajuda a evitar vários problemas.

Mas ele quer como retorno um Result Set…
e o executeQuery retorna isso pra ele!!

Sei.
Você quer tirar leite de vaca de um jacaré, certo?
É isso que faz o insert.
Ele não retorna nada, só o número de linhas que foram afetadas pelo insert.
O insert não é uma consulta do tipo “retorne todos os elementos inseridos”.
E é por isso que não devemos forçar a amizade e usar um executeQuery só porque queremos tirar leite de vaca de um jacaré.

L

PELO Q TINHA LIDO COMO SO VOU INSERIR AS COISAS TERIA Q SER executeUpdate ne

L

O CODIGO TA ASSIM AGORA :

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Agenda_Campanha {

	public static void main(String[] args) {

		int dia = 1;
		String semana_1 = "D S T Q Q S S";
		String semana_2 = "S T Q Q S S D";
		String semana_3 = "T Q Q S S S D";
		String semana_4 = "Q Q S S D S T";
		String semana_5 = "Q S S D S T Q";
		String semana_6 = "S S D S T Q Q";
		String semana_7 = "S D S T Q Q S";

		try {
			Class.forName("net.sourceforge.jtds.jdbc.Driver");
			Connection con = DriverManager.getConnection(
					"jdbc:jtds:sqlserver://WA-TI05:1433;namedPipe=true", "sa",
					"");
			System.out.println("Conectado");
			PreparedStatement stm = con.createPreparedStatement();
			String SQL = "INSERT INTO FELLIPE2 (NOME) VALUES ('alguem');";

			ResultSet rs = stm.executeUpdate(SQL);

			while (rs.next()) {
				String tit = rs.getString("NOME");
				System.out.println(tit);
			}

			con.close();

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();

		}

	}
}

APRESENTANDO O SEGUINTE ERRO :

Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The method createPreparedStatement() is undefined for the type Connection
Type mismatch: cannot convert from int to ResultSet

at Agenda_Campanha.main(Agenda_Campanha.java:26)

É ALGO COM O RESULT SET, MAS COMO SO INICIANTE EM JAVA, NÃO SEI O Q PODE TA ACONTECENDO

lazaropj
PreparedStatement pstmt =  conn.prepareStatement("insert into FELLIPE2 values (?)"); 
pstmt.setString(1,"Alguem");
int linhasAfetadas = pstmt.executeUpdate();

System.out.println("Linhas afetadas: " +linhasAfetadas );

Tente assim e pare de tirar leite de vaca do jacaré.

L

VLW LAZARO, FUNCIONO AQUI, MUITO OBG !!!

lazaropj

Assim… não use conexão na mesma classe q vc está fazer o insert…
O certo é vc criar essa conexão em outra classe e apenas fazer a chamada para conectar aí nessa classe.
Você conhece o padrão MVC?
Vc conhece as apostilas free da caelum?

Coloque [RESOLVIDO] no titulo do post aí.

Criado 20 de julho de 2012
Ultima resposta 20 de jul. de 2012
Respostas 11
Participantes 3