Erro no ServerPreparedStatement

eu estou montando um programa c/ acesso a banco de dados e esta dando o seguinte erro:
será se alguem consegue me ajudar?

Parameter index out of bounds. 2 is not between valid values of 1 and 1
at com.mysql.jdbc.ServerPreparedStatement.getBinding(ServerPreparedStatement.java:751)
at com.mysql.jdbc.ServerPreparedStatement.setString(ServerPreparedStatement.java:1803)
at cadastro.Medico.Verifica(Medico.java:600)
at cadastro.Medico$11.actionPerformed(Medico.java:465)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 0).
at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:2250)
at com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:2949)
at cadastro.Medico.Cadastrar(Medico.java:543)
at cadastro.Medico$11.actionPerformed(Medico.java:466)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

o techo esta da seguinte forma:

public void Cadastrar(){
try{
Connection conexao = DriverManager.getConnection(“jdbc:mysql://localhost/roteiros”,“root”,“root”);
PreparedStatement sql = conexao.prepareStatement(“INSERT INTO medico (nome,crm,esp,cid,tel1,tel2,tel3) values (?,?,?,?,?,?,?)”);
sql.setString(1, nome.getText());
sql.setString(2, crm.getText());
sql.setInt(3, Integer.parseInt(esp));
sql.setString(4, cid.getText());
sql.setString(5, tel1.getText());
sql.setString(6, tel2.getText());
sql.setString(7, tel3.getText());

		int q = sql.executeUpdate();
		if (q > 0){
			JOptionPane.showMessageDialog(null,"Cadastro inserido com sucesso!","Ana Costa Saúde",1);
			a=0;
		}
		else{
			JOptionPane.showMessageDialog(null,"Não foi possível inserir o cadastro!","Erro",0);
			a=0;
		}
	}
	catch (SQLException e){
		e.printStackTrace();
		JOptionPane.showMessageDialog(null,"Não foi possível conectar com o banco!","Erro",0);
		a=1;
	}
}	
public boolean Verifica(){
	if (nome.getText().equals("")){
		JOptionPane.showMessageDialog(null,"Favor digitar o nome do médico.","Ana Costa Saúde",1);
		return false;
	}
	else if(crm.getText().equals("")){
		JOptionPane.showMessageDialog(null,"Favor digitar o CRM do médico.","Ana Costa Saúde",0);
		return false;
	}
	else if(especialidades.getToolkit().equals("")){
		JOptionPane.showMessageDialog(null,"Favor escolher a especialidade do médico.","Ana Costa Saúde",0);
		return false;
	}
	else if(cid.getText().equals("")){
		JOptionPane.showMessageDialog(null,"Favor digitar o nome da cidade.", "Ana Costa Saúde", 0);
		return false;
	}
	else if(tel1.getText().equals("")){
		JOptionPane.showMessageDialog(null, "Favor digitar o número do telefone.", "Ana Costa Saúde", 0);
		return false;
	}
	esp = "";
	String c = (String)especialidades.getSelectedItem();
	int j = 0;
	while (c.charAt(j) != ' '){
		esp = esp + c.charAt(j);
		j++;
	}
			ResultSet res = null;
	try{
		Connection conexao = DriverManager.getConnection("jdbc:mysql://localhost/roteiros","root","root");
		PreparedStatement sql = conexao.prepareStatement("SELECT * from medico where nome = ? ");
		sql.setString(1, nome.getText());
		sql.setString(2, crm.getText());
		sql.setInt(3, Integer.parseInt(esp));
		sql.setString(5, cid.getText());
		sql.setString(6, tel1.getText());
		sql.setString(7, tel2.getText());
		sql.setString(8, tel3.getText());
		res = sql.executeQuery();
		int i = 0;
		while(res.next()) i++;
		if(i > 0){
			JOptionPane.showMessageDialog(null,"Cadastro já existente","Ana Costa Saúde",0);
			nome.setText(null);
			return false;
		}
	}	
	catch (SQLException e){
		e.printStackTrace();
		JOptionPane.showMessageDialog(null,"Não foi possível conectar com o banco!","Erro",0);
	}
	return true;
}

No seu último PreparedStatement vc ta tentando inserir um parâmetro onde não pode existir (vc tem apenas um “?” no sql).

Quando vc tenta inserir um parâmetro na posição dois dá o problema, falando q vc está tentando inserir na posição 2, sendo que só existe 1.

Mais uma coisa, aqui não é o fórum certo… Vc deveria ter postado na Java Básico… Se alguém puder mover para lá seria legal…

Até mais!

obrigado