javaweb连接数据库实现数据的增删改查
1、连接数据库
public class ConnDemo {
//数据库链路层
//此处应该有连接数据库和关闭数据库的方法---需要方法对连接数据库的代码进行封装,需要建立连接直接调用方法
public static Connection con;
public static Connection getCon() {
// 1:加载驱动-通过反射加载驱动---注意一定要将驱动包加入项目中否则类找不到
try {
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
// 2:通过驱动管理员---大管家建立连接通道
con = DriverManager.getConnection(
"jdbc:sqlserver://127.0.0.1:1433;databaseName=student", "sa",
"123");
} catch (Exception e) {
e.printStackTrace();
}
return con;
}
//关闭数据库的方法
public static void getClose() {
try {
if (con!=null) {
con.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
创建实体层(数据库表的映射类)
public class StuInfo {
/**
* 实体层需要和数据库中的表进行映射
* 表------类
* 表中字段----类的成员变量
*
* 原则:所有的成员变量都是私有的,只向外提供公共的访问方法
*/
private int stuId;
private String stuName;
private int stuAge;
private String stuAddress;
//构造方法--全参数构造方法 ---只有stuId一个参数的构造方法,空参数构造
//alt+shift+s+o
public StuInfo(int stuId, String stuName, int stuAge, String stuAddress) {
super();
this.stuId = stuId;
this.stuName = stuName;
this.stuAge = stuAge;
this.stuAddress = stuAddress;
}
public StuInfo(String stuName, int stuAge, String stuAddress) {
super();
this.stuName = stuName;
this.stuAge = stuAge;
this.stuAddress = stuAddress;
}
public StuInfo() {
super();
}
public StuInfo(int stuId) {
super();
this.stuId = stuId;
}
//需要向外提供公共的访问方法getter和setter方法+alt+shift+s+r
public int getStuId() {
return stuId;
}
public void setStuId(int stuId) {
this.stuId = stuId;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public int getStuAge() {
return stuAge;
}
public void setStuAge(int stuAge) {
if (stuAge<0) {
System.out.println("请注意年龄不能小于零!");
}else {
this.stuAge = stuAge;
}
}
public String getStuAddress() {
return stuAddress;
}
public void setStuAddress(String stuAddress) {
this.stuAddress = stuAddress;
}
}
创建接口,定义增删改查的方法
public interface DBdao {
//接口中方法全部都是抽象的
//查询所有学生信息的方法--不需要对四个参数做任何传递--方法不需要有参数
public void selectAll();
//根据stuId学号查询学生信息 --需要传递学号--学号封装到StuInfo的stu实体中
//所以需要有一个StuInfo stu的参数
public void selectById(StuInfo stu);
//增加学生信息的方法--需要传递四个参数--四个参数封装了StuInfo的stu实体中
public void insert(StuInfo stu);
//删除学生信息的方法--通过学号删除学--需要传递stuId--封装了StuInfo的stu实体中
public void delete(StuInfo stu);
//修改学生信息的方法--需要传递四个参数--四个参数封装了StuInfo的stu实体中
public void update(StuInfo stu);
}
定义接口的实现类,书写增删改查代码
public class DBdaoImpl implements DBdao {
private Connection con;
@Override
public void selectAll() {
con = ConnDemo.getCon();
// 3:通过连接通道对象con得到一个后台业务员的对象ps
PreparedStatement ps;
try {
ps = con.prepareStatement("select * from stuInfo ");
// 4:后台业务员的对象ps执行sql代码---类似于取钱
ResultSet rs = ps.executeQuery();
// 5:拿出ResultSet集合中的数据rs.next()-返回true证明有数据可以拿
System.out.println("学号\t" + "姓名\t" + "年龄\t" + "家庭住址");
while (rs.next()) {
System.out.print(rs.getInt("stuId") + "\t");
System.out.print(rs.getString("stuName") + "\t");
System.out.print(rs.getInt("stuAge") + "\t");
System.out.print(rs.getString("stuAddress") + "\t");
System.out.println();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
ConnDemo.getClose();
}
}
@Override
public void selectById(StuInfo stu) {
con = ConnDemo.getCon();
// 3:通过连接通道对象con得到一个后台业务员的对象ps
PreparedStatement ps;
try {
ps = con.prepareStatement("select * from stuInfo where stuId=? ");
// 4给占位符进行赋值操作
ps.setInt(1, stu.getStuId());
// 5:后台业务员的对象ps执行sql代码---类似于取钱
ResultSet rs = ps.executeQuery();
// 6:拿出ResultSet集合中的数据rs.next()-返回true证明有数据可以拿
System.out.println("学号\t" + "姓名\t" + "年龄\t" + "家庭住址");
while (rs.next()) {
System.out.print(rs.getInt("stuId") + "\t");
System.out.print(rs.getString("stuName") + "\t");
System.out.print(rs.getInt("stuAge") + "\t");
System.out.print(rs.getString("stuAddress") + "\t");
System.out.println();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
ConnDemo.getClose();
}
}
@Override
public void insert(StuInfo stu) {
con = ConnDemo.getCon();
// 3:通过连接通道对象con得到一个后台业务员的对象ps
PreparedStatement ps;
try {
ps = con.prepareStatement("insert into stuInfo values(?,?,?)");
// 4给占位符进行赋值操作
ps.setString(1, stu.getStuName());
ps.setInt(2, stu.getStuAge());
ps.setString(3, stu.getStuAddress());
// 5:后台业务员的对象ps执行sql代码---类似于取钱
int i = ps.executeUpdate();
// 6:对i做判断如果 大于0 怎插入 成功
if (i > 0) {
System.out.println("插入成功!");
} else {
System.out.println("插入失败!");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
ConnDemo.getClose();
}
}
@Override
public void delete(StuInfo stu) {
con = ConnDemo.getCon();
// 3:通过连接通道对象con得到一个后台业务员的对象ps
PreparedStatement ps;
try {
ps = con.prepareStatement("delete from stuInfo where stuId=?");
// 4给占位符进行赋值操作
ps.setInt(1, stu.getStuId());
// 5:后台业务员的对象ps执行sql代码---类似于取钱
int i = ps.executeUpdate();
// 6:对i做判断如果 大于0 怎插入 成功
if (i > 0) {
System.out.println("删除成功!");
} else {
System.out.println("删除失败!");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
ConnDemo.getClose();
}
}
@Override
public void update(StuInfo stu) {
con = ConnDemo.getCon();
// 3:通过连接通道对象con得到一个后台业务员的对象ps
PreparedStatement ps;
try {
ps = con.prepareStatement("update stuInfo set stuName=?,stuAge=?," +
"stuAddress=? where stuId=?");
// 4给占位符进行赋值操作
ps.setInt(4, stu.getStuId());
ps.setString(1, stu.getStuName());
ps.setInt(2, stu.getStuAge());
ps.setString(3, stu.getStuAddress());
// 5:后台业务员的对象ps执行sql代码---类似于取钱
int i = ps.executeUpdate();
// 6:对i做判断如果 大于0 怎插入 成功
if (i > 0) {
System.out.println("修改成功!");
} else {
System.out.println("修改失败!");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
ConnDemo.getClose();
}
}}