Exception in thread “main” java.lang.Exception: Native SSPI library not loaded. Check the java.library.path system property.
at net.sourceforge.jtds.util.SSPIJNIClient.getInstance(SSPIJNIClient.java:89)
at WScmlt.conexao(WScmlt.java:45)
at WScmlt.main(WScmlt.java:90)
que erro é esse?
estou tentando usar autenticação Windows no banco SqlServer
parece que a classe não achou o “Main”
post o codigo para gente ajudar vc
thokk
Janeiro 19, 2007, 3:16pm
#3
Creio eu que o main esta retornando retornando null e não esta recebendo o valor que vc quer que ele passe. Talvez se vc amarrar assim:
If (condição == null || condição.equals == (""))(
o valor de main
)
Creio eu que daria certo. Mas acho eu que vc deveria colocar o codigo para darmos uma olhada!
Hanjo_
Janeiro 19, 2007, 3:19pm
#4
cara… eu acho que uma das API´s, que vc está usando no main da sua classe ou em uma das classes q vc está instanciando dentro do main, não está carregada
espero ter ajudado
poxa, e o pior é q está carregada, olha so…
import java.sql.*;
import net.sourceforge.jtds.jdbcx.JtdsDataSource;
import net.sourceforge.jtds.util.SSPIJNIClient;
public class WScmlt{
ResultSet rs;
Statement st;
Connection con;
String sql,user,senha;
JtdsDataSource ds;
byte[] ntlm1;
private byte[] ntlm2;
private byte[] ntlm3;
SSPIJNIClient sspiJNIClient;
public WScmlt(){
super();
}
public void conexao() throws Exception{
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver");
// Connection con = DriverManager.getConnection("jdbc:jtds:sqlserver://srv_sql_02:1433/SqlDesMissaoOficial");
ds = new JtdsDataSource();
ds.setDescription("Viagem");
//MS SQL Server Host Name
ds.setServerName("srv_sql_02");
//Port
ds.setPortNumber(1433);
//Database Name
ds.setDatabaseName("SqlDesMissaoOficial");
boolean ntlmAuthSSO = (user == null || user.length() == 0);
if (ntlmAuthSSO) {
sspiJNIClient = SSPIJNIClient.getInstance();
ntlm1 = sspiJNIClient.invokePrepareSSORequest();
}
ntlm3 = sspiJNIClient.invokePrepareSSOSubmit(ntlm2);
con = ds.getConnection();
System.out.println("conectou");
st = con.createStatement();
sql = "select * from Viagem";
while( rs.next() ) {
System.out.println(rs.getString("IDEVIAGEM") );
}
} catch (SQLException e) {
System.out.println("Erro");
e.printStackTrace();
}
try {
rs.close();
st.close();
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void main(String args[]) throws Exception{
WScmlt ws = new WScmlt();
try {
ws.conexao();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Verifique se não tem alguma DLL do JTDS, tente coloca-la em windows/system32
amigo faz o teste, e post o erro que vai aparecer
1- coloque sua conexão com o BD dentro do construtor da classe
2 -Apenas deixe
public static void main(String args[]) {
Hanjo_
Janeiro 19, 2007, 3:29pm
#8
veja também se não tem que carregar nenhum .jar do driver no projeto!
ejunior
Janeiro 19, 2007, 3:53pm
#9
tbm acho q vc tem q adicionar o .jar no path das bibliotecas.
Hanjo_
Janeiro 19, 2007, 4:03pm
#10
é cara… da uma procurada por ai e ve se vc não tem q adicionar algum .jar no seu projeto!
Segundo esse post que parece ser de alguém com o mesmo problema que o seu, esse erro tem relação com autenticação de usuário no ms sql server.
Tente fazer a conexão como ele disse que conseguiu:
[code]Class.forName(driverClass).newInstance();
String url = jdbcURL ;
conn= DriverManager.getConnection(url,user,password);[/code]
Boa sorte e flw
[edit]
Ah, mas se o que vc quer é realmente usar o usuário logado no windows para entrar no bd, aí isso que está no faq do jtds pode ajudar:
jTDS uses its native Single-Sign-On library and logs in with the logged Windows user’s credentials (for this to work one would obviously need to be on Windows, logged into a domain, and also have the SSO library installed – consult README.SSO in the distribution on how to do this).
Ou seja, instale essa biblioteca vendo o README.SSO pra ver como que faz isso.
[/edit]