在之前很长一段时间都在搞前端部分,然后又大概了解了下数据库,现在想着把二者交融在一起吧……
首先我在Eclipse中的布局是这样的,也不知道合不合理:
用到了四个文件,分别是用于用户输入信息的前端界面Input.jsp,声明各个所需信息属性的Employ.java(话说这个可以称之为一个javabean),用于和数据库交互的EmployAdd.java,还有综合处理各种信息的GetServlet.java(这个是核心),接下来就一一展示吧……
1.
Input.jsp
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
Insert title here
很常规的操作,将顶端的编码都改成了utf-8,上篇也提到了,中文乱码问题,还是统一的好……在“性别”那里犯了个低级错误,在servlet中获取name=sex的值时我误以为是文本的男女,即
外面的男or女,实际上获取的是value中的值,一开始没有设置,结果插到数据库中的是“on”。。还有就是action中的路径<%=request.getContextPath()%>/GetServlet,之前翻开javaweb开发时就提到了路径问题,很大的篇幅,使用
getContextPath() 可以获取相对路径,避免了很多麻烦,貌似有些项目和运行路径不一致,在这里可以使用该命令获取项目的根目录,在本例中即/test,运行该页面显示的路径为:http://localhost:8080/test/Input.jsp,大家还可以了解一下
getServletPath()、
getRequestURI()等方法,都是获取各种路径的。
在Tomcat中运行该jsp文件,输入相关数据:
2.
Employ.java
package EmployAll;
public class Employ {
private String name;
private String sex;
private int age;
private String cla;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getCla() {
return cla;
}
public void setCla(String cla) {
this.cla = cla;
}
}
这个没啥好说的,我们需要的四个属性和对应的set/get方法……
3.
EmployAdd.java
package EmployAll;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class EmployAdd {
public boolean addEmploy(Employ employ) {
String name=employ.getName();
String sex=employ.getSex();
int age=employ.getAge();
String cla=employ.getCla();
Connection conn=null;
PreparedStatement pstat=null;
//注册驱动
String driver = "com.mysql.cj.jdbc.Driver";
//URL指向要访问的数据库名mysql
String url = "jdbc:mysql://localhost:3306/mysql?useSSL=false&serverTimezone=UTC&characterEncoding=utf8";
//MySQL配置时用户名
String user = "root";
//MySQL配置时的密码
String password = "123456";
try {
Class.forName(driver); //加载驱动程序
conn=DriverManager.getConnection(url, user, password);//获取数据库链接
String sql="insert into student (name,age,sex,cla) values (?,?,?,?)";
pstat=conn.prepareStatement(sql); //创建prepareStatement类对象,用来执行SQL语句
pstat.setString(1, name);
pstat.setInt(2, age);
pstat.setString(3, sex);
pstat.setString(4, cla);
pstat.executeUpdate();//执行sql语句
pstat.close();
conn.close();
} catch(ClassNotFoundException e) {
System.out.println("加载驱动异常!");
e.printStackTrace();
} catch(SQLException e) {
System.out.println("获取连接异常!");
e.printStackTrace();
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return true;
}
}
之前有篇博客专门写了java与数据库连接的,只不过上次是查询,这次是插入,内容也很常规,用到了prepareStatement对象,它是预编译的sql语句对象,可以先用?来代替对应值,而后再用setXXX插入具体值,详细的解释大家可以查一下文档~~~下面的处理异常时的确出了问题,先是找不到驱动,这个在上一篇已经说了,jar包的问题,然后获取连接异常,结果发现values拼写错误。。
4.
GetServlet.java
public class GetServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html");
request.setCharacterEncoding("utf-8");
String name=request.getParameter("name");
String sex=request.getParameter("sex");
String age=request.getParameter("age");
String cla=request.getParameter("class");
Employ employ=new Employ();
employ.setName(name);
employ.setSex(sex);
employ.setAge(Integer.parseInt(age));
employ.setCla(cla);
EmployAdd ema=new EmployAdd();
ema.addEmploy(employ);
}
}
创建一个servlet,默认的我就不添加了,代码太多了,由于我们用到的是post方式,只修改它就行了。先是设置各种格式,这个也出了错,上篇已经比较详细地介绍了,编码方式需要统一,这个很重要。。接下来就是通过getParameter()方法获取对应name的值,然后创建一个Employ对象,用set()将获取的前端用户输入的值收入囊中,最后创建一个EmployAdd对象调用addEmploy()方法,在这个方法一开始便是使用
Employ对象的get()方法获取之前set的值,这样处理数据库连接的类便拿到了用户输入的值并将其放到数据库中……
大体就是这样,接下来增加些难度,看看会不会出现惊喜。
之前一直乱码,直到“最终”同学出现才搞定~~~(小刚小明和小红是在mysql中直接写入的)