控制层: servLet相应服务器端请求。
服务层:service/BIz
数据层:DAO
1.JDBC常规操作:
1.JDBC:sun发布的一个java程序和数据库之间通信的规范(接口)
2.各大数据库厂商去实现JDBc规范(实现类),这些实现类打成压缩包,就是所谓的jar包
1).JDBC连接MYSQL数据库
安装mysql,创建数据库fruitdb
idea引入jdbcJar包
package com.atguigu.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class demo01 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// 1. 添加jar包
// 2. 加载驱动
Class.forName("org.gjt.mm.mysql.Driver");
// 3. 通过驱动管理器获取连接对象
String url = "jdbc:mysql://localhost:3306/fruitdb";
String user = "root";
String pwd = "123456";
Connection conn = DriverManager.getConnection(url, user, pwd);
System.out.println("conn = " + conn);
}
}
2).JDBC对数据库进行增、删、改
package com.atguigu.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class Demo02 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
// 1. 加载驱动
Class.forName("com.mysql.jdbc.Driver");
// 2. 通过驱动管理器 获取连接对象
//url表示 和数据库通信的地址
//如果url中需要带参数,则需要使用?进行连接
//如果需要带多个参数,则从第二个参数开始使用 & 连接
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/fruitdb?usrSSL=falseuse&Unicode=true&characterEncoding=utf8", "root", "123456");
// 3. 编写sql语句
// id, fname, price, fcount, remark
String sql = "insert into t_fruit values(0,?,?,?,?)";
// 4. 创建预处理对象
PreparedStatement psmt = conn.prepareStatement(sql);
// 5. 填充参数
psmt.setString(1,"榴莲");
psmt.setInt(2,15);
psmt.setInt(3,100);
psmt.setString(4,"榴莲是一种神器的水果");
// 6. 执行更新,返回影响行数
int count = psmt.executeUpdate();
System.out.println(count > 0 ? "execced": "failed");
// 7. 释放资源(关闭连接)
psmt.close();
conn.close();
}
}
package com.atguigu.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
//JDBC - 修改和删除
public class Demo04 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("org.gjt.mm.mysql.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/fruitdb?useUnicode=true&characterEncoding=utf-8&useSSL=false","root","123456");
String sql = "delete from t_fruit where fid = ? " ;
PreparedStatement psmt = conn.prepareStatement(sql);
psmt.setInt(1,6);
int count = psmt.executeUpdate();
System.out.println(count > 0 ? "删除成功!" : "删除失败!");
psmt.close();
conn.close();
}
}
3).JDBC对数据库进行查询操作
package com.atguigu.jdbc;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
//JDBC - 查询所有的库存
public class Demo05 {
public static void main(String[] args) throws ClassNotFoundException, SQLException {
Class.forName("org.gjt.mm.mysql.Driver");
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/fruitdb?useUnicode=true&characterEncoding=utf-8&useSSL=false","root","123456");
//3.编写SQL语句
String sql = "select * from t_fruit" ;
//4.创建预处理命令对象
PreparedStatement psmt = conn.prepareStatement(sql);
//5.执行查询,返回结果集
ResultSet rs = psmt.executeQuery();
//6.解析结果集
List<Fruit> fruitList = new ArrayList<>();
while(rs.next()){
//1表示读取当前行的第一列的数据
//getInt , 因为这一列是int类型,所以使用getInt
//getInt(结果集的列名)
//int fid = rs.getInt("fid");
int fid = rs.getInt(1);
String fname = rs.getString("fname");
int price = rs.getInt(3);
int fcount = rs.getInt(4);
String remark = rs.getString(5);
Fruit fruit = new Fruit(fid , fname , price , fcount , remark );
fruitList.add(fruit);
}
//7.释放资源
rs.close();
psmt.close();
conn.close();
fruitList.forEach(System.out::println);
}
}
4).添加操作时获取自增列主键值
//执行更新,返回影响行数
protected int executeUpdate(String sql , Object... params){
boolean insertFlag = false ;
insertFlag = sql.trim().toUpperCase().startsWith("INSERT");
try {
conn = getConn();
if(insertFlag){
psmt = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
}else {
psmt = conn.prepareStatement(sql);
}
setParams(psmt,params);
int count = psmt.executeUpdate() ;
rs = psmt.getGeneratedKeys();
if(rs.next()){
return ((Long)rs.getLong(1)).intValue();
}
return count ;
} catch (SQLException e) {
e.printStackTrace();
}finally {
close(rs,psmt,conn);
}
return 0;
}