интегрировать доступ MS и MySQL в Java - PullRequest
0 голосов
/ 08 января 2010

У меня проблема с подключением к MS Access и MySQL с использованием Java. Моя проблема в том, что я не могу найти драйвер для 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();
   }

%>

Ответы [ 3 ]

2 голосов
/ 08 января 2010

Таким образом, вы получаете ClassNotFoundException в классе драйверов MySQL JDBC? Затем вам нужно поместить JAR-файл драйвера MySQL JDBC, содержащий этот класс, в путь к классам. В случае приложения JSP / Servlet путь к классам находится в папке /WEB-INF/lib каждого веб-приложения. Просто поместите туда файл JAR. Его драйвер JDBC также известен как Connector / J. Вы можете скачать его здесь .

Тем не менее, это действительно не тот способ, как использовать JDBC и JSP вместе. Это не принадлежит файлу JSP. Вы должны делать это в реальном классе Java. Код JDBC также должен быть написан более надежно, теперь это утечка ресурсов.

1 голос
/ 08 января 2010

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 для обеих баз данных, чтобы вам не приходилось устанавливать соединения внутри страницы. Вы не должны писать код скриптлета - лучше выучить JSTL и использовать его теги.

0 голосов
/ 08 января 2010

Вы можете использовать эту ссылку для загрузки драйвера MySql . Как только вы загрузите его, вы должны убедиться, что он находится в пути к классу веб-сервера, который вы используете. Особенности настройки драйверов JDBC для сервера варьируются от сервера к серверу. Вы можете отредактировать свой вопрос, включив в него больше деталей, чтобы получить лучший ответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...