English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Этот учебник предполагает, что вы уже знаете, как работает JDBC-приложение.
Внимание:
Ссылки для скачивания jar-архивов различных версий MySQL:https://downloads.mysql.com/archives/c-j/
В java-проекте достаточно ввести mysql-connector-java-5.1.39-bin.jar в Eclipse, чтобы запустить java-проект.
Но в веб-проекте Eclipse, когда выполняется Class.forName("com.mysql.jdbc.Driver");, драйвер не ищется. Поэтому в данном примере нам нужно скопировать mysql-connector-java-5.1.39-bin.jar в директорию lib под Tomcat.
Начнем с базовых концепций и создадим простую таблицу, в которой добавим несколько записей.
далее мы создадим базу данных w3codebox в MySQL и создадим таблицу websites с такой структурой:
CREATE TABLE `websites` ( id int(11) NOT NULL AUTO_INCREMENT, name char(20) NOT NULL DEFAULT '' COMMENT '站点名称', url varchar(255) NOT NULL DEFAULT '', alexa int(11) NOT NULL DEFAULT '0' COMMENT 'Alexa排名', country char(10) NOT NULL DEFAULT '' COMMENT '国家', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
Вставить несколько данных:
INSERT INTO `websites` VALUES ('1', 'Google', 'https://www.google.cm/', '1', 'USA'), ('2', '淘宝', 'https://www.taobao.com/', '13', 'CN'), ('3', '基础教程网', 'http://ru.oldtoolbag.com', '5892', ''), ('4', '微博', 'http://weibo.com/', '20', 'CN'), ('5', 'Facebook', 'https://www.facebook.com/', '3', 'USA');
Таблица данных отображается следующим образом:
Ниже приведен пример того, как использовать Servlet для доступа к базе данных w3codebox.
package com.w3codebox.test; import java.io.IOException; import java.io.PrintWriter; import java.sql.*; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class DatabaseAccess */ @WebServlet("/DatabaseAccess") public class DatabaseAccess extends HttpServlet { private static final long serialVersionUID = 1L; // JDBC 驱动名及数据库 URL static final String JDBC_DRIVER = "com.mysql.jdbc.Driver"; static final String DB_URL = "jdbc:mysql://localhost:3306/w3codebox"; // 数据库的用户名与密码,需要根据自己的设置 static final String USER = "root"; static final String PASS = "123456"; /** * @see HttpServlet#HttpServlet() */ public DatabaseAccess() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Connection conn = null; Statement stmt = null; // 设置响应内容类型 response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); String title = "Servlet 数据库实例 - 基础教程(oldtoolbag.com)"; String docType = "<!DOCTYPE html>\n"; out.println(docType + "<html>\n" + "<head><title>" + title + "</title></head>\n" + "<body bgcolor=\"#f0f0f0\">\n" + "<h1 align=\"center\">" + title + "</h1>\n"); try{ // регистрация JDBC драйвера Class.forName("com.mysql.jdbc.Driver"); // открывать соединение conn = DriverManager.getConnection(DB_URL,USER,PASS); // 执行 SQL запрос stmt = conn.createStatement(); String sql; sql = "SELECT id, name, url FROM websites"; ResultSet rs = stmt.executeQuery(sql); // 展开结果集数据库 while(rs.next()){ // 通过字段检索 int id = rs.getInt("id"); String name = rs.getString("name"); String url = rs.getString("url"); // 输出数据 out.println("ID: " + id); out.println(", название сайта: " + name); out.println(", сайт URL: " + url); out.println("<br />"); } out.println("</body></html>"); // 完成后关闭 rs.close(); stmt.close(); conn.close(); } catch(SQLException se) { // 处理 JDBC ошибки se.printStackTrace(); } catch(Exception e) { // 处理 Class.forName 错误 e.printStackTrace(); }finally{ // 最后是用于关闭资源的块 try{ if(stmt!=null) stmt.close(); }catch(SQLException se2){ } try{ if(conn!=null) conn.close(); }catch(SQLException se){ se.printStackTrace(); } } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Автоматически сгенерированный метод doGet(request, response); } }
Теперь давайте скомпилируем вышеуказанный Servlet и создадим следующий элемент в файле web.xml:
.... <servlet> <servlet-name>DatabaseAccess</servlet-name> <servlet-class>com.w3codebox.test.DatabaseAccess</servlet-class> </servlet> <servlet-mapping> <servlet-name>DatabaseAccess</servlet-name> <url-pattern>/TomcatTest/DatabaseAccess</url-pattern> </servlet-mapping> ....
Теперь вызовите этот Servlet, введите ссылку: http://localhost:8080/TomcatTest/DatabaseAccess, и будет отображен следующий результат ответа: