在java中集成ms access和mysql

Posted

技术标签:

【中文标题】在java中集成ms access和mysql【英文标题】:integrate ms access and mysql in java 【发布时间】:2010-01-08 03:04:11 【问题描述】:

我在使用 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();
   

%>

【问题讨论】:

看看你的代码在使用内置格式时阅读起来有多容易 【参考方案1】:

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

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

【讨论】:

谢谢你..我的问题已经解决了..顺便说一句,我不明白你的陈述“JDBC代码也应该写得更健壮,现在它正在泄漏资源。”你能给我在学习java的过程中举个例子或者解释一下..i 检查 duffymo 的答案。更多信息可以在 Sun JDBC 教程中找到:java.sun.com/docs/books/tutorial/jdbc/index.html 和这篇博客文章:balusc.blogspot.com/2008/07/dao-tutorial-data-layer.html【参考方案2】:

BalusC 是正确的:这不是你应该写这样的东西的方式。

Connection、Statement 和 ResultSet 都代表有限的资源。它们不像内存分配;垃圾收集器不会清理它们。您必须在代码中执行此操作,如下所示:

// 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 代码 - 最好学习 JSTL 并使用它的 标签。

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于在java中集成ms access和mysql的主要内容,如果未能解决你的问题,请参考以下文章

在 MS-Access 中生成 INSERT INTO 语句

如何在ubuntu中集成java和hive?

在 Ms. Access 中生成随机字母数字密钥

在 Java 桌面应用程序中集成 Google Map 的好解决方案?

使用 Java Ucanaccess 在 ms-Access 中恢复数据和存储的查询

通过 UCanAccess 在 Eclipse 中“从表中生成实体”(MS Access)