Erro no ServerPreparedStatement

2 respostas
J

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  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;
}

2 Respostas

davidbuzatto

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!

J

obrigado

Criado 23 de julho de 2007
Ultima resposta 23 de jul. de 2007
Respostas 2
Participantes 2