Erro em select em uma tabela vazia

6 respostas
ico1

Falae galera, estou fazendo uma pequena aplicação com SQL Server, porém estou com um problema que não descobri o que é, quando a tabela está vazia, ela dá erro de sql, quando tem um registro, vai normalmente, segue o código e o erro:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            c = DriverManager.getConnection("jdbc:odbc:Driver=SQL Server;Server=FUSCOPC;Database=master");
PreparedStatement p;
ResultSet rs;
...

 try {
            p = c.prepareStatement("SELECT func_id,func_nome,func_cargo,func_telefone FROM funcionarios ORDER BY func_nome",ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            
            rs = p.executeQuery();
            if(rs.next())
            {
                montarTabela();
            }
        } catch (SQLException ex) {
            
            JOptionPane.showMessageDialog(null,ex.getMessage());
        }

Quando a tabela está vazia, dá o seguinte erro:

[Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'FUNCIONARIOS'.

Mas quando tem algum registro na tabela vai normlmanete, muito estranho. :?

6 Respostas

extreme_z3r0

Amigo, não sei se tem algo a ver… mais pq vc ta usando um prepared statement. Voce não passa nenhum parametro pra ele, ja tenteou usar um statement normal?

ico1

extreme z3r0,

Nesse select não, mas depois o usuário poderá fazer condições de pesquisa.

Creio que não tenha nada ver, porque eu consigo executar normalmente o select quando há algum registro na tabela, mas pode tentar a sua sugestão e ver no que dá, depois eu posto o resultado, obrigado.

joede.fadel

utilize ex.printStackTrace(); e poste o erro q ta dando é mais facil identicar o erro por ele

ico1

joede.fadel:
utilize ex.printStackTrace(); e poste o erro q ta dando é mais facil identicar o erro por ele

Ola joede, segue o print:

<blockquote>java.sql.SQLException: [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name FUNCIONARIOS.

at sun.jdbc.odbc.JdbcOdbc.createSQLException(JdbcOdbc.java:6957)

at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7114)

at sun.jdbc.odbc.JdbcOdbc.SQLExecDirect(JdbcOdbc.java:3110)

at sun.jdbc.odbc.JdbcOdbcStatement.execute(JdbcOdbcStatement.java:338)

at sun.jdbc.odbc.JdbcOdbcStatement.executeQuery(JdbcOdbcStatement.java:253)

at sun.jdbc.odbc.JdbcOdbcResultSet.calculateRowCount(JdbcOdbcResultSet.java:6353)

at sun.jdbc.odbc.JdbcOdbcResultSet.initialize(JdbcOdbcResultSet.java:155)

at sun.jdbc.odbc.JdbcOdbcStatement.getResultSet(JdbcOdbcStatement.java:424)

at sun.jdbc.odbc.JdbcOdbcPreparedStatement.executeQuery(JdbcOdbcPreparedStatement.java:93)

at FrmFuncionario.(FrmFuncionario.java:64)

at Principal.mnFuncionariosActionPerformed(Principal.java:218)

at Principal.access$200(Principal.java:14)

at Principal$3.actionPerformed(Principal.java:125)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)

at javax.swing.AbstractButton.doClick(AbstractButton.java:357)

at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:1225)

at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:1266)

at java.awt.Component.processMouseEvent(Component.java:6134)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)

at java.awt.Component.processEvent(Component.java:5899)

at java.awt.Container.processEvent(Container.java:2023)

at java.awt.Component.dispatchEventImpl(Component.java:4501)

at java.awt.Container.dispatchEventImpl(Container.java:2081)

at java.awt.Component.dispatchEvent(Component.java:4331)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4301)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3965)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3895)

at java.awt.Container.dispatchEventImpl(Container.java:2067)

at java.awt.Window.dispatchEventImpl(Window.java:2458)

at java.awt.Component.dispatchEvent(Component.java:4331)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)</blockquote>
ico1

Desculpem o post duplicado.

Eu achei o erro, é por causa dos dois parametros no preparedStatement: ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY

Eu tava colocando isso porque eu estava me baseando em um exemplo, e tinha colocado também, tirei e não deu problema, irei pesquisar.

Mas se alguém já saber o que significa, eu agradeço uma explicação informal. Obrigado.

joede.fadel

esses dois parametros perminte vc percorrer o resultset de qualquer forma utilzando do next, previus, last, first e não apenas o next

Criado 26 de outubro de 2008
Ultima resposta 28 de out. de 2008
Respostas 6
Participantes 3