今天闲来无事,将之前学习的笔记都整理一下,下面几篇博客都是用来记录JDBC的学习过程。
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文件代码的,但是一直提示有非法字符,排查不出来,就贴张图吧