Inserção no MSSQL

4 respostas
F

Fiz uma conexão por ODBC. E Fiz uma GUI para inserir no BD! Mas quando clico no botão inserir exibe essa mesangem.

java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][SQL Server]The name 'Delphi' is not permitted in this context. Only constants, expressions, or variables allowed here. Column names are not permitted.
        at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6958)
        at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7115)
        at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3111)
        at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338)
        at sun.jdbc.odbc.JdbcOdbcStatement.executeUpdate(JdbcOdbcStatement.java:288)
        at janCategoria.cmdInserirActionPerformed(janCategoria.java:128)
        at janCategoria.access$100(janCategoria.java:11)
        at janCategoria$2.actionPerformed(janCategoria.java:78)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1786)
        at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1839)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)
        at java.awt.Component.processMouseEvent(Component.java:5100)
        at java.awt.Component.processEvent(Component.java:4897)
        at java.awt.Container.processEvent(Container.java:1569)
        at java.awt.Component.dispatchEventImpl(Component.java:3615)
        at java.awt.Container.dispatchEventImpl(Container.java:1627)
        at java.awt.Component.dispatchEvent(Component.java:3477)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3483)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3198)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3128)
        at java.awt.Container.dispatchEventImpl(Container.java:1613)
        at java.awt.Window.dispatchEventImpl(Window.java:1606)
        at java.awt.Component.dispatchEvent(Component.java:3477)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:456)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:201)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:145)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:137)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:100)
Erro ao executar o Insert ou ao fechar a conexão

Método para Inserir no BD

private void cmdInserirActionPerformed(java.awt.event.ActionEvent evt) {
        Conexao.Conecta conecta = new Conecta();
        Statement stmt = null;
        int c = 3;
        String inserir = "insert into Categoria(codigo,descricao) values (" + c + "," + txtNome.getText() + ")";
                
        try{
            stmt = conecta.getConnection().createStatement();
            stmt.executeUpdate(inserir);
            stmt.close();
            conecta.closeConnection();
        } catch (SQLException e) {
            e.printStackTrace();
            System.out.println("Erro ao executar o Insert ou ao fechar a conexão");
        }
    }

4 Respostas

C

parece que vc esta recebendo um erro do driver e não do seu programa:

[Micro$oft][ODBC SQL Server Driver][SQL Server]The name 'Delphi' is not permitted in this context. Only constants, expressions, or variables allowed here. Column names are not permitted.
Diogenes
String inserir = "insert into Categoria(codigo,descricao) values (" + c + "," + txtNome.getText() + ")";

Vc esqueceu de inserir aspas simples para txtNome.getText()… o campo “descricao” da tabela Categoria espera um texto…

cv1

Use PreparedStatement! Use PreparedStatement! Use PreparedStatement! :shock:

Diogenes

Utilizando o PreparedStatement que o cv falou ficaria algo como:

String strInserir = "insert into Categoria(codigo,descricao) values (?, ?)"; 
Connection conn = conecta.getConnection();
PreparedStatement pstmt = conn.prepareStatement(strInserir);

pstmt.setInt(c);
pstmt.setString(txtNome.getText());

pstmt.executeUpdate();

Bem mais limpo não acha?! :wink:

Criado 13 de agosto de 2004
Ultima resposta 13 de ago. de 2004
Respostas 4
Participantes 4