JDBC增删改查

三十.JDBC

在这里插入图片描述数据库是用于管理数据的,后台是用于根据业务做逻辑处理的,前台显示数据并进行交互

驱动包:DriverManager(驱动管理-注册驱动)、Statement(编译及执行SQL语句)、ResultSet(处理结果集)

1.查询数据库

步骤:
1、关联数据库驱动包(不同的数据库使用的驱动包是不一样的)

2、注册驱动(通过反射进行驱动的注册)

3、连接数据库获取数据库连接对象(登录-选择数据库的过程)

4、执行SQL语句

5、处理结果集

6、关闭数据库连接对象
关键词:DriverManager(管理JDBC驱动)、
Statement(用于SQL的编译及执行)/
PreparedStatement(预编译)/
CallableStatement(执行存储过程)、
ResultSet(结果集)

/**
	 * 查询功能
	 */
	public static void query() {
		Connection conn = null; //作为全局变量来使用
		Statement statement = null;
		ResultSet rs=null;
		try {
			//注册驱动
			Class.forName("com.mysql.cj.jdbc.Driver");
			//登陆数据库,获取连接对象
			conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai", "root", "123456");
		//定义SQL
			String sql = "select  ename,eno, phone, birthday,sex,dno from emp limit 0,5";
		//执行SQL 需要Statement对象
			 statement = conn.createStatement();
			//z执行SQL获取结果集
			 rs =statement.executeQuery(sql);
			//遍历结果集(查询的过程中,可能会出现结果为空)
			while(rs.next()) {//判断是否有下一个元素,每次循环都代表一行数据
				//获取元素一行中的列
				int eno=rs.getInt(2); // 要与上面的定义SQL内容顺序一致
				String ename = rs.getString(1);
				String sex = rs.getString(5);
				String phone = rs.getString(3);
				Date birthday=rs.getDate(4);
				int dno = rs.getInt(6);
				System.out.println(eno+"--"+ename+"--"+sex+"--"+phone+"--"+birthday+"--"+dno);
			}
			
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {//判断不为空时才进行关闭
			//关闭数据库连接对象
				try {
				if(rs!=null) {
					rs.close();
				}
				if(statement !=null) {
					statement.close();
				}
				if(rs !=null) {
					rs.close();
				} 
				} catch (SQLException e) {
					e.printStackTrace();
				}	
		}
	}
 

2.添加数据

import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Date;

public class JDBCDemo {
	//将注册驱动和登陆数据库,连接对象定义为常量
	private static final String DRIVER="com.mysql.cj.jdbc.Driver";
	private static final String URL="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
	private static final String USER="root";
	private static final String PASSWORD="123456";

	public static void main(String[] args)  {
		insert();
	}
	/**
	 * 添加功能
	 * 需要有注册驱动和登陆数据库的动作
	 * 鉴于之前的查询功能里也有相同操作,所以我们可以将这些数据定义为最终类来使用
	 */
	public static void insert() {
		Connection conn=null;
		Statement statement =null;
		try {
			//使用final修饰的变量
			Class.forName(DRIVER);
			conn=DriverManager.getConnection(URL,USER,PASSWORD);
			//定义SQL
			String sql = "insert into emp values(13,'刘博','男','2015-06-19','15963258965','10')";
			statement = conn.createStatement();
			int result=statement.executeUpdate(sql);//返回值类型是int
			System.out.println(result);
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				if(statement != null) {
					statement.close();
				} 
				if(conn!=null) {
					conn.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

3.修改数据

/**
	 * 修改数据
	 */
	public static void update() {
		Connection conn=null;
		Statement statement =null;
		try {
			//使用final修饰的变量
			Class.forName(DRIVER);
			conn=DriverManager.getConnection(URL,USER,PASSWORD);
			//定义SQL
			String sql = "update emp set ename='二狗子' where eno=13";
			statement = conn.createStatement();
			int result=statement.executeUpdate(sql);//返回值类型是int
			System.out.println(result);
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				if(statement != null) {
					statement.close();
				} 
				if(conn!=null) {
					conn.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

4.删除数据

/**
	 * 删除数据
	 */
	public static void delete() {
		Connection conn=null;
		Statement statement =null;
		try {
			//使用final修饰的变量
			Class.forName(DRIVER);
			conn=DriverManager.getConnection(URL,USER,PASSWORD);
			//定义SQL
			String sql = "delete from emp where eno=14";
			statement = conn.createStatement();
			int result=statement.executeUpdate(sql);//返回值类型是int
			System.out.println(result);
			
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			try {
				if(statement != null) {
					statement.close();
				} 
				if(conn!=null) {
					conn.close();
				}
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

添加、修改和删除唯一的区别就是定义SQL内容

5.JDBC封装

将添加、就该和删除数据的功能进行封装

/**
 * 数据库连接工具类
 */

public class DBUtil {
	private static final String DRIVER="com.mysql.cj.jdbc.Driver";
	private static final String URL="jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
	private static final String USER="root";
	private static final String PASSWORD="123456";

	private static Connection conn = null;
	
	/**
	 * 注册驱动
	 */
	static {
		//注册驱动只需要加载一次,所以可以用静态代码块,随着类的加载而加载
		try {
			newInstance();//调用Connection方法
			Class.forName(DRIVER);
		} catch (ClassNotFoundException | SQLException e) {
			System.out.println("驱动注册失败");
			e.printStackTrace();
		}
	}
	
	
	/**
	 * 获取数据库的连接对象
	 * @return
	 * @throws SQLException
	 */
	public static Connection newInstance() throws SQLException { //返回值类型是连接对象 
		if(conn==null) {
			//判断数据库是否为空,是的话再进行操作
			conn=DriverManager.getConnection(URL,USER,PASSWORD);
		}
		return conn;
	}
	
	/**
	 * 增删改通用方法
	 * 要执行的SQL
	 * @return
	 * 0代表返回失败 正数代表影响的行数
	 */
	public static int curdMethod(String sql) { //唯一的变量就是sql语句
		Statement statement =null;
		try {	
			statement = conn.createStatement();
			int result=statement.executeUpdate(sql);
			return result;//可能会出现返回异常
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			close(conn,statement,null);//调用close方法
		}
		return 0; //出现异常返回0
	}
	
	/**
	 * 关闭连接对象
	 * @param conn
	 * @param statement
	 * @param rs
	 */
	public static void close(Connection conn , Statement statement,ResultSet rs) {
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值