Индекс параметра вне диапазона в SQL Java используйте phmyadmin - PullRequest
0 голосов
/ 24 апреля 2020

Моя таблица версий имеет 8 атрибутов, все заполняются при вставке проекта (отношение один ко многим, проекты - версии). Почему я получаю эту ошибку, если у меня есть полные поля? Или как значения загружаются в таблицу (версию), которая зависит от другого (проекта)?

(codeProject - FK -Cascade -)

Индекс параметра вне диапазона (8> число параметров, что составляет 7). Ошибка в версии DAO

public class VersionDAO {
    ConexionSQL conectar = new ConexionSQL();
    Connection con;
    PreparedStatement ps;
    ResultSet rs;
    String changeVersion;

    public int insertarVer(Version ver, Proyecto pro) {
        String sql = "INSERT INTO version (idVersion, nameVersion, efficVersion, acumCases, acumFail, acumTime, contPruebas, codeProject) VALUES (?,?,?,?,?,?,?,(SELECT code FROM proyecto))";
        try { 
            con = conectar.getConexionSQL();
            ps=con.prepareStatement(sql);
            ps.setInt(1, ver.getIdversion());
            ps.setString(2, ver.getNameVersion());
            ps.setDouble(3, 0.0);
            ps.setInt(4, ver.getAcumCasos());
            ps.setDouble(5, 0.0);
            ps.setDouble(6, 0.0);
            ps.setInt(7, ver.getContPruebas());
            ps.setInt(8, pro.getCod());
            ps.executeUpdate(); 
            return 1;

        } catch(Exception e){
            e.printStackTrace();
        }
        return 0;
    }

Table Project (Proyecto in spani sh)

public class ProyectoDAO {
ConexionSQL conectar = new ConexionSQL();
Connection con;
PreparedStatement ps;
ResultSet rs;

    public int insertar(Proyecto p) {
        String sql = "INSERT INTO proyecto (code, name, status, language, duration, advance, effec) VALUES (?,?,?,?,?,?,?)";
        try {

            con = conectar.getConexionSQL();
            ps=con.prepareStatement(sql);
            ps.setInt(1, p.getCod());
            ps.setString(2, "Prueba");
            ps.setInt(3, p.getStatus());
            ps.setString(4, "PHP");
            ps.setInt(5, p.getDuracion());
            ps.setInt(6, p.getAvance());
            ps.setDouble(7, 0.0);
            ps.executeUpdate();

            return 1;

        } catch(Exception e){
            e.printStackTrace();
        }
        return 0;
    }

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

для первого кода, вместо этого вы должны получить код проекта из запроса.

//You should do something like this

public class VersionDAO {
  // all you private attributes

  public int insertarVer(Version ver, Proyecto pro) {

    // you should avoid to make any calculation or getting value directly when you set values on the PreparedStatement

    int idVersion = ver.getIdversion();
    String nameVersion = ver.getNameVersion();
    int acumCasos = ver.getAcumCasos();
    int contPruebas = ver.getContPruebas();
    int code = pro.getCode(); // get the code of you project here
    String query = "INSERT INTO version(idVersion, nameVersion, efficVersion, acumCases, acumFail, acumTime, contPruebas, codeProject) VALUES (?,?,?,?,?,?,?,?)";

    try { 
            con = conectar.getConexionSQL();
            ps=con.prepareStatement(sql);
            ps.setInt(1, id);
            ps.setString(2, nameVersion);
            ps.setDouble(3, 0.0);
            ps.setInt(4, acumCasos);
            ps.setDouble(5, 0.0);
            ps.setDouble(6, 0.0);
            ps.setInt(7, contPruebas);
            ps.setInt(8, code);
            ps.executeUpdate(); 
            return 1;

        } catch(Exception e){
            e.printStackTrace();
            return 0; // change the return position other way you will always have 0 as retrun value
        }
  }
}
0 голосов
/ 24 апреля 2020

Я вижу 7 вопросительных знаков в вашем верхнем выражении SQL, но 8 вызовов ps.setXXXX ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...