Inserção no MSSQL

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

[code]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");
    }
}[/code]

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. 
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…

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

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: