4.1 JDBC概述
JDBC:全称java database connectivity,java数据库连接。
JDBC四个核心对象
1.DriverManager
用于注册数据库驱动
2.Connection
数据库连接对象
3.Statement
数据库语句对象,用于执行sql语句
4.ResultSet
执行查询语句返回的结果集
4.2 初识JDBC程序
使用实例:
通过JDBC技术查询出数据库中的数据,并在控制台进行打印。
开发步骤1:搭建数据库环境以及准备数据
具体步骤:
1.创建一个数据库
2.在该数据库中创建一个数据表
3.往数据表中插入若干条数据
开发步骤2:创建 Web Project,添加mysql数据库驱动包。
mysql-connector-java-5.1.0-bin.jar
开发步骤3:实现JDBC操作
具体步骤:
1.通过反射加载驱动
2.创建连接对象
3.通过Connection的对象,创建执行sql语句的Statement对象
4.通过调用Statement接口中的executeQuery()方法执行sql语句,返回的结果存储在rs集合中
5.处理结果
6.关闭资源
具体代码如下:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class MyFirstJdbc {
private static String url=“jdbc:mysql://127.0.0.1:3306/dept?useUnicode=true&characterEncoding=utf-8”;
private static String user=“root”;
private static String password=“abc123”;
private static String sql=“select * from depts”;
public static void main(String[] args) {
try {
//1.通过反射加载驱动
Class.forName(“com.mysql.jdbc.Driver”);
//2.创建连接对象
Connection conn=DriverManager.getConnection(url, user, password);
//3.通过Connection的对象,创建执行sql语句的Statement对象
Statement stmt=conn.createStatement();
//4.通过调用Statement接口中的executeQuery()方法执行sql语句,返回的结果存储在rs集合中
ResultSet rs=stmt.executeQuery(sql);
//5.处理结果
while(rs.next()){
System.out.println(rs.getObject(“did”)+" "+rs.getObject(“dname”));
}
//6.关闭资源
rs.close();
stmt.close();
conn.close();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
注意:
1.getConnection()方法为静态方法,因此可以通过类名.方法名调用。而涉及的其它方法如createStatement()以及executeQuery()为非静态方法,需要通过对象名.方法名进行调用。
2.关闭资源时需要从下往上关闭,即先关闭ResultSet的对象,再关闭Statement的对象,最后关闭Connection的对象。
4.3 JDBC常用的类和接口
4.3.1 java.sql.DriverManager类
通过调用DriverManager类中的getConnection(String url,String user,String password)方法能够获取Connection 的对象。该方法为静态方法,可以直接通过类名.方法名进行调
用。在调用该方法获取Connection 的对象之前需要先通过反射加载数据库驱动。
代码示例:
//1.通过反射加载驱动
Class.forName(“com.mysql.jdbc.Driver”);
//2.创建连接对象
String url=“jdbc:mysql://127.0.0.1:3306/dept?useUnicode=true&characterEncoding=utf-8”;
String user=“root”;
String password=“abc123”;
Connection conn=DriverManager.getConnection(url, user, password);
数据库url:
url用于标识数据库的位置,其作用是通知JDBC程序连接哪个数据库。
url的写法:
协议+子协议+主机:端口号+数据库名?参数1=值1&参数2=值2…
4.3.2 java.sql.Connection 接口
客户端与数据库的所有交互都是通过Connection的对象完成。
Connection 接口中常用的方法:
createStatement()
作用:创建一个 Statement对象,用于将SQL语句发送到数据库。
prepareStatement(String sql)
作用:创建一个 PreparedStatement对象,用于将参数化的SQL语句发送到数据库。
注意:该方法可以对SQL语句进行预编译
4.3.3 java.sql.Statement 接口
常用方法
方法:
1.executeQuery(String sql)
2.executeUpdate(String sql)
说明:
1.用于执行select查询语句,返回代表结果集的ResultSet对象
2.用于执行insert、update或delete语句,返回值为int类型,表示影响的行数;大于0说明执行成功。
4.3.4 java.sql.PreparedStatement 接口
SQL注入:
SQL注入是用户利用某些系统没有对输入数据进行充分检查,从而进行恶意破坏的行为。
Statement存在sql注入问题。
PreparedStatement 对象相对于Statement对象的优点:
1.可以避免SQL注入问题
2.PreparedStatement 对象可对SQL进行预编译,从而提高数据库的执行效率。
相对的Statement 对象会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。
3.PreparedStatement 对象可以使用占位符对SQL语句中的参数进行替换,简化SQL语句的编写。
4.3.5 java.sql.ResultSet 接口
jdbc程序中的ResultSet用于代表sql语句的执行结果。ResultSet封装执行结果时,采用的类似于表格的方式。ResultSet对象维护了一个指向表格数据行的游标,初始的时候,游标
在第一行之前,调用ResultSet.next()方法后,可以使游标指向具体的数据行。
1.移动游标的方法
方法:
next()
说明:
每调用一次将光标从当前位置向前移一行。
2.获取每一行中各列的数据
通过循环ResultSet.next()方法指向结果集中的每一行,得到具体的一行之后,再调用get()方法来获取当前行每一列的数据。
方法:
1.getObject(int index)
2.getObject(String columnName)
说明:
1.根据列索引(索引值从1开始)获取object类型数据
2.根据列名称获取object类型数据