Fiz uma classe de conexão com o SQL Server, mas estou tentando executar para ver se esta funcionando corretamente…
Mas acho que esta errado alguma coisa e não estou encontrando o erro.
importjava.sql.*;publicclassConnectionFactory{privatestaticfinalStringurl="jdbc:microsoft:sqlserver://127.0.0.1:1433";privatestaticfinalStringdriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";privatestaticfinalStringusuario="sa";privatestaticfinalStringsenha="";publicstaticConnectiongetConnection()throwsSQLException{try{Class.forName(driver);System.out.println("Conectando ao banco");returnDriverManager.getConnection(url,usuario,senha);}catch(ClassNotFoundExceptione){thrownewSQLException(e.getMessage());}catch(SQLExceptione){thrownewSQLException(e.getMessage());}}publicstaticvoidmain(String[]args)throwsSQLException{ConnectionFactoryconection=newConnectionFactory();conection.getConnection();}}
Desculpe a ignorancia, mas é q estou começando em Java agora…
Tentei incluir a alteração que vc sugeriu(e muito bem sugerida), mas mesmo assim tá com algum errinho…
importjava.sql.*;publicclassConnectionFactory{privatestaticfinalStringurl="jdbc:microsoft:sqlserver://127.0.0.1:1433";privatestaticfinalStringdriver="com.microsoft.jdbc.sqlserver.SQLServerDriver";privatestaticfinalStringusuario="sa";privatestaticfinalStringsenha="";publicstaticConnectiongetConnection()throwsSQLException{try{Class.forName(driver);System.out.println("Conectando ao banco");returnDriverManager.getConnection(url,usuario,senha);}catch(ClassNotFoundExceptione){thrownewSQLException(e.getMessage());}catch(SQLExceptione){thrownewSQLException(e.getMessage());}}publicstaticvoidmain(String[]args){Connectionconn=null;try{conn=ConnectionFactory.getConnection();}catch(Exceptione){e.printStackTrace();}finally{try{if(conn!=null)conn.close();}catch(Exceptione}{e.printStackTrace();}}}}
Poste o stack trace da exceção (o texto que aparece no console), assim vai ser possível te ajudar.
O bloco finally é executado independente do sucesso ou não do que ocorre no bloco try e catch. Por exemplo:
RecursoCarorecurso=null;try{
recurso=abrirRecurso(); // sucessooperacaoPerigosa.executar(); // erro, vai para o catch
}
catch(Exceptione){
e.printStackTrace(); // erro é impresso
}
finally{
if(recurso!=null)//seorecursofoiinicializadocomsucessorecurso.close(); // fecha o recurso caro que não pode ficar aberto
}
Ou seja, mesmo que alguma coisa dê errado, os recursos caros (como um objeto Connection) são finalizados mesmo assim.
Sempre feche a conexão. Abra-a quando precisa e feche-a assim que possível.
O driver JTDS para Sql Server é comprovadamente melhor que o driver da Microsoft Uso e recomendo. http://jtds.sourceforge.net/
E, sério, não peça desculpas por ignorância não há culpa em algo desse tipo hehe
tifyzinha
Lipe, muito obrigada pelo seu apoio e incentivo.
08/08/2005 15:10:08 java.util.jar.Attributes read
WARNING: Duplicate name in Manifest: Class-Path
08/08/2005 15:10:08 java.util.jar.Attributes read
WARNING: Duplicate name in Manifest: Class-Path
08/08/2005 15:10:08 java.util.jar.Attributes read
WARNING: Duplicate name in Manifest: Class-Path
08/08/2005 15:10:08 java.util.jar.Attributes read
WARNING: Duplicate name in Manifest: Class-Path
08/08/2005 15:10:08 java.util.jar.Attributes read
WARNING: Duplicate name in Manifest: Class-Path
08/08/2005 15:10:08 java.util.jar.Attributes read
WARNING: Duplicate name in Manifest: Class-Path
08/08/2005 15:10:08 java.util.jar.Attributes read
WARNING: Duplicate name in Manifest: Class-Path
java.lang.NoClassDefFoundError: com/microsoft/jdbc/base/BaseDriver
at java.lang.ClassLoader.defineClass0(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at br.com.infoway.modelo.factory.ConnectionFactory.getConnection(ConnectionFactory.java:13)
at br.com.infoway.modelo.factory.ConnectionFactory.main(ConnectionFactory.java:28)
Exception in thread "main"
Legal, mas eu preciso colocar um outro comando de try catch dentro do finaly???
Esse conceito de abrir e fechar a conexão eu não entendo…
por exemplo, no asp naum se fecha as conexoes até todas as oporações serem realizadas…é eprocessados em paralelo…
Pq eu tenho a necessidade de fechar e abrir SEMPRE uma conexão???
Não posso deixar aberta e fecha-la somente qdo eu sair da aplicação???
Vou experimentar!
Obrigada mesmo…de coração!!!
:oops: :oops: :oops: :oops: :oops: :oops: :oops:
_fs
Agora o problema pode ser resolvido
Falta o jar do driver no classpath da sua aplicação. Declare a biblioteca no manifest. Se esta biblioteca já está declarada o problema provavelmente tem a ver com este warning:
WARNING:DuplicatenameinManifest:Class-Path
Neste caso precisa pois o fechamento do objeto Connection também pode lançar exceções. Para evitar colocar esse código feio de try/catch/finally/try/catch o tempo todo, pode inserir mais um método em sua classe ConnectionFactory:
Você pode sim executar blocos de comandos próximos com uma mesma Connection. Isso é recomendado até. Exemplo:
Connectionconn=ConnectionFactory.getConnection();// executa um update// executa um insert// deleta algumas coisasConnectionFactory.closeConnection(conn);
Quanto a deixá-la aberta, é ruim. Mesmo que você tenha certeza que apenas uma conexão vai ficar aberta, não é legal. O que pode acontecer é daqui algumas semanas você voltar ao fórum falando que o servidor cai toda hora por causa de memória, ou que a aplicação fica muito lenta no cliente
Falta o jar do driver no classpath da sua aplicação. Declare a biblioteca no manifest. Se esta biblioteca já está declarada o problema provavelmente tem a ver com este warning:
Code:
WARNING: Duplicate name in Manifest: Class-Path
Lipe, primeiro…
Como eu coloco o jar no classpath??? Eu preciso apenas adicionar como external jar???
Se for isso, já esta feito!
O que é Manifest???
Como ele poderia estar duplicado??
:lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol:
tifyzinha
Como eu faço???
bjos
_fs
Antes de mais nada, sua aplicação é web ou não? Esta rodando o programa a partir da IDE ou não?
tifyzinha
Aplicação web sim…mas eu só uso o método main pra testar a conexão…
Estou usando Eclipse 3.1…
_fs
Ok, então duas coisas:
No package-explorer, botão direito no seu projeto >> properties >> java build path >> no painel da direita clique em ‘add external JARs…’ e encontre o jar com o driver.
Após isso para sua aplicação também funcionar fora do Eclipse, adicione o JAR do driver dentro da pasta WEB-INF/lib.
oliveirarenan
Lipe,
Achei interessante esse drive JTDS.
Ele se aplica ao SQL Server???
E qual é a o desempenho dele?
E para a minha conexão, qual é o endereço do driver, url, etc??