什么是JDBC
JDBC, Java Database Connecive, Java 数据库连接,是一组专门负责连接并操作数据库的标准,在整个JDBC
中实际上大量的提供的是接口。针对于各个不同的数据库生产商 ,只要想使用JAVA 进行数据库的开发,则对这些标准有所支持。
JDBC操作步骤
- 加载数据库驱动程序
- 连接数据库,通过Connection 接口和 DriverManager 类完成
- 操作数据库,通过Statement、PreparedStatement、ResultSet 三个接口完成
- 关闭数据库
加载数据库
我使用的是mysql连接,需要将mysql-connector-java-8.0.17.jar(我使用的是这个版本)这个包导入到项目之中。
IDEA导入方法是,File -> project structre -> 左边选择Modules -> 在这个包管理界面,点击右侧的➕ -> 通过你的包的路径,选择这个jar包即可导入。
连接数据库
1 | public class Demo { |
连接的时候遇到了几个问题。
1.报错:Loading class com.mysql.jdbc.Driver
. This is deprecated. The new driver class is com.mysql.cj.jdb
这个问题是因为高版本的驱动,连接class有所修改,forname()里面需要写“com.mysql.cj.jdbc.Driver” 而不是”com.mysql.jdbc.Driver”
2.报错:SQLException: The server time zone value ‘�й���ʱ��’ is unrecognized
在配置datasource.url时出现了时区不一致的问题,在后面加上“?serverTimezone=UTC”即可
3.这里有两个异常操作,Java基础不是很好,暂时无法理解为什么这么写,先记住就好。
操作数据库
Statement接口
1 | public class Demo1 { |
建立连接和前面时一致的。主要是中间的执行有所区别。
Statement是通过一个String来存储所要进行的sql操作,然后通过execute()方法来实现要进行的操作。存储的sql操作支持字符串拼接,可以将values的值拼接成一句sql语句。
这种可拼接的方法就带来了一个问题,叫做SQL注入。什么是SQL注入,也就是说,你在拼接的过程中是没有进行字符串检查的,万一在某个where语句后面拼接时,出现了判断结果与你预期的不一致,最后导致数据库内容出错,甚至删库的情况出现。视频讲解并不推荐这种方法。
PreparedStatement接口
1 | public class Demo2 { |
PreparedStatement作为Statement的子类,可以使用预编译,然后传参的方法,来实现sql语句。符号”?”作为占位符,为后面传参做准备。
传参一共有两种方法可以使用。
一种是明确传参类型。比如传参是String类型,就用setString()方法来传参。第一个参数是表示位置信息,第二个是你要插入的数据。插入int就用setInt()方法,其他的类似。
另一种是不明确传参类型。使用setObject()方法传所有参数。