variáveis no insert (mysql) - RESOLVIDO

12 respostas
rodolpho_maia

Boa tarde galera, é o seguinte… tenho esse código aqui:

public void salvar(String texto111, String texto222)  -> //estas variáveis puxando os valores do textfield de outra tela
	{
		try
		{
		Class.forName("com.mysql.jdbc.Driver");
		Connection conexao = DriverManager.getConnection("jdbc:mysql://127.0.0.1/test", "root", "senha");
		String sql = "insert into teste (texto1, texto2) values('texto111', 'texto222')"; -> //aqui, porém salva  texto111 e texto222
		Statement st = conexao.createStatement();
		st.execute(sql);
				
		st.close();
		conexao.close();
		
		JOptionPane.showMessageDialog(null, "Registro salvo com sucesso !","",JOptionPane.INFORMATION_MESSAGE);
		}
		catch(Exception e)
		{
			JOptionPane.showMessageDialog(null, e);
		}

então, eu quero pegar os valores pra inserir no banco em outro método, passando as variáveis texto111 e texto222 por parâmetro, só q na hora de inserir grava o texto111 e texto222 e não o valor da textfield da outra tela. Já tentei tirar os ’ ’ mas dá erro. Não faço idéia como faz…

12 Respostas

souzaJr

Acho que assim funciona…

String sql = "insert into teste (texto1, texto2) values('" + texto111 + "', '" + texto222 + "')";
rodolpho_maia

dessa maneira salva os campos sem nada…

souzaJr

Certifique-se do valor das variáveis texto111 e texto222 passadas ao método. Além disso, quando tiver problemas com sql, algo que você pode fazer é plotar a String sql e a escrever diretamente no banco para encontrar o erro mais facilmente… Até mais.

rodolpho_maia

nossa… valeu cara, funcionou do jeito que você tinha falado… fiz outro programa de testes aqui e esqueci de fazer o getText no textfield, por isso estava vazio…rs

Obrigado !

rodolpho_maia

Quanto ao restante que você falou não entendi mto bem, mas deixa pra lá…

Outra coisa, aproveitando o embalo… se puder me ajudar com mais uma coisa…

Tenho 14 campos no banco, e 15 campos no meu Frame…

Tem logradouro(combobox) e endereço(textfield) separados…

queria saber como concatenar os dois e inserir no banco como sendo um campo só… “endereço”…

valeu !

souzaJr

Cara, é do mesmo jeito…

Se depois você quiser recuperar os dois separadamente você pode usar a função split da classe String.

//endereco e logradouro passados pelo método
// Tá concatenando os dois campos separando por - 
String sql = "insert into teste (endereco) values('" + endereco + "-" + logradouro + "')";
B

Vê se isto funciona:

rodolpho_maia
souzaJr:
Cara, é do mesmo jeito....

Se depois você quiser recuperar os dois separadamente você pode usar a função split da classe String.

//endereco e logradouro passados pelo método
// Tá concatenando os dois campos separando por - 
String sql = "insert into teste (endereco) values('" + endereco + "-" + logradouro + "')";

cara, consegui assim:

,'"+variavel1+"'   '"+variavel2"',  // colocando o espaço entre as duas variáveis sem separá-las por vírgula...

valeu ai, abraço !
B

Use o PreparedStatement, vai te evitar dores de cabeças.

Aliás, o Statement puro deveria ser banido da API do Java.

rodolpho_maia

como seria isso ?

estou começando agora a mexer com mysql, to apanhando… :smiley:

mas já consegui fazer bastante coisa hj…

B
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class SQL
{
    Connection conn;

    public SQL(Connection conn)
    {
        this.conn = conn;
    }

    public void salvar(String texto1, String texto2)
    throws SQLException
    {
        String sql = "insert into teste (texto1, texto2) values (?, ?)";

        PreparedStatement ps = null;
        try
        {
            ps = conn.prepareStatement(sql);
            ps.setString(1, texto1);
            ps.setString(2, texto2);

            ps.executeUpdate();
        }
        finally
        {
            if (ps != null)
                ps.close();
        }
    }
}

Repare nos ? no sql. Os campos serão substituídos de acordo com a ordem que você puser no setString. Outros tipos de dados tb estão disponíveis, como setInt, setLong, setDouble, etc.

souzaJr

O problema de você colocar só separando por caracter vazio é que se depois você quiser pegar as informações separadamente vai ter problemas, pois possivelmente o endereco e logradouro já possuirão caracteres vazios… e outra coisa, você parece que está colocando aspas simples demais aí no teu código.

É bom você entender que as aspas duplas são “interpretadas” pelo Java para definir a string, as aspas simples serão “interpretadas” pelo banco MySQL (fazem parte da sintaxe).

//Isso aqui já funcionaria separando por caracter vazio
String sql = "insert into teste (endereco) values ('" + endereco + " " + logradouro + "')";

Pois é, prepareStatement é uma boa solução. Até mais.

Criado 28 de setembro de 2008
Ultima resposta 28 de set. de 2008
Respostas 12
Participantes 3