[Resolvido]Conexão com o Oracle - impossivel inserir string

Bom dia pessoal, meu primeiro post aqui, desculpa se caso eu postei no topico errado. Estou no 5º semestre da faculdade de banco de dados, e agora que começamos a conectar o java com o banco.

fiz essa classe funcionario com codigo, nome, salario, para salvar no banco, mas quando executo ele não pede pra digitar o nome e lista o nome como NULL. segue abaixo o codigo. Obrigada

import java.sql.*;

public class Funcionario{
private int cod;
private String nome;
private Double salario;

private Statement stm;
private Connection con;

public void setCod(int c){
	cod = c;
}
public void setNome(String n){
	nome = n;
}
public void setSalario(Double s){
	salario = s;
}
public int getCod(){
	return cod;
}
public String getNome(){
	return  nome;
}
public Double getSalario(){
	return salario;
}

public void Conectar(){
	try{
		Class.forName("oracle.jdbc.OracleDriver");
		con = DriverManager.getConnection("jdbc:oracle:thin:aluno/aluno@//localhost:1521/XE");
		stm = con.createStatement();
		
	}catch(Exception e){
		e.printStackTrace();
	}		
}
public void CadastrarFuncionario(){
	try{
		Conectar();
		String sql = "insert into funcionario values("+cod+", '"+nome+"', " +salario+")";
		stm.execute(sql);
		con.close();
	}catch (Exception e){
		e.printStackTrace();
	}
}
	

public void ListarFuncionarios(){
	try{
		Conectar();
		String sql = "select * from funcionario";
		ResultSet result = stm.executeQuery(sql);
		while(result.next()){
			System.out.println("Codigo: "+result.getInt("cod"));
			System.out.println("Nome: "+result.getString("nome"));
			System.out.println("Sálario: "+result.getDouble("salario"));
			System.out.println("************************************");
		}
		con.close();
	}catch(Exception e){
		e.printStackTrace();
	}
}

}

import java.util.*;

public class Inicio{
public static void main(String[] args){

	Funcionario f1 = new Funcionario();
	Scanner teclado = new Scanner(System.in);
	System.out.println("Digite o código do funcionario: ");
	int c = teclado.nextInt();
	System.out.println("Digite o nome do funcionário: ");
	String n = teclado.nextLine(); 
	System.out.println("Digite o salario do funcionario: ");
	Double s = teclado.nextDouble();
	
	f1.setCod(c);
	f1.setNome(n);
	f1.setSalario(s);
	f1.CadastrarFuncionario();
	f1.ListarFuncionarios();
	
	
}

}

[quote=LuanaFranca][code]public static void main(String[] args){

Funcionario f1 = new Funcionario();
Scanner teclado = new Scanner(System.in);
System.out.println("Digite o código do funcionario: ");
int c = teclado.nextInt();
System.out.println("Digite o nome do funcionário: ");
String n = teclado.nextLine();
System.out.println("Digite o salario do funcionario: ");
Double s = teclado.nextDouble(); [/code][/quote]

Para ler do console apenas deve ser usado o método nextLine do Scanner:

[code]public static void main(String[] args){

Funcionario f1 = new Funcionario();
Scanner teclado = new Scanner(System.in);
System.out.println("Digite o código do funcionario: ");
int c = Integer.parseInt(teclado.nextLine());
System.out.println("Digite o nome do funcionário: ");
String n = teclado.nextLine();
System.out.println("Digite o salario do funcionario: ");
Double s = Double.parseDouble(teclado.nextDouble()); [/code]

java.lang.Double cannot be applied to (double)

Na última linha é, obviamente, teclado.nextLine e não teclado.nextDouble

Obrigada. Obrigada. ^^

Segue alguns conselhos que acho que são válidos:

  1. Trabalhe com padrões de projeto, seria ótimo você criar uma fábrica de conexões, ao invés de utilizar métodos de conexões.

  2. Use o PreparedStatement. Porque ? porque ele torna sua consulta mais ágil, pois ele armazena a consulta em memória, tornando assim fácil a sua reutilização. O Statement executa em tempo real, o que não é necessário.

String sql = “insert into funcionario values(”+cod+", ‘"+nome+"’, " +salario+")";

Trocando essas concatenações por isso “?”, e outra coisa, cade o nome das colunas ? exemplo:

String sql = “insert into funcionario(cod, nome, salario) values(?, ?, ?)”;
PreparedStatement pstmt = conection.prepareStatement(sql.toString);

pstmt.setInt(1, cod);
pstmt.setString(2, nome);
pstmt.setString(3, salario);

rs = pstmt.executeQuery();

Isso evita você sofrer ataques de SQL Injection.

  1. Eu não utilizo a classe Scanner para receber dados do console, eu sempre usei o BufferedReader. Se te interessar, segue:
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

para receber os dados do console: reader.readLine(); aceita parses também: Integer.parseInt(reader.readLine());

Boa Sorte!!

Valeu pelas dicas. vou tentar reformular.
Obrigada