前端技术+数据库+java后台
JDBC技术
1.JDBC定义
JDBC:(Java Database connectivity)java数据库连接技术.
一个系统是由java的JDBC技术获取到数据库的数据展示在页面上进行可视化的数据展示,获取用户通过
简单直观的页面操作然后由java后台技术对数据库 进行CRDU.
2.JDBC技术连接上数据库
步骤:
1.创建mysql数据库和表
2.java连接不同的数据库,需要有不同的数据库厂商提供的数据驱动jar包(可以去厂商官网下载)
别忘记build path进去
3.编写代码,加载驱动
4.建立连接,创建ConnectionStatement对象,负责发送SQL指定到数据.
5.创建SQL指令,创建PreperedStatement对象,负责发送SQL指定到数据.
6.PreperedStatement对象执行executeQuery查询,执行executeUpdate增删改
7.关闭资源对象
public class JDBCTest01 {
public static void main(String[] args) {
// String url="jdbc:mysql://localhost:3306/myschooldb";
//连接数据库地址
String url="jdbc:mysql://172.168.1.41:3306/myschooldb";
//连接数据库的账号和密码
String user="zhangfei";
String password="sa123";
try {
//1.加载驱动(加载进内存)
Class.forName("com.mysql.jdbc.Driver");
//2.建立数据库连接
DriverManager.getConnection(url, user, password);
System.out.println("连接成功!");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
3.JDBCAPI:
API指查询的帮助文档,也可以是Application interface应用程序接口;
JDBC技术提供了一些常用的API来实现java对数据库的数据增删改查操作
Connection接口:负责和数据库建立连接
PreperedStatement接口:发送SQL语句到数据库
ResultSet接口:返回查询到结果集集合的
4.查询
public class JDBCTest01 {
public static void main(String[] args) {
// String url="jdbc:mysql://localhost:3306/myschooldb";
//连接数据库地址
String url="jdbc:mysql://172.168.1.41:3306/myschooldb";
//连接数据库的账号和密码
String user="zhangfei";
String password="sa123";
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try {
//1.加载驱动(加载进内存)
Class.forName("com.mysql.jdbc.Driver");
//2.建立数据库连接,返回连接对象
conn=DriverManager.getConnection(url, user, password);
System.out.println("连接成功!");
String sql="SELECT studentNo,studentName,sex,age,address FROM student ";
//PreparedStatement对象 负责发送SQL命令到数据库
pstmt= conn.prepareStatement(sql);
//pstmt.executeQuery()方法执行查询方法,返回一个无序的结果集合
rs=pstmt.executeQuery();
System.out.println("学号\t姓名\t性别\t年龄\t地址");
while(rs.next()){
// int sNo=rs.getInt(1);
int sNo=rs.getInt("studentNo");
String studentName=rs.getString("studentName");
String sex=rs.getString("sex");
int age=rs.getInt("age");
String address=rs.getString("address");
System.out.println(sNo+"\t"+studentName+"\t"+sex+"\t"+age+"\t"+address);
}
//executeUpdate执行增删改SQL语句返回受影响行数
// int count=pstmt.executeUpdate();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}finally {
//关闭资源
try{
if(rs != null){
rs.close();
}
if (pstmt!=null) {
pstmt.close();
}
if (conn!=null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
5.增加
public class JDBCTest03 {
public static void main(String[] args) throws Exception {
String url="jdbc:mysql://localhost:3306/myschooldb?
useSSL=true&characterEncoding=utf-8";
String user="zhangfei";
String password="sa123";
//1.加载驱动
Class.forName("com.mysql.jdbc.Driver");
//2.创建conn连接对象 建立连接
Connection conn= DriverManager.getConnection(url, user, password);
Scanner input=new Scanner(System.in);
System.out.println("请输入学号:");
int iNo=input.nextInt();
System.out.println("请输入姓名:");
String iName=input.next();
System.out.println("请输入密码:");
String iPwd=input.next();
System.out.println("请输入性别:");
String iSex=input.next();
System.out.println("请输入年龄:");
int iAge=input.nextInt();
System.out.println("请输入地址:");
String iAddress=input.next();
System.out.println("请输入出生日期:");
String iBorndate=input.next();
String sql="INSERT INTO student VALUES (?,?,?,?,?,?,?);";
//创建pstmt对象,负责发送SQL指令到数据库 ,prepareStatement(sql)创建pstmt对象的时
候,就将SQL预编译
//?代表可以这个SQL语句可以传递7个参数的值
PreparedStatement pstmt=conn.prepareStatement(sql);
//依次给7个?号传参赋值
pstmt.setInt(1,iNo);
pstmt.setString(2,iName);
pstmt.setString(3,ipwd);
pstmt.setString(4,iSex);
pstmt.setInt(5,iAge);
pstmt.setString(6,iAddress);
pstmt.setString(7,iBorndate);
int count=pstmt.executeUpdate();
if (count>0) {
System.out.println("增加学生成功!");
}else {
System.out.println("增加学生失败!");
}
//关闭资源
pstmt.close();
conn.close();
}
}
6.修改
public class JDBCTest04 {
public static void main(String[] args) {
Connection conn=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/myschooldb",
"zhangfei", "sa123");
Scanner input=new Scanner(System.in);
System.out.println("请输入需要修改的信息的学号:");
int iNo=input.nextInt();
System.out.println("请输入新的姓名:");
String iName=input.next();
System.out.println("请输入新的地址:");
String iAddress=input.next();
System.out.println("请输入新的出生日期:");
String iBorndate=input.next();
String sql="UPDATE student SET studentName=?,address=?,borndate=? WHERE
studentNo=?";
pstmt=conn.prepareStatement(sql);
//按SQL的?的顺序和类型 给参数赋值
pstmt.setString(1, iName);
pstmt.setString(2, iAddress);
pstmt.setString(3, iBorndate);
pstmt.setInt(4, iNo);
//executeUpdate执行增删改语句,返回受影响行数
int count=pstmt.executeUpdate();
if (count>0) {
System.out.println("修改成功!");
}else {
System.out.println("修改失败!");
}
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch (SQLException e) {
e.printStackTrace();
}finally {
//关闭资源
try {
if (rs!=null) {
rs.close();
}
if (pstmt!=null) {
pstmt.close();
}
if (conn!=null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Dao层分层开发
1.dao定义
DAO(Data Access object)层,叫数据访问层
分层开发模型:
分层开发的好处:
1.各司其职,每一层去做自己的事情
2.上一层依赖于下一层;但不能跨层
3.松耦合,利于后期项目的扩展和维护
MVC设计思想:
MVC不算技术,是程序设计非常主流的一种思想,通俗点讲就是将一个完整的项目分为多个层面来开发
M: (model)模型层;实体类,ORM类型框架
V:(view)视图层,jsp,html,css,jQuery,vue等
C:(controller)控制层;servlet,spring等