JDBC:为不同关系数据库提供相同的访问方式

目录

1. 定义

2. 常见类

3. 编程步骤

5. 常见类的常用方法

5.1 Connection 类

5.2 Statement 类

5.2.1 Statement

5.2.2 PreparedStatement

5.3 ResultSet 类

5.3.1 获取行

5.3.2 获取值

6. 示例代码 


1. 定义

JDBC:Java Database Connectivity。

是一种规范,提供一套访问数据库的接口。

数据库生产厂商根据 JDBC Driver 的接口,去实现各自的应用驱动。

JDBC:为不同关系数据库提供相同的访问方式

 

2. 常见类

DriverManager:管理数据库驱动程序的列表,查看加载的驱动是否符合 JAVA Driver API 的规范。

Connection:客户端与数据库所有交互都是通过connection对象完成的。

Statement:用于向数据库发送 SQL 语句。

PreperedStatement:

(1)相对于 Statement 对象,可以避免SQL注入的问题。

(2)Statement会使数据库频繁编译SQL,可能造成数据库缓冲区溢出。PreparedStatement 可对SQL进行预编译,从而提高数据库的执行效率。

(3)并且PreperedStatement对于sql中的参数,允许使用占位符的形式进行替换,简化sql语句的编写。

ResultSet:它是一个迭代器,用于检索查询数据。

 

3. 编程步骤

JDBC:为不同关系数据库提供相同的访问方式

 

(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/

 

上一篇:连接JDBC的快速入门


下一篇:JDBC(Java数据库连接)