SQLException

Olá, boa tarde!

Estou desenvolvendo um sistema em JSP, utilizando MVC, que utiliza o código abaixo para inserção, o problema é que não sei qual erro tem nessa String pois sempre que executo ele cai no SQLException =/

Segue:

if (s.equals("Incluir")) {
            setSql("INSERT INTO Registros (" +
                    "usuarioOs, " +
                    "solicitanteOs, " +
                    "controleOs, " +
                    "detOs, " +
                    "tituloOs, " +
                    "celulaOs, " +
                    "aberturaOs, " +
                    "prazoOs, " +
                    "comentOs, " +
                    "distOs) Values ("+
                    "'" + getUsuarioOs() + "'," +
                    "'" + getSolicitanteOs() + "'," +
                    "'" + getControleOs() + "'," +
                    "'" + getDetOs() + "'," +
                    "'" + getTituloOs() + "'," +
                    "'" + getCelulaOs() + "'," +
                    "'" + getAberturaOs() + "'," +
                    "'" + getPrazoOs() + "'," +
                    "'" + getComentOs() + "'," +
                    "'" + getDistOs() + "'" +
                    ")");                
            try {
                st.executeUpdate(getSql());
                limpar();
                setMensagem("Operação realizada com sucesso!");
            } catch (SQLException ex) {
                setMensagem("Operação cancelada! " + getSql());
            }
        }

Dese já, obrigado pela ajuda

Veja a definição da sua tabela no SQL; deve ser que alguns dos campos são numéricos, mas você está achando que todos são string.

todos os campos foram definidos como “varchar” na tabela =/

Faça-nos um favor, e mostre o resultado de “ex.printStackTrace” (no catch de SQLException).

E faça um a você mudando o código e usando PreparedStatement.

Segue:

java.sql.SQLException: Field 'statusOs' doesn't have a default value
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1056)
        at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3376)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3308)
        at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1837)
        at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1961)
        at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2537)
        at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1564)
        at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1485)
        at com.tiagoandrade.os.dao.DaoRegistros.persistencia(DaoRegistros.java:51)
        at org.apache.jsp.fregistros_jsp._jspService(fregistros_jsp.java:78)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:613)

Eu prefiro não usar o Prepared pois posso controlar as variáveis mais “conscientemente” :slight_smile:

Cadê o controle consciente? Acho que você não botou ele (o statusOs) na lista do insert.

Não… o ex.print… mostrou um erro que estava direcionado não somente ao statusOs… percebi isso após alterar o Default Value na tabela SQL. Daí corrigi para as demais variáveis e funcionou :slight_smile:
A questão de utilizar ou não o prepared statement não interfere diretamente nessa discussão, seria apenas mais um fator a ser discutido… porém creio que essa opção vai de acordo com o programador e também com as facilidades que isso pode contemplar para ele próprio, ou seja, convém não se estabelecer esse tipo de padrão e sim adequar ao que te permite aumentar a eficiência.

Obrigado a todos :slight_smile: