JDBC的学习(第四节:使用PreparedStatement接口实现增、删、改的操作)

本次的学习主要分为九个部分

第一节:JDBC的概述

第二节:JDBC连接数据库

第三节:使用Statement接口实现增、删、改操作

第四节:使用PreparedStatement接口实现增、删、改的操作

第五节:Resultset结果集

第六节:处理大数据对象

第七节:使用CallableStatement接口调用存储过程

第八节:使用元数据分析数据库

第九节:JDBC的事务处理事务

下面是第四部分,其他部分可以通过上面的链接访问

4.使用PreparedStatement接口实现增、删、改的操作

  1. PreparedStatement 接口引入 使用PreparedStatement接口实现增、删、改的操作
    PreparedStatement 是 Statement 的子接口,属于预处理操作,与直接使用 Statement 不同的是,PreparedStatement
    在操作时,是先在数据表中准备好了一条 SQL 语句,但是此 SQL 语句的具体内容暂时不设置,而是之后再进
    行设置。
    (现在开发一般用 PreparedStatement ,不用 Statement )
  2. 使用 PreparedStatement 接口实现添加数据操作
  3. 使用 PreparedStatement 接口实现更新数据操作
  4. 使用 PreparedStatement 接口实现删除数据操作

老样子,先看一下jdk文档吧,红色区域圈的是这个方法使用的一个例子
在这里插入图片描述看一下添加语句的代码,比较一下与上一章的不同在哪里

package chap4_sec02;

import java.sql.Connection;
import java.sql.PreparedStatement;

import model.Book;
import util.DbUtil;

public class Demo1 {
	private static DbUtil dbUtil = new DbUtil();
	private static int addBook(Book book) throws Exception{
		Connection con=null;
		con=dbUtil.getCon();//获取连接
		//数据添加的sql语句,然后挖四个坑,四个坑代表表中的四个属性
		//这个做的就是预编译
		String sql="insert into t_book values(null,?,?,?,?)";
		PreparedStatement pstmt= con.prepareStatement(sql);
		//下面是给四个坑填值
		pstmt.setString(1, book.getBookName());
		pstmt.setFloat(2, book.getPrice());
		pstmt.setString(3, book.getAuthor());
		pstmt.setInt(4, book.getBookTypeId());
		//返回的值是执行sql语句之后得表受影响的数据的条数
		int result=pstmt.executeUpdate();
		dbUtil.close(pstmt, con);
		return result;
	}
	public static void main(String[] args) {
		//float数据类型必须加f,不加默认小数是double类型的
		Book book=new Book("星火英语",42.3f,"李白",5);
		try {
			int result = addBook(book);
			System.out.println("数据添加成功!");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("数据添加失败!");
		}
		
	}
			
}

一定要注意一致性的问题,下面的1就代表第一个坑,必须要一一对应!!!

执行的效果
在这里插入图片描述看一下数据库中的表
在这里插入图片描述

看一下我写的代码:简单的说一下
相同:

  1. 都要获取数据库的连接,并且获取的方法一样,都是得到con
  2. 都得关闭打开的两个东西,数据库连接和preparestatement(statement)
  3. 执行sql语句之后返回的结果与前面的statement一样,返回的都是受到影响的条(行)数,行这个字在这里其实用数据库语言写完整的数据库(创建,增删改查,事务)的时候,就能看到数据库下面写的受影响的条数

不同:

  1. sql语句中把变量替换成了问号,把变量从sql语句里面抽离出来了,在后面再添加

个人看法

  1. 第二种更适合Java,其中也有面向对象的思维,用第一种方法,很明显是面向过程的,
  2. 用第一种方法真的很容易写错,第二种方法写的我目前没错过
  3. 第二种方法的sql语句的书写的语法更像真正的sql语句,第一种方法写出来的感觉就乱了

下面就不写看法了,直接上删和改的部分的代码

===========================================================================================================

据库的数据的更新(修改)的代码

package chap4_sec03;

import java.sql.Connection;
import java.sql.PreparedStatement;

import model.Book;
import util.DbUtil;

public class Demo1 {
	private static DbUtil dbUtil = new DbUtil();
	private static int updateBook(Book book) throws Exception{
		Connection con=null;
		con=dbUtil.getCon();//获取连接
		//数据更新的sql语句,然后挖五个坑,四个坑代表表中的四个属性
		String sql="update t_book set bookName=?,price=?,author=?,bookTypeId=? where id=?";
		PreparedStatement pstmt= con.prepareStatement(sql);
		//下面是给五个坑填值
		pstmt.setString(1, book.getBookName());
		pstmt.setFloat(2, book.getPrice());
		pstmt.setString(3, book.getAuthor());
		pstmt.setInt(4, book.getBookTypeId());
		//千万不要把第五条漏了,where语句后面跟的是条件
		pstmt.setInt(5, book.getId());
		//返回的值是执行sql语句之后得表受影响的数据的条数
		int result=pstmt.executeUpdate();
		//关闭数据库
		dbUtil.close(pstmt, con);
		return result;
	}
	public static void main(String[] args) {
		//float数据类型必须加f,不加默认小数是double类型的
		Book book=new Book(5,"星火英语2",52.3f,"李白",10);
		try {
			int result = updateBook(book);
			System.out.println("数据更新成功!");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("数据更新失败!");
		}
		
	}
}

看下效果
在这里插入图片描述在这里插入图片描述

sql语句不一样了,然后注意,这里是五个“坑”,还要注意坑的顺序

上面把添加和更新的部分写完了,下面写的是删除

=========================================================================================================

老样子,还是删除部分的最简单 直接把主键(id) 传过去就行了,只需要一个坑

package chap4_sec04;

import java.sql.Connection;
import java.sql.PreparedStatement;

import util.DbUtil;

public class Demo1 {
	private static DbUtil dbUtil=new DbUtil();
	private static int deleteBook(int id)throws Exception{
		Connection con=null;
		con=dbUtil.getCon();
		String sql="delete from t_book where id=?";
		PreparedStatement pstmt=con.prepareStatement(sql);
		pstmt.setInt(1, id);
		int result = pstmt.executeUpdate();
		return result;
	}
	public static void main(String[] args) {
		try {
			int result=deleteBook(5);
			System.out.println("数据删除成功!");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("数据删除失败!");
		}
		
	}
}

看效果
在这里插入图片描述

在这里插入图片描述

通过上面的学习我们知道,其实第四节的方法和第三节的方法其实是差不多的,主要区别就是挖坑和填坑上面,记住一定要一一对应。

需要学习的时候用到的数据库和所有的源代码,请去百度网盘提取
链接:https://pan.baidu.com/s/1wDL_aFCPQ9WAZ_vSy6UVdg
提取码:hime

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值