JDBC学习(二):PreparedStatement初体验

67 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第1天,点击查看活动详情

今天闲来无事,将之前学习的笔记都整理一下,下面几篇博客都是用来记录JDBC的学习过程。

什么是JDBC: 

在web开发中,不可避免的地要使用数据库来存储和管理数据。为了在java语言中提供数据库访问的支持,Sun公司于1996年提供了一套访问数据的标准Java类库,即JDBC。 

JDBC的全称是Java数据库连接(Java Database connect),它是一套用于执行SQL语句的Java API。应用程序可通过这套API连接到关系数据库,并使用SQL语句来完成对数据库中数据的查询、更新和删除等操作。 

 JDBC的实现包括三部分:

 (1)JDBC驱动管理器:负责注册特定的JDBC驱动器,主要通过java.sql. Driver Manager类实现。 

(2)JDBC驱动器API:由Sun公司负责制定,其中最主要的接口是java.sql. Driver接口。

 (3)JDBC驱动器:它是一种数据库驱动,由数据库厂商创建,也称为JDBC驱动程序JDBC驱动器实现了JDBC驱动器API,负责与特定的数据库连接,以及处理通信细节。

 PreparedStatement是Statement的子接口,相较于Statement,它的好处有:

 1、不用拼串,并解决了SQL注入问题 

 2、能够操作Blob类型的数据 

 3、可以实现更高效的批量操作 

package demo02;
 
import java.io.IOException;
import java.io.InputStream;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Properties;
 
import org.junit.jupiter.api.Test;
 
import com.mysql.jdbc.Connection;
 
public class TestPreparedStatement {
 
	@Test
	public void testInsert() {
		// 4. 获取连接
		Connection conn = null;
		PreparedStatement ps = null;
 
		try {
			// 1. 加载配置文件
			InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream("jdbc.properties");
			Properties pros = new Properties();
 
			pros.load(is);
 
			// 2. 读取配置信息
			String user = pros.getProperty("user");
			String password = pros.getProperty("password");
			String url = pros.getProperty("url");
			String driverClass = pros.getProperty("driverClass");
 
			// 3. 加载驱动
 
			Class.forName(driverClass);
 
			conn = (Connection) DriverManager.getConnection(url, user, password);
 
			// 5.预编译sql语句
			String sql = "insert into beauty(name,sex,borndate,phone)values(?,?,?,?)";
			ps = conn.prepareStatement(sql);
 
			// 6.填充占位符
			ps.setString(1, "刘亦菲");
			ps.setString(2, "女");
			ps.setString(3, "1986-02-03 00:00:00");
			ps.setString(4, "12345678910");
 
			// 7.执行操作(sql)
			ps.execute();
			System.out.println("insert successfully!");
		} catch (ClassNotFoundException e1) {
			e1.printStackTrace();
		} catch (IOException e1) {
			e1.printStackTrace();
		} catch (SQLException e1) {
			e1.printStackTrace();
		} finally {
			// 8.资源关闭
 
			try {
				if (ps != null)
					ps.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
 
			try {
				if (conn != null)
					conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
 
		}
 
	}
 
}

对应的数据库本来想直接贴sql文件代码的,但是一直提示有非法字符,排查不出来,就贴张图吧