MySQL连接器/J问题

MySQL连接器/J问题,mysql,tomcat6,jdbc,Mysql,Tomcat6,Jdbc,因此,我一直遇到MySQL连接器/J驱动程序无法正确加载到运行在Tomcat6.0.20上的JavaWebStart应用程序的问题。我已经将MySQL连接器JAR文件复制到Tomcat的lib目录以及webapps//WEB-INF中的lib目录中。我还在JNLP文件中添加了对JAR文件的引用。经过研究,我发现我还需要向context.xml文件($CATALINA_HOME/conf)添加一个节点,这是根据Tomcat6语法完成的。以下是XML文件的内容: <Context>

因此,我一直遇到MySQL连接器/J驱动程序无法正确加载到运行在Tomcat6.0.20上的JavaWebStart应用程序的问题。我已经将MySQL连接器JAR文件复制到Tomcat的lib目录以及webapps//WEB-INF中的lib目录中。我还在JNLP文件中添加了对JAR文件的引用。经过研究,我发现我还需要向context.xml文件($CATALINA_HOME/conf)添加一个节点,这是根据Tomcat6语法完成的。以下是XML文件的内容:

<Context>

  <!-- Default set of monitored resources -->
  <WatchedResource>WEB-INF/web.xml</WatchedResource>

  <!-- Uncomment this to disable session persistence across Tomcat restarts -->
  <!--
  <Manager pathname="" />
  -->

  <!-- Uncomment this to enable Comet connection tacking (provides events
     on session expiration as well as webapp lifecycle) -->
  <!--
  <Valve className="org.apache.catalina.valves.CometConnectionManagerValve" />
  -->

  <Resource name="jdbc/MySQLDB" auth="Container" driverClassName="com.mysql.jdbc.Driver" 
maxActive="10" maxIdle="1" maxWait="500" type="javax.sql.DataSource"
url="jdbc:mysql://myServerName:3306/myDbName" username="myUserName"    
password="myPassword>" />

</Context>

当我使用ant从Eclipse或SSH执行代码时,我会很好地返回结果,因此我知道连接URL没有问题。但是,当我使用WebStart(jnlp文件)运行它时,当我单击按钮时,JFrame甚至不会打开。不过,我知道事件侦听器没有问题,因为代码可以通过另外两种方式执行。我发现在注册驱动程序时会发生异常,但是如果我没有包括这些行,我会收到一个错误,说“找不到合适的驱动程序”。关于如何解决此问题,有什么建议吗?

您的Java Web Start程序在客户端上运行,但是您的JDBC驱动程序是由Tomcat服务器加载的——这是在两个不同JVM中运行的两个不同环境

您说在JNLP文件中有一个对JDBC驱动程序的引用—这是您需要查看的部分。Web启动客户端需要通过HTTP下载包含驱动程序的jar文件。我猜这就是链条断开的地方


也就是说,我想知道让客户机下载JDBC驱动程序并连接到数据库是否安全。字节码进行反向工程并不困难,jar文件只是zip压缩的一种特殊情况。

Java Web Start程序在客户机上运行,但JDBC驱动程序是由Tomcat服务器加载的——这是在两个不同JVM中运行的两个不同环境

您说在JNLP文件中有一个对JDBC驱动程序的引用—这是您需要查看的部分。Web启动客户端需要通过HTTP下载包含驱动程序的jar文件。我猜这就是链条断开的地方

也就是说,我想知道让客户机下载JDBC驱动程序并连接到数据库是否安全。字节码进行反向工程并不困难,jar文件只是zip压缩的一个特例

Connection con = null;
try {
        sb.append("\nAbout to register JDBC driver\n");
        Driver driver=new com.mysql.jdbc.Driver();
        DriverManager.registerDriver(driver);

        sb.append("About to create new instance of mysql jdbc driver\n");
        Class.forName("com.mysql.jdbc.Driver").newInstance();

    } catch (InstantiationException e) {
        sb.append(e.getMessage());
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        sb.append(e.getMessage());
        e.printStackTrace();
    } catch (ClassNotFoundException e) {
        sb.append(e.getMessage());
        e.printStackTrace();
    } catch (SQLException e) {
        sb.append(e.getMessage());
        e.printStackTrace();     
    } catch (Exception e) {
        sb.append(e.getMessage());
        e.printStackTrace();
    } // end try-catch

try {
   sb.append("About to create connection using DriverManager\n");

   con = DriverManager.getConnection("jdbc:mysql://myServerName:3306/myDbName","myUserName", "myPassword");

   // Make sure that connection instance isn't null before creating statement and executing query.
   if (con != null) {
     sb.append("About to create SQL statement using con.createStatement\n");
     Statement st = con.createStatement();
     sb.append("About to create ResultSet by executing query");
     ResultSet rs = st.executeQuery("SELECT * FROM catissue_user");

     sb.append("About to loop through ResultSet\n");

     while(rs.next()) {
       sb.append(rs.getString(2));
     } // end of while

     sb.append("\nAbout to close ResultSet, Statement and connection\n");
     rs.close();
     st.close();
     con.close();
   } else {
     sb.append("There was a problem creating the connection:\n");
   } // end if
} catch(SQLException exception) {
   sb.append(exception.getMessage());
   exception.printStackTrace();
} catch(Exception exception) {
   sb.append(exception.getMessage());
   exception.printStackTrace();
} // end try-catch