Boa tarde galera, é o seguinte… tenho esse código aqui:
publicvoidsalvar(Stringtexto111,Stringtexto222)->//estasvariáveispuxandoosvaloresdotextfielddeoutratela{try{Class.forName("com.mysql.jdbc.Driver");Connectionconexao=DriverManager.getConnection("jdbc:mysql://127.0.0.1/test","root","senha");Stringsql="insert into teste (texto1, texto2) values('texto111', 'texto222')";->//aqui,porémsalvasótexto111etexto222Statementst=conexao.createStatement();st.execute(sql);st.close();conexao.close();JOptionPane.showMessageDialog(null,"Registro salvo com sucesso !","",JOptionPane.INFORMATION_MESSAGE);}catch(Exceptione){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…
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 - Stringsql="insert into teste (endereco) values('"+endereco+"-"+logradouro+"')";
B
Bruno_Laturner
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 - Stringsql="insert into teste (endereco) values('"+endereco+"-"+logradouro+"')";
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…
mas já consegui fazer bastante coisa hj…
B
Bruno_Laturner
importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.SQLException;publicclassSQL{Connectionconn;publicSQL(Connectionconn){this.conn=conn;}publicvoidsalvar(Stringtexto1,Stringtexto2)throwsSQLException{Stringsql="insert into teste (texto1, texto2) values (?, ?)";PreparedStatementps=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 vazioStringsql="insert into teste (endereco) values ('"+endereco+" "+logradouro+"')";
Pois é, prepareStatement é uma boa solução. Até mais.