2010-05-09 573 views
-1

我正嘗試在eclipse中從java web應用程序連接到mysql。與JDBC的Java JDBC連接

Connection con = null; 

    try { 
    //DriverManager.registerDriver(new com.mysql.jdbc.Driver()); 
    Class.forName("com.mysql.jdbc.Driver"); 
    con = DriverManager.getConnection("jdbc:mysql://localhost/db_name","root" ,""); 

    if(!con.isClosed()) 
     System.out.println("Successfully connected to " + 
     "MySQL server using TCP/IP..."); 

    } catch(Exception e) { 
    System.err.println("Exception: " + e.getMessage()); 
    } finally { 
    try { 
     if(con != null) 
     con.close(); 
    } catch(SQLException e) { 
    System.out.println(e.toString()); 
    } 
    } 

我總是得到異常:com.mysql.jdbc.Driver

我已經下載了罐子http://forums.mysql.com/read.php?39,218287,220327

進口它的 「Java構建路徑/ lib目錄」

mysql版本是5.1.3之下的。

運行:

的MySQL 5.1.3(db是啓動和運行查詢形成PHP)

視窗XP

的Java EE

+1

一個教訓:請不要將sysout排除在外。改用'e.printStackTrace()'。你會得到更多的細節。 – BalusC 2010-05-10 00:56:47

回答

3

你說你放在構建路徑上的JAR,它是在運行時類路徑?你說「java EE」,所以我假設你正在部署這個作爲一個Web應用程序?在這種情況下,您需要將JDBC JAR文件放入Web應用程序的WEB-INF/lib中。

+0

萬一有web應用程序,該jar應該坐在WEB-INF中而不是在構建路徑中? 你能解釋更多嗎? 謝謝 – fatnjazzy 2010-05-10 04:42:59

+0

@fatnjazzy您會閱讀JavaEE教程嗎?它可以節省時間。 – Bozho 2010-05-10 05:16:21

0

如果該位置不在classpath中,那麼你是否已經將它添加到了你的構建配置中,然後它不會僅僅將它保存在lib文件夾中。 檢查您的.classpath文件

0

如果您下載MySQL JDBC driver,您可以通過任何Web應用程序(JBOSS,Glassfish等...)找到有關如何連接MySQL數據庫的完整文檔(第14章)。 完成配置後,您必須通過獲取服務器連接資源來從服務器獲取連接。 下面是如何從GlassFish服務器獲取連接的ressource一個示例代碼:

import java.sql.Connection; 
import java.sql.SQLException; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.ejb.Stateless; 
import javax.naming.InitialContext; 
import javax.naming.NamingException; 
import javax.sql.DataSource; 


@Stateless 
public class AppConnection { 
    private InitialContext context; 
    private DataSource source; 
    private Connection connection; 

    public AppConnection() { 
     this.initConnection(); 
    } 

    private void initConnection() { 
     try { 
      context = new InitialContext();    
      source = (DataSource)context.lookup("jdbc/MySQLDataSource"); 
      connection = source.getConnection(); 
     } catch (SQLException ex) { 
      Logger.getLogger(AppConnection.class.getName()).log(Level.SEVERE, null, ex); 
     } catch (NamingException ex) { 
      Logger.getLogger(AppConnection.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    }   

    public Connection getContextConnection() { 
     return connection; 
    } 

    public void closeContextConnection() throws SQLException { 
     if(connection != null) { 
      connection.close(); 
     } 
    } 
} 

注意,這個類是EJB和「JDBC/MySQLDataSource」在您的服務器上配置的連接的名稱。它可以注入到其他EJB中以獲取當前連接並創建其他所需對象,如StatementsResultsets