JDBC
概述
JDBC是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问,它由一组用Java语言编写的类和接口组成。
一般是Java开发者制定了JDBC规范,数据库开发商实现接口,程序员学习JDBC规范.
API
集成在java.sql包中
DriverManager类作用:管理各种不同的JDBC驱动
Connection 接口 与特定数据库的连接
Statement 接口 执行sql
PreparedStatement接口 执行sql
ResultSet接口 接收查询结果
搭建步骤
1.导入Mysql数据库驱动包,里面就是具体的实现
File→Project Structure→Libraries→点击"+"号选择java
2.加载数据库驱动
1.Class.forName(“com.mysql.cj.jdbc.Driver”); //反射实现
2.DriverManager.registerDriver(new Driver());
//Class.forName("com.mysql.jdbc.Driver"); //mysql5驱动
//加载驱动
try {
Class.forName("com.mysql.cj.jdbc.Driver"); //利用反射机制记载Driver类
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
3.建立与数据库的连接
这需要使用DriverManager.getConnection()方法来创建一个Connection对象,它代表一个物理连接的数据库.
Connection connection = DriverManager.getConnection(url, USER, PASS);
/*URL:jdbc:mysql://ip(127.0.0.1):端口(3306)/数据库名?characterEncoding=utf8&useSSL=false&serverTimezone=UTC
USER:数据库用户名 PASS:数据库密码*/
4.向数据库发送sql语句
//两种方式
Statement st = connection.createStatement(sql语句); //获得Statement,用于向数据库发送sql语句(静态)
PrepareStatement ps = connection.prepareStatement(sql语句); //将sql语句预先编译到PreparedStatement,?是占位符,表示此处需要传值,并没有向数据库发送
PrepareStatement ps = connection.prepareStatement("insert into test(id,name) values(?,?)");
pst.setInt(1,id);
pst.setString(2,name);//然后通过指定的方法向sql语句中的占位符赋值,
PreparedStatement和Statement对比:
1.代码的可读性和可维护性.虽然用PreparedStatement来代替Statement会使代码多出几行,但这样的代码无论从可读性还是可维护性上来说.都比直接用Statement的代码高很多档次.
2.效率高,最重要的一点是极大地提高了安全性.PreparedStatement可以防止sql注入,通过特定的set方法赋值,在赋值时会进行预处理
5.接收查询的结果
PreparedStatement和Statement中的executeQuery()方法中会返回一个ResultSet对象,查询结果就封装在此对象中.
使用getXXX(String name)方法获得值
ResultSet res = pst.executeQuery();
//从ResultSet 中将数据取出来,res.next()方法表示是否有下一个数据,没有就是false
while(res.next()){
}
6.关闭与数据库的连接通道
pst.close();//通过close方法来关闭