2013-04-23 47 views
0

我有一个webapp安装并正在运行,但每次我尝试使用JDBC连接连接到MySQL数据库时,我都会遇到CLASSnotFOUNDexception。Tomcat7的Eclipse Juno Java EE IDE - ClassNotFoundException

mysql-java-connector jar在我的WEB-INF/classes以及WEB-INF/lib文件夹中。它的Eclipse的构建路径,但不知何故该jar没有被部署。我已经尝试将jar分别添加到构建路径中。我一直在这里陷得很好。

有人可以指导我如何部署jar吗?

下面是我用来连接我的数据库的代码部分。

public class JdbcConnection { 
    public Connection connection; 

    public JdbcConnection(){ 
     String serverLocation = ""; 
     String db = ""; 
     String user = ""; 
     String password = ""; 

     try{ 
      InputStream in = JdbcConnection.class.getResourceAsStream("/props/database.properties") ; 
      Properties props = new Properties(); 
      props.load(in); 
      serverLocation = props.getProperty("serverLocation"); 
      db = props.getProperty("db"); 
      user = props.getProperty("user"); 
      password = props.getProperty("password"); 
      System.out.println(password + user + db + serverLocation); 
      } 
     catch(Exception e){ 
      System.out.println("error" + e); 
      }  

     createConnection(serverLocation, db, user, password); 
    } 

