学了.net了,它的三层架构很好用。现在学jsp,我们一样可以用三层架构来开发。下面详细介绍

1.创建数据库

drop table MyUser
create table MyUser
(
id int identity(1,1) not null,
name Varchar(50),
psw Varchar(50),
nickname Varchar(50),
age int,
email Varchar(50)
)

2.model层

package model;
public class MyUser {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPsw() {
return psw;
}
public void setPsw(String psw) {
this.psw = psw;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
private String psw;
private String nickname;
private int age;
private String email;
}

3.连接数据库

package util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DB {
public static Connection createConn() {
Connection conn = null;
try {
Class.forName("net.sourceforge.jtds.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:jtds:sqlserver://localhost:1433/jsp", "sa", "123456");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
} public static PreparedStatement prepare(Connection conn, String sql) {
PreparedStatement ps = null;
try {
ps = conn.prepareStatement(sql);
} catch (SQLException e) {
e.printStackTrace();
}
return ps;
} public static void close(Connection conn) { try {
conn.close();
conn = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(Statement stmt) {
try {
stmt.close();
stmt = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(ResultSet rs) {
try {
rs.close();
rs = null;
} catch (SQLException e) {
e.printStackTrace();
}
}
}

4.Service层

package service;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import util.DB;
import model.MyUser;
public class MyUserService {
public static void add(MyUser user) {
Connection conn = DB.createConn();
String sql = "insert into MyUser values(?,?,?,?,?)";
PreparedStatement ps = DB.prepare(conn, sql);
try {
ps.setString(1, user.getName());
ps.setString(2, user.getPsw());
ps.setString(3, user.getNickname());
ps.setInt(4, user.getAge());
ps.setString(5, user.getEmail());
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
DB.close(ps);
DB.close(conn);
} public static MyUser getByName(String name){
Connection conn = DB.createConn();
String sql = "select * from MyUser where name = ?";
PreparedStatement ps =DB.prepare(conn, sql);
MyUser user=null;
try {
ps.setString(1, name);
ResultSet rs = ps.executeQuery(); if(rs.next()) {
user = new MyUser();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setPsw(rs.getString("psw"));
user.setNickname(rs.getString("nickname"));
user.setAge(rs.getInt("age"));
user.setEmail(rs.getString("email"));
}
} catch (SQLException e) {
e.printStackTrace();
}
DB.close(ps);
DB.close(conn);
return user;
}
}

5.页面层调用service层的方法即可

<%
String name=request.getParameter("name");
String psw=request.getParameter("psw");
String nickname=request.getParameter("nickname");
int age=Integer.valueOf(request.getParameter("age"));
String email=request.getParameter("email");
MyUser newUser=new MyUser();
newUser.setName(name);
newUser.setPsw(psw);
newUser.setNickname(nickname);
newUser.setAge(age);
newUser.setEmail(email);
MyUser user=MyUserService.getByName(name);
if(user!=null){ %>
<jsp:forward page="error.jsp"></jsp:forward>
<%}
else
{
MyUserService.add(newUser);
%>
<jsp:forward page="success.jsp"></jsp:forward>
<%
}
%> ....
....
....

三层架构对于连接数据库非常有用……

最新文章

  1. java-int类型:int默认为0导致更新操作未赋值的情况下将值更新为0
  2. Unity3D ShaderLab 使用贴图对模型的高光进行遮罩
  3. Encountered a section with no Package: header
  4. kafka_2.11-0.10.0.0安装步骤
  5. MySql5.7创建数据库与添加用户、删除用户及授权
  6. Android学习笔记2——shape
  7. Mark SDL2 Lazy Foo&#39;s Producations
  8. 深入理解Java内存(图解堆栈)
  9. a链接中 JS弹出确认对话框方法
  10. SVN在update的时候报错Please execute the &#39;Cleanup&#39; command.
  11. 巧妇难为无米之炊( Model数据)
  12. startup.bat 一闪而过解决方案
  13. 20165336 2017-2018-2 《Java程序设计》第3周学习总结
  14. log4e下载地址
  15. Redux 入门教程(一):基本用法
  16. 2016.6.19——C++杂记
  17. SUSE Linux Enterprise Server设置IP地址、网关、DNS
  18. Educational Codeforces Round 56 (Rated for Div. 2) D. Beautiful Graph 【规律 &amp;&amp; DFS】
  19. 如何让js在最后执行
  20. elasticsearch.net search入门使用指南中文版

热门文章

  1. Python——迭代器和解析(3)
  2. Narrow Art Gallery
  3. ACdream 1154 Lowbit Sum (数位DP)
  4. luogu2054 洗牌 同余方程
  5. python基于selenium+cv2+numpy实现登录某大型电商系统
  6. NOIP2012D2T1 同余方程
  7. python学习-字符串 列表 元祖
  8. DataTable和List相互转换的类
  9. 组合模式(composite)C++实现
  10. NFA