目录
1. 定义
JDBC:Java Database Connectivity。
是一种规范,提供一套访问数据库的接口。
数据库生产厂商根据 JDBC Driver 的接口,去实现各自的应用驱动。
2. 常见类
DriverManager:管理数据库驱动程序的列表,查看加载的驱动是否符合 JAVA Driver API 的规范。
Connection:客户端与数据库所有交互都是通过connection对象完成的。
Statement:用于向数据库发送 SQL 语句。
PreperedStatement:
(1)相对于 Statement 对象,可以避免SQL注入的问题。
(2)Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。PreparedStatement 可对SQL进行预编译,从而提高数据库的执行效率。
(3)并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。
ResultSet:它是一个迭代器,用于检索查询数据。
3. 编程步骤
(1)加载驱动程序
Class.forName(driverClass)
//加载MySql驱动
Class.forName("com.mysql.jdbc.Driver")
//加载Oracle驱动
Class.forName("oracle.jdbc.driver.OracleDriver")
Class.forName() 的作用就是将 class 加载到内存中,而这个 driveClass 其实就是实现了java.sql.Driver(在java.lang.Object包下找到)接口的类;
当使用 Class.forName(driverName) 加载驱动类到内存中的时候,同时会执行这个驱动类中的静态代码块,创建一个 Driver 实例,然后调用 DriverManager.registerDriver(Driver实例) 进行驱动注册,供后面使用。
(2)获得数据库连接
DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/imooc", "root", "root");
(3)创建 Statement 或者 PreparedStatement 对象,执行操作
conn.createStatement();
conn.prepareStatement(sql);
(4)获得结果,并处理
(5)释放资源,包括 ResultSet 对象,Statement 对象, Connection 对象。
5. 常见类的常用方法
5.1 Connection 类
创建方法为:
Connection conn = DriverManager.getConnection(url,user,pass);
常用方法:
createStatement() | 创建向数据库发送 sql 的 statement 对象 |
prepareStatement (sql) | 创建向数据库发送预编译 sql 的 preparedstatement 对象 |
prepareCall(sql) | 创建执行存储过程的 callableStatement 对象 |
setAutoCommit(boolean autoCommit) | 设置事务是否自动提交 |
commit() | 在这个 connection 上提交事务 |
rollback() | 在这个 connection 上回滚事务 |
5.2 Statement 类
5.2.1 Statement
创建方法为:
Statement st = conn.createStatement();
Statement对象常用方法:
executeQuery( String sql ) | 用于向数据库发送查询语句 |
executeUpdate( String sql ) | 用于向数据库发送insert、update或delete语句 |
execute( String sql ) | 用于向数据库发送任意sql语句 |
addBatch(String sql) | 把多条sql语句放到一个批处理中 |
executeBatch() | 向数据库发送一批sql语句执行 |
Statement st = null;
// 获取用于向数据库发送sql语句的statement
st = conn.createStatement();
// 向数据库发sql
String sql = "select id,name,password,email,birthday from users";
st.executeQuery(sql);
5.2.2 PreparedStatement
PreparedStatement 类是 Statement 的子类,创建方法为:
PreperedStatement st = conn.preparedStatement()
在 SQL 语句中使用占位符:
PreperedStatement st = null;
String sql = "select * from users where name=? and password=?";
//获取用于向数据库发送sql语句的Preperedstatement
st = conn.preparedStatement(sql); //在此次传入,进行预编译
st.setString(1, username);
st.setString(2, password);
//向数据库发sql
st.executeQuery();//在这里不需要传入sql
5.3 ResultSet 类
5.3.1 获取行
next() | 移动到下一行 |
previous() | 移动到前一行 |
absolute() | 移动到指定行 |
beforeFirst() | 移动到 resultSet 的最前面 |
afterNext() | 移动到 resultSet 的最后面 |
5.3.2 获取值
获取任意类型的数据 | getObject( int index ) getObject( String columnName) |
获取指定类型的数据 | getString( int index ) getString( String columnName ) …… |
ResultSet rs = null;
// 向数据库发sql,并获取代表结果集的resultset
String sql = "select id,name,password,email,birthday from users";
rs = st.executeQuery(sql);
// 取出结果集的数据
rs.afterLast();
rs.beforeFirst();
while(rs.next()){
System.out.println("id=" + rs.getObject("id"));
System.out.println("name=" + rs.getObject("name"));
System.out.println("password=" + rs.getObject("password"));
System.out.println("email=" + rs.getObject("email"));
System.out.println("birthday=" + rs.getObject("birthday"));
}
6. 示例代码
https://github.com/ShayneChenGit/demo-jdbc
mysql-connector-java的jar包地址:https://repo1.maven.org/maven2/mysql/mysql-connector-java/