    public JdbcConnection(String serverLocation, String db, String user, String password){ 
     createConnection(serverLocation, db, user, password); 
    } 

这是控制台出现的错误。 抛出java.lang.ClassNotFoundException:COM/MySQL的/ JDBC /驱动器

下面是创建连接方法

public void createConnection (String serverLocation, String db, String user, String password){ 
    //register driver 
    try { 
     Class.forName("com.mysql.jdbc.Driver").newInstance(); 
    } catch (InstantiationException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (IllegalAccessException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } catch (ClassNotFoundException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
    //    hostName = "jdbc:mysql://" + serverLocation+"/"+db+"?autoReconnect=true"; 
    String hostName = "jdbc:mysql://" + serverLocation+"/"+db+"?autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8"; 
    try { 
     connection = DriverManager.getConnection(hostName,user,password); 
    } catch (SQLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 
+0

您的应用程序是一个动态的Web应用程序吗?你是否试图从eclipse(服务器)启动tomcat,或者你是否使用eclipse来生成这场战争? – 2013-04-23 20:06:45

+0

我正在部署一个动态Web应用程序,并从eclipse启动tomcat。 – Karthik 2013-04-23 20:07:56

+0

,如果打开Project> Java Resources> Libraries(在Eclipse中),你能看到mysql-java-connector吗? – 2013-04-23 20:10:22

回答

0

Tomcat的6.x和你把所有的JDBC驱动程序的JAR文件在/ lib目录下的更高要求。

将它从WEB-INF/classes(无论如何都不适用)和WEB-INF/lib中移除,重新部署您的WAR,并且您将能够转移到下一个错误。

相信我,你还在做错事。它会工作,如果你做得很好。

我建议大嚼这个类,并建立一个没有Eclipse或Tomcat的MySQL连接。如果你可以管理这一点,就可以上梯一步。

package persistence; 

import java.sql.*; 
import java.util.*; 

/** 
* util.DatabaseUtils 
* User: Michael 
* Date: Aug 17, 2010 
* Time: 7:58:02 PM 
*/ 
public class DatabaseUtils { 
/* 
    private static final String DEFAULT_DRIVER = "oracle.jdbc.driver.OracleDriver"; 
    private static final String DEFAULT_URL = "jdbc:oracle:thin:@host:1521:database"; 
    private static final String DEFAULT_USERNAME = "username"; 
    private static final String DEFAULT_PASSWORD = "password"; 
*/ 
/* 
    private static final String DEFAULT_DRIVER = "org.postgresql.Driver"; 
    private static final String DEFAULT_URL = "jdbc:postgresql://localhost:5432/party"; 
    private static final String DEFAULT_USERNAME = "pgsuper"; 
    private static final String DEFAULT_PASSWORD = "pgsuper"; 
*/ 
    private static final String DEFAULT_DRIVER = "com.mysql.jdbc.Driver"; 
    private static final String DEFAULT_URL = "jdbc:mysql://localhost:3306/party"; 
    private static final String DEFAULT_USERNAME = "party"; 
    private static final String DEFAULT_PASSWORD = "party"; 

    public static void main(String[] args) { 
     long begTime = System.currentTimeMillis(); 

     String driver = ((args.length > 0) ? args[0] : DEFAULT_DRIVER); 
     String url = ((args.length > 1) ? args[1] : DEFAULT_URL); 
     String username = ((args.length > 2) ? args[2] : DEFAULT_USERNAME); 
     String password = ((args.length > 3) ? args[3] : DEFAULT_PASSWORD); 

     Connection connection = null; 

     try { 
      connection = createConnection(driver, url, username, password); 
      DatabaseMetaData meta = connection.getMetaData(); 
      System.out.println(meta.getDatabaseProductName()); 
      System.out.println(meta.getDatabaseProductVersion()); 

      String sqlQuery = "SELECT PERSON_ID, FIRST_NAME, LAST_NAME FROM PERSON ORDER BY LAST_NAME"; 
      System.out.println("before insert: " + query(connection, sqlQuery, Collections.EMPTY_LIST)); 

      connection.setAutoCommit(false); 
      String sqlUpdate = "INSERT INTO PERSON(FIRST_NAME, LAST_NAME) VALUES(?,?)"; 
      List parameters = Arrays.asList("Foo", "Bar"); 
      int numRowsUpdated = update(connection, sqlUpdate, parameters); 
      connection.commit(); 

      System.out.println("# rows inserted: " + numRowsUpdated); 
      System.out.println("after insert: " + query(connection, sqlQuery, Collections.EMPTY_LIST)); 
     } catch (Exception e) { 
      rollback(connection); 
      e.printStackTrace(); 
     } finally { 
      close(connection); 
      long endTime = System.currentTimeMillis(); 
      System.out.println("wall time: " + (endTime - begTime) + " ms"); 
     } 
    } 

    public static Connection createConnection(String driver, String url, String username, String password) throws ClassNotFoundException, SQLException { 
     Class.forName(driver); 
     if ((username == null) || (password == null) || (username.trim().length() == 0) || (password.trim().length() == 0)) { 
      return DriverManager.getConnection(url); 
     } else { 
      return DriverManager.getConnection(url, username, password); 
     } 
    } 

    public static void close(Connection connection) { 
     try { 
      if (connection != null) { 
       connection.close(); 
      } 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 


    public static void close(Statement st) { 
     try { 
      if (st != null) { 
       st.close(); 
      } 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 

    public static void close(ResultSet rs) { 
     try { 
      if (rs != null) { 
       rs.close(); 
      } 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 

    public static void rollback(Connection connection) { 
     try { 
      if (connection != null) { 
       connection.rollback(); 
      } 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 

    public static List<Map<String, Object>> map(ResultSet rs) throws SQLException { 
     List<Map<String, Object>> results = new ArrayList<Map<String, Object>>(); 
     try { 
      if (rs != null) { 
       ResultSetMetaData meta = rs.getMetaData(); 
       int numColumns = meta.getColumnCount(); 
       while (rs.next()) { 
        Map<String, Object> row = new HashMap<String, Object>(); 
        for (int i = 1; i <= numColumns; ++i) { 
         String name = meta.getColumnName(i); 
         Object value = rs.getObject(i); 
         row.put(name, value); 
        } 
        results.add(row); 
       } 
      } 
     } finally { 
      close(rs); 
     } 
     return results; 
    } 

    public static List<Map<String, Object>> query(Connection connection, String sql, List<Object> parameters) throws SQLException { 
     List<Map<String, Object>> results = null; 
     PreparedStatement ps = null; 
     ResultSet rs = null; 
     try { 
      ps = connection.prepareStatement(sql); 

      int i = 0; 
      for (Object parameter : parameters) { 
       ps.setObject(++i, parameter); 
      } 
      rs = ps.executeQuery(); 
      results = map(rs); 
     } finally { 
      close(rs); 
      close(ps); 
     } 
     return results; 
    } 

    public static int update(Connection connection, String sql, List<Object> parameters) throws SQLException { 
     int numRowsUpdated = 0; 
     PreparedStatement ps = null; 
     try { 
      ps = connection.prepareStatement(sql); 

      int i = 0; 
      for (Object parameter : parameters) { 
       ps.setObject(++i, parameter); 
      } 
      numRowsUpdated = ps.executeUpdate(); 
     } finally { 
      close(ps); 
     } 
     return numRowsUpdated; 
    } 
} 
+0

我已将所有.jar包含在我的/ Web-INF/lib /以及/ WEB-INF/classes /文件夹中。 – Karthik 2013-04-23 20:33:04

+0

请阅读我给你的答案 - 两者都是完全错误的。按照我的建议去做,看看它是否更好。 – duffymo 2013-04-23 20:35:06

+0

没有。不工作。只需将我的所有.jars复制到tomcat7的/ libs中。仍然同样的错误依然存在。 – Karthik 2013-04-23 20:36:58