2010-05-09 174 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