Servlet 数据库访问

本教程假定您已经了解了 JDBC 应用程序的工作方式。

注意:

各种版本mysql 的 jar 包下载地址:https://downloads.mysql.com/archives/c-j/

在 java 项目中,只需要在 Eclipse 中引入 mysql-connector-java-5.1.39-bin.jar 就可以运行java项目。

但是在 Eclipse web 项目中,当执行 Class.forName("com.mysql.jdbc.Driver");时 不会去查找驱动的。所以本示例中我们需要把 mysql-connector-java-5.1.39-bin.jar 拷贝到 tomcat 下 lib 目录。

从基本概念下手,让我们来创建一个简单的表,并在表中创建几条记录。

创建测试数据

接下来我们在 MySQL 中创建 nhooo 数据库,并创建 websites 数据表,表结构如下:

CREATETABLE`websites`(`id`int(11)NOTNULLAUTO_INCREMENT,`name`char(20)NOTNULLDEFAULT''COMMENT'站点名称',`url`varchar(255)NOTNULLDEFAULT'',`alexa`int(11)NOTNULLDEFAULT'0'COMMENT'Alexa排名',`country`char(10)NOTNULLDEFAULT''COMMENT'国家',PRIMARYKEY(`id`))ENGINE=InnoDBAUTO_INCREMENT=10DEFAULTCHARSET=utf8;

插入一些数据:

INSERTINTO`websites`VALUES('1','Google','https://www.google.cm/','1','USA'),('2','淘宝','https://www.taobao.com/','13','CN'),('3','基础教程网','http://www.shangmayuan.com','5892',''),('4','微博','http://weibo.com/','20','CN'),('5','Facebook','https://www.facebook.com/','3','USA');

数据表显示如下:

图片.png

访问数据库

下面的示例演示了如何使用 Servlet 访问 nhooo 数据库。

packagecom.nhooo.test;importjava.io.IOException;importjava.io.PrintWriter;importjava.sql.*;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;/***ServletimplementationclassDatabaseAccess*/@WebServlet("/DatabaseAccess")publicclassDatabaseAccessextendsHttpServlet{privatestaticfinallongserialVersionUID=1L;//JDBC驱动名及数据库URLstaticfinalStringJDBC_DRIVER="com.mysql.jdbc.Driver";staticfinalStringDB_URL="jdbc:mysql://localhost:3306/nhooo";//数据库的用户名与密码,需要根据自己的设置staticfinalStringUSER="root";staticfinalStringPASS="123456";/***@seeHttpServlet#HttpServlet()*/publicDatabaseAccess(){super();//TODOAuto-generatedconstructorstub}/***@seeHttpServlet#doGet(HttpServletRequestrequest,HttpServletResponseresponse)*/protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{Connectionconn=null;Statementstmt=null;//设置响应内容类型response.setContentType("text/html;charset=UTF-8");PrintWriterout=response.getWriter();Stringtitle="Servlet数据库实例-基础教程(shangmayuan.com)";StringdocType="<!DOCTYPEhtml>\n";out.println(docType+"<html>\n"+"<head><title>"+title+"</title></head>\n"+"<bodybgcolor=\"#f0f0f0\">\n"+"<h1align=\"center\">"+title+"</h1>\n");try{//注册JDBC驱动器Class.forName("com.mysql.jdbc.Driver");//打开一个连接conn=DriverManager.getConnection(DB_URL,USER,PASS);//执行SQL查询stmt=conn.createStatement();Stringsql;sql="SELECTid,name,urlFROMwebsites";ResultSetrs=stmt.executeQuery(sql);//展开结果集数据库while(rs.next()){//通过字段检索intid=rs.getInt("id");Stringname=rs.getString("name");Stringurl=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(SQLExceptionse){//处理JDBC错误se.printStackTrace();}catch(Exceptione){//处理Class.forName错误e.printStackTrace();}finally{//最后是用于关闭资源的块try{if(stmt!=null)stmt.close();}catch(SQLExceptionse2){}try{if(conn!=null)conn.close();}catch(SQLExceptionse){se.printStackTrace();}}}/***@seeHttpServlet#doPost(HttpServletRequestrequest,HttpServletResponseresponse)*/protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//TODOAuto-generatedmethodstubdoGet(request,response);}}

现在让我们来编译上面的 Servlet,并在 web.xml 文件中创建以下条目:

....<servlet><servlet-name>DatabaseAccess</servlet-name><servlet-class>com.nhooo.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,将显示以下响应结果:

图片.png

编辑于2024-05-20 13:19