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

第一节: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文档吧,红色区域圈的是这个方法使用的一个例子

statement删除 preparedstatement删除用法_sql语句

看一下添加语句的代码,比较一下与上一章的不同在哪里

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

执行的效果

statement删除 preparedstatement删除用法_statement删除_02

看一下数据库中的表

statement删除 preparedstatement删除用法_sql_03

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

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

看下效果

statement删除 preparedstatement删除用法_sql语句_04

statement删除 preparedstatement删除用法_sql_05

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

看效果

statement删除 preparedstatement删除用法_Java项目与MySQL数据库的交互_06

statement删除 preparedstatement删除用法_sql_07

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