pedrotuga Posted March 14, 2006 at 11:00 PM Report #18332 Posted March 14, 2006 at 11:00 PM epa... nao percebo um c.... disto... que raio faz esta porra? "Returns the Class object associated with the class or interface with the given string name, using the given class loader" esta porra eh chines para mim... o k eh o class loader? Alguma expliacao melhor que esta?
Destineo Posted March 15, 2006 at 10:30 AM Report #18391 Posted March 15, 2006 at 10:30 AM Oi pedroTuga, A resposta que procuras encontra-se em http://java.sun.com/j2se/1.4.2/docs/api/java/lang/Class.html e serve para instanciares uma class simplesmente através do nome. Este link tem um exemplo simples que mostra como instanciar a classe "java.lang.Thread" através do nome, ao invés de fazer algo como new Thread(). Outro situação onde isto faz sentido é a seguinte: Tens um programa que se liga a uma base de dados. Queres que este programa se liga a uma BD usando qualquer driver que o utilizador quiser, mas sem que o utilizador tenha que recompilar o código. Se tiveres uma linha de código que instancia uma classe através de um parametro que o utilizador configura, podes ter a seguinte linha de código para carregar QUALQUER driver de BD e executar um método seu. Class.forName(driverClass).newInstance(); onde driverClass é uma String com o nome do driver. - Destineo - Destineo
pedrotuga Posted March 17, 2006 at 01:31 AM Author Report #18602 Posted March 17, 2006 at 01:31 AM Estou a ver... mas nao me parece assim uma coisa taaaaaaaaao pratica... um ifzito resolvia isso na ausencia do forname... mas ta-se... sou demasiado piquinhas em relacao ao java
Destineo Posted March 17, 2006 at 09:07 AM Report #18606 Posted March 17, 2006 at 09:07 AM Não ... um ifzito não resolvia. Como é que vais ter 10 ou 15 ifs para coisas que nem sequer conheces ou sabes que existem. No caso do driver JDBC, não existe em lado nenhum uma lista exaustiva sobre todos, logo não irias conseguir ter um if para cada um. E vê as coisas por este prisma, podes instanciar uma classe QUALQUER simplesmente através do nome. Acredita que vai haver situações onde um dia darás graças por haver uma funcionalidade como esta 🙂 Cumps - Destineo
pedrotuga Posted March 17, 2006 at 09:25 PM Author Report #18634 Posted March 17, 2006 at 09:25 PM nao percebo isto entao. isto serve para criar um objecto certo? eh k ja li e reli e continuo sem perceber que raio é que isto faz. tipo... qual é a diferenca entre new classname e forname(classname) ps: n sei se algum dia vou aprender java
Destineo Posted March 20, 2006 at 09:25 AM Report #18813 Posted March 20, 2006 at 09:25 AM Olha para o meu exemplo. Tu crias uma aplicação que faz uma ligação a uma base de dados. E queres que os utilizadores usem a aplicação com qualquer base de dados. Para te ligares a uma base de dados, precisas de criar um objecto driver de base de dados (JDBC driver por exemplo). Como não existe nenhuma forma de tu programas um new classname() para todos os drivers existentes, queres que o utilizador defina qual o driver que pretende usar através de um parâmetro. Ou seja, estás a criar uma classe com base numa variável. Desta forma, o mesmo código Class.forName(driverClass).newInstance(); permite-te criar uma instância de driver de base de dados diferente para cada driver que o utilizador quiser criar. Imagina o forName como uma forma de template, ou seja, cria uma classe do tipo className que te permite depois utilizá-la. - Destineo
pedrotuga Posted March 23, 2006 at 11:58 PM Author Report #19270 Posted March 23, 2006 at 11:58 PM deixa cá ver se eu entendi. cria um objecto de uma classe já definida por mim. Serve para por lá um nome e aquilo criar um objecto ora desta classe, ora daquela, conforme o parametro de entrada. é isso?
Destineo Posted March 24, 2006 at 09:32 AM Report #19281 Posted March 24, 2006 at 09:32 AM Sim, é isso mesmo... E já conseguiste ver o jeito que isso te permite ? Imagina que constrois uma nova classe qualquer que agora permite ligares-te a uma base de dados chinesa qualquer, basta pores lá a nova classe, e alterar o parametro de qual classe deves carregar e a aplicação funciona, sem teres de a recompilar 😉 - Destineo
xico Posted March 28, 2006 at 02:55 PM Report #19829 Posted March 28, 2006 at 02:55 PM tb tenho uma duvida em relação a este class forName estou a usar o IDE eclipse e estou a tentar desenvolver a minha 1ª aplicação em Java com Mysql já instalei o mysql 5 e pelo que percebo o que tenho que fazer em 1º é instanciar o driver certo? assim? Class.forName ("com.mysql.jdbc.Driver").newInstance(); mas dá-me este erro Unhandled exception type ClassNotFoundException isto acho que quer dizer que não encontra a classe onde tenho que por o driver, ou o que devo fazer para o encontrar?
Dabubble Posted March 28, 2006 at 04:15 PM Report #19833 Posted March 28, 2006 at 04:15 PM tb tenho uma duvida em relação a este class forName estou a usar o IDE eclipse e estou a tentar desenvolver a minha 1ª aplicação em Java com Mysql já instalei o mysql 5 e pelo que percebo o que tenho que fazer em 1º é instanciar o driver certo? assim? Class.forName ("com.mysql.jdbc.Driver").newInstance(); mas dá-me este erro Unhandled exception type ClassNotFoundException isto acho que quer dizer que não encontra a classe onde tenho que por o driver, ou o que devo fazer para o encontrar? Para pore isso a funcionar (se usas o eclipse). - Colocas a lib (o .jar) que tem o driver de MySQL dentro da pasta do projecto (normalmente coloca-se numa pasta chamada libs) - Botao direito sobre o jar e faz addToBuild path - Nao precisas da Class.forName(""), uma vez que tenhas o driver na Build Path faz Driver myDriver = new Driver(); CTRL+SHIFT+O para importares a class Driver para o teu .java
xico Posted March 30, 2006 at 02:50 PM Report #20148 Posted March 30, 2006 at 02:50 PM Obrigadão Dabubble acho que foi uma grande ajuda. Segundo o que percebi devia estar a dar, mas dá-e um erro dá uma olhadela e vê se me podes ajudar!
Dabubble Posted March 30, 2006 at 02:56 PM Report #20149 Posted March 30, 2006 at 02:56 PM quando carregas sobre os erros (barras vermelhas do lado direito) que mensagem e que ele te da?
xico Posted March 31, 2006 at 02:17 PM Report #20270 Posted March 31, 2006 at 02:17 PM Type mismatch: cannot convert from Connection to Connection
Dabubble Posted March 31, 2006 at 07:00 PM Report #20297 Posted March 31, 2006 at 07:00 PM Se reparares estas a usar uma classe de jva puro (da sun) e uma classe de mysql. Apesar de terem o mesmo nome as classes nao sao iguais. Nao deves ir buscar a ligacao ao DriverManager (que e da sun) e sim a classe Driver que e do mysql. a sintaxe e; Driver driver= new Driver();<- Classe da mysql interface da sun --> Connection conn = driver.connect("stringdeconneccao",propriedades);
xico Posted March 31, 2006 at 11:59 PM Report #20331 Posted March 31, 2006 at 11:59 PM tenho que usar todas as classes do driver, mas onde posso encontrar um manual do driver? No site do mySql nao consigo encontrar
xico Posted April 1, 2006 at 11:50 AM Report #20415 Posted April 1, 2006 at 11:50 AM ok! Estou a desesperar, para usar Class.forName ("com.mysql.jdbc.Driver").newInstance(); sem dar erro onde devo instalar o driver ou o que devo fazer??
xico Posted April 2, 2006 at 11:07 AM Report #20565 Posted April 2, 2006 at 11:07 AM ...Pois é pessoal agora percebi qual era o problema. Não posso usar classes do pacote sql sem o tratamento de erros! utizando por exemplo nome_do_metodo() throws SQLException{ .... } Fica aqui a dica se alguem esbarrar no mesmo problema
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now