variáveis no insert (mysql) - RESOLVIDO

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 só 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…

Acho que assim funciona…

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

dessa maneira salva os campos sem nada…

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.

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 !

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 !

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 + "')";

Vê se isto funciona:

[quote=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 + "')"; [/quote]

cara, consegui assim:

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

valeu ai, abraço ![/code]

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

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

como seria isso ?

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

mas já consegui fazer bastante coisa hj…

[code]
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();
    }
}

}[/code]

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.

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.