Skip to content

54963332fd4da479f16821569a5645d4_MD5 这是非常基础的API.还有一些高级框架: 8ca2eef6c857237aafadc85db7427eb8_MD5 这些框架都是对JDBC的高级封装. 份额: be27cd7c62a2972e8c68df725ba17104_MD5 我们一般不会通过JDBC直接操作. 实际上,JDBC是面向接口的: c34e1be909b4487b68b93c9db85ba01a_MD5

示例操作

0b997f83b44459dac1135e9c4d97da7e_MD5 注册驱动:告诉程序我们要使用哪个数据库的驱动. 要获取SQL执行对象才能进行(步骤3)

创建程序

主要是三项依赖:

<dependencies>
    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <version>8.0.33</version>
    </dependency>

    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter</artifactId>
        <version>5.9.3</version>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.30</version>
    </dependency>
</dependencies>

测试

25602ae9a52c43a57e5be321d011bee8_MD5 executeUpdate能够执行所有的DML语句.(增删改)

样例

1fedb402a22dcf67d25650a091dc4e27_MD5 其中驱动的那里,表示使用的是mysql的驱动. b59d8d04b9044dd052de1de7d2fb86d9_MD5 e96968a3e9e5ab2e4e92610edd6c9712_MD5 bef41192446adfbd5d626c01e7b012f2_MD5 两个问号是两个占位符. prepareStatement如图: 905a2540bf21b9b5130053e30b058202_MD5 它可以用来执行sql语句.需要处理占位符. 上面这种用法叫做预编译sql. 这种方式推荐使用,性能更高更安全. 7a7a19bbda79765ee13aa912fe188b8f_MD5 结果集对象: 54f1b5250832f86059ea3347c0bf448a_MD5 next()会一行一行地向下走. 示例: 9e6a2ef065da1a413a0ed242a1fef033_MD5 最后关闭资源: b3038b6902e11bf672936cfa12d6b3f3_MD5

预编译SQL

3905c252bf8439cf96b8d5767729010c_MD5 静态SQL获取的是Statement对象,预编译SQL获取的是PreparedStatement.

我们一般的登录是这样的: 713ecbd5df0e5e614b756cd54f3733b9_MD5 查看count(*)是否是0,就知道有没有这个用户.这样是可以sql注入的. 如果使用静态sql: e049483d1dc035f41c9a8dc335c53a1e_MD5 8783c197142cd5458935a3583d51e709_MD5

预编译sql是可以预防sql注入的. tip:java -jar xxx.jar 就可以直接执行jar包 如果使用预编译sql,那么会把两个占位符同步发给sql服务器. 32b983e66de0023c4b1568b45eb8801b_MD5 是将整体发过去的.sql服务器同时还会对一些字符进行转义.这样会防止sql注入.

为什么性能更高?因为mysql有缓存: 执行多条时: b8cce3dbc75e7f4de23653cb76ea004e_MD5 这些都不能利用缓存.而使用delete from user where id=?;就可以很好利用缓存. 76f1629316789ab6aa4c6bf7b0fcb00f_MD5 这个过程中,如果多次输入delete from user where id=?,那么就缓存好了,不需要再编译了,直接在执行sql时把?替换成1 2 3即可.