E ae galera, blz?
Estou tendo problemas com o access, tento acessar a tabela names com o seguinte código:
try {
Class.forName ( "sun.jdbc.odbc.JdbcOdbcDriver" );
Connection con =
DriverManager.getConnection ( "jdbc:odbc:Data", "", "" );
Statement stt = con.createStatement();
System.err.println ( "statement criado com sucesso" );
String consulta = "SELECT * FROM names";
ResultSet result = stt.executeQuery( consulta );
ResultSetMetaData data = result.getMetaData();
StringBuffer output = new StringBuffer();
int column = data.getColumnCount();
for ( int i = 1; i <= column; i++ )
output.append ( result.getObject ( i ) );
System.err.println ( output.toString() );
stt.close();
con.close();
}
catch ( SQLException sqlex ) {
System.err.println ( sqlex.getMessage() );
}
catch ( ClassNotFoundException cnfex ) {
System.err.println ( "Class not found" );
}
}
Edit: Esqueci de dizer o problema :oops:
Ao tentar acessar a tabela, o prog me retorna o seguinte erro:
Estado de cursor inválido.
Gostaria de saber o q causa esse problema.
[]'s
Tudo bem, mas qual o problema, o que está dando de erro?
Atenciosamente,
Paulo
Cara, pelo o que eu vi no seu código, daria para fazer assim:
String driver="seu driver";
String url="sua url";
String username="username";
String senha="password";
Class.forName(driver);
String sql="select * from names";
Connection con=DriverManager.getConnection(url,username,senha);
Statement st=con.createStatement();
ResultSet rs=st.executeQuery(sql);
//Pega a quantidade de colunas
int colunas=rs.getMetaData().getColumnCount();
StringBuffer output=new StringBuffer();
while(rs.next()){
for(int i=1;i<=colunas;i++){
output.append(rs.getObject(i));
}
}
st.close();
rs.close();
con.close();
}
Q estranho…
Meu ResultSet parece q naum tem valor…
Mesmo eu tendo adicionado alguns itens a minha tabela, ao passar pelo :
while ( rs.next() )
o programa pula essa parte como se o resultado fosse false, mas a tabela contém valores!!!
Alguém tem mais alguma idéia?
_fs
#5
Tenta fazer um rs.beforeFirst() ou rs.first()
ps: Quando vc for postar codigo, coloque-o entre as tags [ code] e [ /code], assim ele ficará endentado.
[quote=LIPE]Tenta fazer um rs.beforeFirst() ou rs.first()
ps: Quando vc for postar codigo, coloque-o entre as tags [ code] e [ /code], assim ele ficará endentado.[/quote]
Usar essese métodos como?
Experimente este exemplo:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
public class Exemplo012
{
public static void main(String args[])
{ try
{ Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
}
catch(ClassNotFoundException ce)
{ System.out.println(“Erro (Conexao1):”+ce.getMessage());
}
try
{ String caminho=“c:/arq.mdb”;
String url=“jdbc:odbc:DBQ=”+caminho+";Driver={Microsoft Access Driver (*.mdb)}";
String username="";
String senha="";
String sql="select * from names";
Connection con=DriverManager.getConnection(url,username,senha);
Statement st=con.createStatement();
ResultSet rs=st.executeQuery(sql);
// Pega a quantidade de colunas
int colunas=rs.getMetaData().getColumnCount();
StringBuffer output=new StringBuffer();
while(rs.next())
{ for(int i=1;i<colunas;i=i+4)
{ System.out.println(output.append(rs.getObject(i)+" "+rs.getObject(i+1)+" "+rs.getObject(i+2)+" "+rs.getObject(i+3)+" "+rs.getObject(i+4)));
}
}
rs.close();st.close();con.close();
}
catch(SQLException se)
{ System.out.println(“Erro (Conexao2):”+se.getMessage());
}
}
}
falow
Experimente este exemplo:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
public class Exemplo012
{
public static void main(String args[])
{ try
{ Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);
}
catch(ClassNotFoundException ce)
{ System.out.println(“Erro (Conexao1):”+ce.getMessage());
}
try
{ String caminho=“c:/arq.mdb”;
String url=“jdbc:odbc:DBQ=”+caminho+";Driver={Microsoft Access Driver (*.mdb)}";
String username="";
String senha="";
String sql="select * from names";
Connection con=DriverManager.getConnection(url,username,senha);
Statement st=con.createStatement();
ResultSet rs=st.executeQuery(sql);
// Pega a quantidade de colunas
int colunas=rs.getMetaData().getColumnCount();
StringBuffer output=new StringBuffer();
while(rs.next())
{ for(int i=1;i<colunas;i=i+4)
{ System.out.println(output.append(rs.getObject(i)+" "+rs.getObject(i+1)+" "+rs.getObject(i+2)+" "+rs.getObject(i+3)+" "+rs.getObject(i+4)));
}
}
rs.close();st.close();con.close();
}
catch(SQLException se)
{ System.out.println(“Erro (Conexao2):”+se.getMessage());
}
}
}
falow
Isso aqui tah mto estranho :sad:
To usando esse código:
try {
Class.forName ( "sun.jdbc.odbc.JdbcOdbcDriver" );
Connection con =
DriverManager.getConnection ( "jdbc:odbc:Teste", "", "" );
Statement stmt = con.createStatement();
String query = "SELECT COF_NAME, TOTAL FROM COFFEES " +
"WHERE COF_NAME LIKE 'Colombian'";
ResultSet rs = stmt.executeQuery ( query );
while (rs.next()) {
String s = rs.getString(1);
int n = rs.getInt(2);
System.out.println(n + " pounds of " + s + " sold to date.");
}
rs.close();
stmt.close();
con.close();
}
Aparentemente está certo neh?
Porém, quando execute, ele passa direto pelo meu while, como se rs.next() fosse false.
Parece, q quando eu re-executo meu programa, o cursor não volta pra posição 0.
Por q isso, deveria voltar pra 0 ?
Como eu mudo o ResultSet pra q ele permita q eu ande com o cursor tanto pra frente quanto pra trás?
ps: estou usando o access97.
Valeu