十、Servlet连接数据库进行插入数据,插入成功则跳转到成功页面
1、Servlet连接数据库进行插入数据,插入成功则跳转到成功页面
SaveUserServlet
package com.bj;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.catalina.connector.Request;
public class SaveUserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
//获取表单提交的用户数据:
String name=req.getParameter("username");
String code=req.getParameter("usercode");
Connection conn=null;
PreparedStatement ps=null;
int count=0;
//加载驱动:
try {
Class.forName("oracle.jdbc.OracleDriver");
try {
//获取连接:
conn=DriverManager.getConnection("jdbc:oracle:thin:@10.125.4.55:1521:orcl","zjaOracle","oracle123");
conn.setAutoCommit(false);
String sqlString="insert into servletTest values(?,?)";
//预编译:
ps=conn.prepareStatement(sqlString);
ps.setString(1, name);
ps.setString(2, code);
System.out.println(ps.executeUpdate());
count=ps.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
if(count==1){
//保存成功,“跳转”到成功页面
//转发:刷新多次前台页面(浏览器)后数据库表中会新增多个相同的记录
//req.getRequestDispatcher("/success.html").forward(req, resp);
//重定向:(在浏览器上刷新的最后一次的请求记录),刷新多次后,数据库表中仍然只会存在刚刚新增的一条记录;
resp.sendRedirect(req.getContextPath()+"/success.html");
}else if (count==2) {
resp.sendRedirect(req.getContextPath()+"/fail.html");
}
}
}
备注:获取MYSQL和Oracle数据库连接的方式
/*
thin是oracle的一种驱动模式 它还有别的驱动模式 比如oci,一般都是用thin的
jdbc:oracle:thin:@ 协议
localhost IP地址
1521 Oracle经典端口
orcl 数据库实例名
协议的作用:协议是两台电脑在通讯的时候提前定义好的一套数据传送格式。协议是通讯数据格式,提前制定好的规范,按照这个中特定的格式发送数据包,对方接收到数据包之后按照这种规范解析这个数据包,获取有价值的数据。
MYSQL的:
jdbc:mysql://localhost:3366/bjpowernode;
jdbc:mysql:// 协议
localhost ip地址
3366 端口号
bjpowernode 数据库实例名字
*/
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>prj-servlet11</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
<welcome-file>save.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>SaveUser</servlet-name>
<servlet-class>com.bj.SaveUserServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SaveUser</servlet-name>
<url-pattern>/SaveUser</url-pattern>
</servlet-mapping>
</web-app>
Save.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/prj-servlet11/SaveUser">
username<input type="text" name="username">
usercode<input type="text" name="usercode">
<input type="submit" value="save">
<!-- 上面的标签表明当点击save按钮的时候,就可以将请求路径/prj-servlet18/save发过去 -->
</form>
</body>
</html>
success.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
成功
</body>
</html>