Dúvida sobre navegação em registros com JDBC

3 respostas
C
Tenho um programa que faz acesso a uma base acess via jdbc, em tela tenho quatro botões, para efetuar a navegação nos registros: Tipo : << < > >> First Prev Next Last Como eu faço para criar, os comandos SQL e passar via string para o ResultSet???? Alguém poderia me passar um exemplo da sintase destes comandos. Ou posso utilizar os comando first(),previus(),next() e last(). E por exemplo se eu utitilizar estes comandos e for para o último registro e ao clicar no botão prev o resultSet vai conseguir se posicionar no registro anterior???? Eu fiz o seguinte: Fiz o seguinte
String url = &quot;jdbc&#58;odbc&#58;dbsample&quot;; 
Connection con; 
Statement stmt; 
String msg; 

try &#123; 
Class.forName&#40;&quot;sun.jdbc.odbc.JdbcOdbcDriver&quot;&#41;; 

&#125;catch &#40;ClassNotFoundException e&#41; &#123; 

System.err.print&#40;&quot;ClassNotFoundException&#58; &quot;&#41;; 
System.err.print&#40;e.getMessage&#40;&#41;&#41;; 


&#125; 

try &#123; 
con = DriverManager.getConnection&#40;url, &quot;user&quot;, &quot;password&quot;&#41;; stmt = con.createStatement&#40;&#41;; 

&#125;catch&#40;SQLException ex&#41;&#123; 

msg=ex.getMessage&#40;&#41;; 
JOptionPane.showMessageDialog&#40;null,msg,&quot;Erro&quot;,JOptionPane.ERROR_MESSAGE&#41;; 


&#125; 
ResultSet uprs = stmt.executeQuery&#40;&quot;SELECT * FROM Departamento&quot;&#41;; 
/*** Aqui carrega os campos de tela com o valor do primeiro registro ***/ 
while &#40;uprs.first&#40;&#41;&#41;&#123; 
this.JTextField1.setText&#40;uprs.getString&#40;&quot;COD_DEPTO&quot;&#41;&#41;; 
this.JTextField2.setText&#40;uprs.getString&#40;&quot;DESC_DEPTO&quot;&#41;&#41;; 
&#125;

[color="red"]E aparece o seguinte erro de SQL:
java.sql.SQLException: Result set type is TYPE_FORWARD_ONLY
at sun.jdbc.odbc.JdbcOdbcResultSet.first(Unknown Source)[/color]
Mudei para
while (uprs.next()){
this.JTextField1.setText(uprs.getString("COD_DEPTO"));
this.JTextField2.setText(uprs.getString("DESC_DEPTO"));

break;

ai funcionol tráz o primeiro registro quando carrego a tela, mas ai vem a outra parte do meu problema, tenho os botões em tela << < > >>, para que o usuário possa navegar para frente e para trás nos registros e ai os comandos first(), previus(), next() e last() vão funcionar???????
[size="11"][color="red"]* Editado: Lembre-se de utilizar BBCode em seus códigos - Ratinho[/color][/size] :joia:

3 Respostas

C

Olá carlos_valentini,

Na hora de criar seu Statement, tente assim:

Até mais,

C
Fiz as modificações conforme sugestão e no eento do botão next implementei o seguinte código:

public void actionPerformed(ActionEvent source) {

// TODO Auto-generated method stub

if (source.getSource()==(JButton) bt_next)

{
try {
			while (uprs.next()){
				this.JTextField1.setText(uprs.getString("COD_DEPTO"));
				this.JTextField2.setText(uprs.getString("DESC_DEPTO"));
				break;

			}
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    }
	
}
O seguinte erro aparece no console do eclipse:

[color=“red”]java.sql.SQLException: [Microsoft][ODBC Driver Manager] Estado de cursor inválido

at sun.jdbc.odbc.JdbcOdbc.createSQLException(Unknown Source)

at sun.jdbc.odbc.JdbcOdbc.standardError(Unknown Source)

at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(Unknown Source)

at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(Unknown Source)

at sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)

at sun.jdbc.odbc.JdbcOdbcResultSet.getString(Unknown Source)

at cd0107.actionPerformed(cd0107.java:184)

at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)

at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)

at javax.swing.DefaultButtonModel.setPressed(Unknown Source)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)

at java.awt.Component.processMouseEvent(Unknown Source)

at javax.swing.JComponent.processMouseEvent(Unknown Source)

at java.awt.Component.processEvent(Unknown Source)

at java.awt.Container.processEvent(Unknown Source)

at java.awt.Component.dispatchEventImpl(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)

at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)

at java.awt.Container.dispatchEventImpl(Unknown Source)

at java.awt.Window.dispatchEventImpl(Unknown Source)

at java.awt.Component.dispatchEvent(Unknown Source)

at java.awt.EventQueue.dispatchEvent(Unknown Source)

at java.awt.EventDispatchThread.pumpOneEventForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.pumpEvents(Unknown Source)

at java.awt.EventDispatchThread.run(Unknown Source)[/color]
K

Carlos, ao invés do while, tente com if, algo assim:

if &#40; uprs.next&#40;&#41; &#41; &#123;
    this.JTextField1.setText&#40;uprs.getString&#40;"COD_DEPTO"&#41;&#41;;
    this.JTextField2.setText&#40;uprs.getString&#40;"DESC_DEPTO"&#41;&#41;;
&#125; else &#123;
    JOptionPane.showMessageDialog&#40;null, "Ultimo registro!"&#41;;
    uprs.previous&#40;&#41;;
&#125;

Dessa forma, o RseultSet nunca atingirá o seu ultimo registro + 1.

Tente isso, e qualquer coisa volte a posta.

[]s

Criado 3 de julho de 2006
Ultima resposta 5 de jul. de 2006
Respostas 3
Participantes 3