欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-29 19:39:06
...

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

第一节: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文档吧,红色区域圈的是这个方法使用的一个例子
JDBC的学习(第四节:使用PreparedStatement接口实现增、删、改的操作)看一下添加语句的代码,比较一下与上一章的不同在哪里

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就代表第一个坑,必须要一一对应!!!

执行的效果
JDBC的学习(第四节:使用PreparedStatement接口实现增、删、改的操作)看一下数据库中的表
JDBC的学习(第四节:使用PreparedStatement接口实现增、删、改的操作)

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

  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("数据更新失败!");
		}
		
	}
}

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

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("数据删除失败!");
		}
		
	}
}

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

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

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