频道栏目
首页 > 资讯 > MySQL > 正文

建立Servlet与Mysql数据库连接的操作教程

18-07-17        来源:[db:作者]  
收藏   我要投稿

操作系统:win10

Tomcat版本:8.0

Jdk以及Jre版本:1.8.0

MySQL驱动包版本:8.0.11

在自学Servlet过程中,都是通过网上的教程和自己的买的书,但是由于教程和书上的大多数的版本都比较低,所以基本上在敲完例程之后,基本上都是会报错的,因为各种版本不兼容的问题。所以将各种错误记录在这里,能让自己以后翻阅,如果可以帮到别人那当然是最好的了。

首先,先创建数据库以及表。

这里是通过命令行来创建的数据库,内容如下:


创建了 id,name,url,country 四个字段。

这里要注意的是,我建立的数据库名称为:webdb。

接下来,就是创建 servlet文件。

我是在com.test包下创建的DataBaseTest.java文件

servlet代码如下

package com.test;
 
import java.io.PrintWriter;
import java.io.IOException;
import java.sql.*;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
 
/**
 * Servlet implementation class DataBaseTest
 */
 
public class DataBaseTest extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
     	// 设置JDBC驱动名及数据库 URL
		static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";  
                // 如果MySQL的驱动版本太低的话,这里应该改成 com.mysql.jdbc.Driver
		
    /**
     * @see HttpServlet#HttpServlet()
     */	
    public DataBaseTest() {
        super();
        // TODO Auto-generated constructor stub
    }
 
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         *  重写doGet方法
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		Connection connection = null;
		Statement statement = null;
		
		// 设置响应类型内容
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out = response.getWriter();
		String title = "Servlet 测试 Mysql 数据库连接";
		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.cj.jdbc.Driver");
			
			// 打开一个数据库连接
			connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/webdb?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false","root","123456");
			
			// 执行 SQL 查询
			statement = connection.createStatement();
			String sql;
			sql = "SELECT id,name,url,country FROM WebDB";  // 
			ResultSet rs = statement.executeQuery(sql);
			
			// 展开结果集数据库
			while(rs.next()) {
				// 通过字段检索
				int id = rs.getInt("id");
				String name = rs.getString("name");
				String url = rs.getString("url");
				String country = rs.getString("country");
				
				// 输出数据
				out.println("ID:"+id);
				out.println("站点名称:"+name);
				out.println("站点URL:"+url);
				out.println("属于国家:"+country);
				out.println("<br/>");		
			}
			out.println("</body></html>");
			
			// 完成之后关闭操作
			rs.close();
			statement.close();
			connection.close();
		} catch (SQLException se) {
			// 处理JDBC的错误
			se.printStackTrace();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			// 这里是用来处理class.forName的错误的
			e.printStackTrace();
		}finally {
			// 最后用于关闭资源的块
			try {
				if(statement!=null)
					statement.close();
			} catch (SQLException se2) {
				// TODO: handle exception	
			}
			try {
				if(connection!=null)
					connection.close();
			} catch (SQLException se) {
				// TODO: handle exception
				se.printStackTrace();
			}
		}
	}
 
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}
 
}

接下来,再配置web.xml文件

  <servlet>
  	<servlet-name>DataBaseTest</servlet-name>
  	<servlet-class>com.test.DataBaseTest</servlet-class>  // 需要编译成.class文件的类所在的包
  </servlet>
    <servlet-mapping>
  	<servlet-name>DataBaseTest</servlet-name>        // 要和上面的类名相同
  	<url-pattern>/TomCat/DataBaseTest</url-pattern>  // 浏览器访问的地址
  </servlet-mapping>

到这里,就创建好了一个简单的Servlet连接MySQL数据库。

这里有几个容易报错的点,需要说明一下,不然有可能会出现Tomcat运行不起来的情况。

首先,最重要的是版本号,要匹配,某一部分版本太高或者太低,可能都会导致Tomcat无法运行起来。

其次:

// 打开一个数据库连接
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/webdbuseUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false","root","123456");

对于这一句,getConnection()方法有三个参数,第一个是数据库的链接,第二个是数据库的用户名,第三个是数据库的密码。这些都基于你自己安装的时候所创建的。

如果你的程序报错了,查看报错的内容是:

Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.

这是因为MySQL版本过高的情况导致的,SSL是一种加密技术,如果看到这个报错,那就需要你在数据库链接后面加上useSSL=false即可。如上面我贴出来的代码。

相关TAG标签
上一篇:关于查看MySQL数据文件存储位置的方法讲解
下一篇:jdbc配置时容易出错的点
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站