Problemas no insert do Mysql

Pessoal eu estou tendo o seguinte problema com a execução do codigo abaixo. O erro que é apresentado é esse:

java.sql.SQLException: Parameter index out of range (2 > number of parameters, which is 0).
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1056)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
at com.mysql.jdbc.PreparedStatement.checkBounds(PreparedStatement.java:3279)
at com.mysql.jdbc.PreparedStatement.setInternal(PreparedStatement.java:3263)
at com.mysql.jdbc.PreparedStatement.setString(PreparedStatement.java:4087)
at sonix.dao.RouterDAO.addRouter(RouterDAO.java:64)
at sonix.dao.RouterDAO.main(RouterDAO.java:136)

A funcão main esta adicionada no final do codigo.

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */
    package sonix.dao;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
import java.util.Vector;
import sonix.bean.RouterBean;
import sonix.sql.DAOFactory;

/**
*

  • @author rrsilva
    */
    public class RouterDAO implements DAORouter {

    private PreparedStatement preparedStatement = null;
    private ResultSet resultSet = null;
    private DAOFactory factory = null;
    private Vector vector = null;
    private String selectAllRouters = “SELECT * FROM roteadores”;
    private String selectRouter = “SELECT * FROM ROTEADORES WHERE idROTEADORES = ?”;
    private String countRouters = “SELECT COUNT(idROTEADORES) FROM ROTEADORES”;
    private String insertRouter = “INSERT INTO ROTEADORES(idROTEADORES, ENDERECO_ROTEADOR, PORTA_ROTEADOR, USER_ROTEADOR, PASSWORD_ROTEADOR)” +
    " VALUES( ?, ?, ?, ?, ?)";
    private String deleteRouter = “DELETE FROM ROTEADORES WHERE idROTEADORES = ?”;
    private String updateLogin = "UPDATE ROTEADORES SET IDROTEADORES = ?, " +
    "ENDERECO_ROTEADOR = ?, " +
    "PORTA_ROTEADOR = ?, " +
    "USER_ROTEADOR = ?, " +
    "PASSWORD_ROTEADOR = ? " +
    “WHERE IDROTADORES = ?”;

    public RouterDAO() throws Exception {
    factory = new DAOFactory();
    }

    public RouterBean selectRouter(RouterBean bean) throws Exception {
    preparedStatement = factory.preparedStatement(selectRouter);
    RouterBean routerBean = new RouterBean();
    synchronized (preparedStatement) {
    preparedStatement.setInt(1, bean.getId());
    resultSet = preparedStatement.executeQuery();
    while (resultSet.next()) {
    routerBean.setId(resultSet.getInt(1));
    routerBean.setEndereco(resultSet.getString(2));
    routerBean.setPort(resultSet.getInt(3));
    routerBean.setUser(resultSet.getString(4));
    routerBean.setPassword(resultSet.getString(5));
    }
    }
    return routerBean;
    }

    public boolean addRouter(RouterBean bean) throws Exception {
    int resultado;
    preparedStatement = factory.preparedStatement(insertRouter);
    synchronized (preparedStatement) {
    preparedStatement.setInt(1, countRouters());
    preparedStatement.setString(2, bean.getEndereco());
    preparedStatement.setInt(3, bean.getPort());
    preparedStatement.setString(4, bean.getUser());
    preparedStatement.setString(5, bean.getPassword());
    resultado = preparedStatement.executeUpdate();
    if (resultado == 1) {
    return true;
    } else {
    return false;
    }
    }
    }

    public boolean deleteRouter(RouterBean bean) throws Exception {
    int resultado;
    preparedStatement = factory.preparedStatement(deleteRouter);
    synchronized (preparedStatement) {
    preparedStatement.setInt(1, bean.getId());
    resultado = preparedStatement.executeUpdate();
    if (resultado == 1) {
    return true;
    } else {
    return false;
    }
    }
    }

    public boolean updateRouter(RouterBean bean) throws Exception {
    throw new UnsupportedOperationException(“Not supported yet.”);
    }

    public Collection allRouters() throws Exception {
    RouterBean bean = null;
    vector = new Vector();
    preparedStatement = factory.preparedStatement(selectAllRouters);
    synchronized (preparedStatement) {
    resultSet = preparedStatement.executeQuery();
    while (resultSet.next()) {
    bean = new RouterBean();
    bean.setId(resultSet.getInt(1));
    bean.setEndereco(resultSet.getString(2));
    bean.setPort(resultSet.getInt(3));
    bean.setUser(resultSet.getString(4));
    bean.setPassword(resultSet.getString(5));
    vector.addElement(bean);
    }
    }
    return vector;

    }

    private int countRouters() throws SQLException {
    int total = 0;
    preparedStatement = factory.preparedStatement(countRouters);
    synchronized (preparedStatement) {
    resultSet = preparedStatement.executeQuery();
    while (resultSet.next()) {
    total = resultSet.getInt(1);
    }
    }
    return total++;
    }

    public static void main(String[] args) {
    boolean b = false;
    try {
    RouterDAO dAO = new RouterDAO();
    RouterBean bean = new RouterBean();
    bean.setEndereco(“192.168.0.1”);
    bean.setPort(22);
    bean.setUser(“root”);
    bean.setPassword(“rootsad”);
    b = dAO.addRouter(bean);
    System.out.println(b);
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
    [/code]

Alguem poderia me ajudar?

Obrigado

Rafael

É por que, como o comando delete, o comando INSERT te devolve apenas um inteiro e você esta tentando pergar outros itens.

Pra mim método insert, update, delete é VOID

tem que ser otimista…

se falhar gospe a Exception pra mim que eu capturo na outra camada.

de preferência na client com uma mainSuperAction (o neme vc inventa, a parte mais legal é esse criar o nome) que é extendida por todas as Action

seu código só vai ter um try catch onde vc vai tratar todas as Exception elegantemente.

mandando pro user mensagem do tipo

“Querido usuário não foi possível efetuar sua operção tente mais tarde !”

e.printStackTrace();
isso é horrível

É peidar, sentir que pesou a cueca e mesmo assim sair de cueca na rua pra todo mundo ver a freiada.

Mas eu estou tentando setar o preparedstatement com os valores do meu bean que estou passando no metodo addRouter e a linha 64 está dando erro, como eu corrijo isso?

bROW KD A CONEXÃO ?

Ela começa quando eu crio minha referencia de objeto na linha 39

factory = new DAOFactory();