在java中集成ms access和mysql

在java中集成ms access和mysql,java,mysql,ms-access,jsp,jdbc,Java,Mysql,Ms Access,Jsp,Jdbc,我在使用Java连接MS Access和MySQL时遇到问题。我的问题是我找不到MySQL的驱动程序。这是我的密码: <%@ page import="java.sql.*" %> <% Connection odbcconn = null; Connection jdbcconn = null; PreparedStatement readsms = null; PreparedStatement updsms = null; ResultSe

我在使用Java连接MS Access和MySQL时遇到问题。我的问题是我找不到MySQL的驱动程序。这是我的密码:

<%@ page import="java.sql.*" %>

<%
   Connection odbcconn = null;
   Connection jdbcconn = null;
   PreparedStatement readsms = null;
   PreparedStatement updsms = null;
   ResultSet rsread = null;

   Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");  //load database driver
   odbcconn = DriverManager.getConnection("jdbc:odbc:SMS");  //connect to database
   readsms = odbcconn.prepareStatement("select * from inbox where Status='New'");
   rsread = readsms.executeQuery();
   while(rsread.next()){
        Class.forName("com.mysql.jdbc.Driver");
        jdbcconn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bakme", "root", "");  //connect to database
        updsms = jdbcconn.prepareStatement("insert into inbox(sms,phone) values (?,?)");
        updsms.setString(1, rsread.getString("Message"));
        updsms.setString(2, rsread.getString("Phone"));
        updsms.executeUpdate();
   }

%>

因此,您在MySQL JDBC驱动程序类上得到了一个
ClassNotFoundException
?然后需要将包含该类的MySQL JDBC驱动程序JAR文件放入类路径中。对于JSP/Servlet应用程序,类路径覆盖在每个webapplication的
/WEB-INF/lib
文件夹下。把JAR文件放在那里。它的JDBC驱动程序也称为Connector/J。您可以下载它


也就是说,这并不是同时使用JDBC和JSP的方式。这不属于JSP文件。您应该在真正的Java类中执行此操作。JDBC代码的编写也应该更加健壮,现在它正在泄漏资源。

因此,您在MySQL JDBC驱动程序类上得到了一个
ClassNotFoundException
?然后需要将包含该类的MySQL JDBC驱动程序JAR文件放入类路径中。对于JSP/Servlet应用程序,类路径覆盖在每个webapplication的
/WEB-INF/lib
文件夹下。把JAR文件放在那里。它的JDBC驱动程序也称为Connector/J。您可以下载它


也就是说,这并不是同时使用JDBC和JSP的方式。这不属于JSP文件。您应该在真正的Java类中执行此操作。JDBC代码的编写也应该更加健壮,现在它正在泄漏资源。

BalusC的观点是:这不是您应该这样编写代码的方式

连接、语句和结果集都表示有限的资源。它们不像内存分配;垃圾收集器不会清理它们。您必须在代码中这样做,如下所示:

// Inside a method
Connection connection = null;
Statement statement = null;
ResultSet rs = null;

try
{
    // interact with the database using connection, statement, and rs
}
finally
{
    // clean up resources in a finally block using static methods, 
    // called in reverse order of creation, that don't throw exceptions
    close(rs);
    close(statement);
    close(connection);
}
但是,如果您决定将其移动到服务器端组件,您肯定会遇到如下代码的巨大问题:

while(rsread.next())
{
    Class.forName("com.mysql.jdbc.Driver");
    jdbcconn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bakme", "root", "");  //connect to database
    updsms = jdbcconn.prepareStatement("insert into inbox(sms,phone) values (?,?)");
    updsms.setString(1, rsread.getString("Message"));
    updsms.setString(2, rsread.getString("Phone"));
    updsms.executeUpdate();
}
注册驱动程序、创建连接而不关闭连接,以及在循环中为从Access中获取的每一行重复准备语句,都表明了对关系数据库和JDBC的严重误解

您应该注册驱动程序并创建一次连接,执行需要执行的操作,并清理所有已使用的资源


如果您必须在JSP中执行此操作,我建议您对这两个数据库使用JNDI数据源,这样您就不必在页面内设置连接。您不应该编写scriptlet代码-最好学习和使用它的标记。

BalusC很恰当:您不应该这样编写这样的代码

连接、语句和结果集都表示有限的资源。它们不像内存分配;垃圾收集器不会清理它们。您必须在代码中这样做,如下所示:

// Inside a method
Connection connection = null;
Statement statement = null;
ResultSet rs = null;

try
{
    // interact with the database using connection, statement, and rs
}
finally
{
    // clean up resources in a finally block using static methods, 
    // called in reverse order of creation, that don't throw exceptions
    close(rs);
    close(statement);
    close(connection);
}
但是,如果您决定将其移动到服务器端组件,您肯定会遇到如下代码的巨大问题:

while(rsread.next())
{
    Class.forName("com.mysql.jdbc.Driver");
    jdbcconn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bakme", "root", "");  //connect to database
    updsms = jdbcconn.prepareStatement("insert into inbox(sms,phone) values (?,?)");
    updsms.setString(1, rsread.getString("Message"));
    updsms.setString(2, rsread.getString("Phone"));
    updsms.executeUpdate();
}
注册驱动程序、创建连接而不关闭连接,以及在循环中为从Access中获取的每一行重复准备语句,都表明了对关系数据库和JDBC的严重误解

您应该注册驱动程序并创建一次连接,执行需要执行的操作,并清理所有已使用的资源


如果您必须在JSP中执行此操作,我建议您对这两个数据库使用JNDI数据源,这样您就不必在页面内设置连接。您不应该编写scriptlet代码-最好学习并使用它的标记。

您可以。下载后,您需要确保它位于您正在使用的web服务器的类路径上。为服务器配置JDBC驱动程序的细节因服务器而异。您可能希望编辑您的问题以包含更多详细信息,以获得更好的答案。

您可以。下载后,您需要确保它位于您正在使用的web服务器的类路径上。为服务器配置JDBC驱动程序的细节因服务器而异。您可能需要编辑您的问题,以包含更多详细信息以获得更好的答案。

查看使用内置格式时代码的可读性查看使用内置格式时代码的可读性感谢..我的问题已经解决..顺便说一下,我不明白您的陈述是什么“JDBC代码应该写得更健壮,现在它正在泄漏资源。“你能给我举个例子或解释一下……我正在学习javaCheck duffymo的答案。”。更多信息可以在Sun JDBC教程中找到:在这篇博客文章中:谢谢。我的问题已经解决了。顺便说一句,我不明白你的哪句话“JDBC代码应该写得更健壮,现在它正在泄漏资源。”你能给我举个例子或解释一下吗我正在学习javaCheck duffymo的答案。更多信息可以在Sun JDBC教程中找到:在本博客文章中: