JDBC工作原理
- JDBC API
由Sun公司提供的,包括java应用程序的各种不同数据库交互的接口,如connection (连接) Statement(执行sql命令) ResultSet(返回结果集) PreparedStatement 接口.
- JDBC Driver Manager
JDBC驱动管理程序,负责各种不同的jDBC驱动,把Java应用程序连接到jDBC驱动程序上,位于jdk的java.sql包下面
- JDBC驱动
由各厂家提供的,负责连接不同的数据库,mysql和oracle需要不同的数据库。
JDBC API介绍
- DriverManager:装载驱动程序,并且为创建数据库连接提供支持
- Connection:负责连接数据量并且传输数据任务
- Statement:由connection产生,负责执行sql语句
- resultSet:负责保存Statement执行返回的结果集
- preparedStatement:是statement的子接口,由connection产生,也是负责执行sql语句。他的安全性更高,高可读性
- 加载JDBC驱动
- 与数据库建立连接
JDBC访问数据库的步骤
Connection conn=DriverManager.getConnection(“连接字符串“,”用户名”,”密码”);
- 发送sql语句,并且返回结果
Statement st=conn.createStatement();
ResultSet rs=statement.executeQuery(“sql语句”);
- 处理返回的结果
While(rs.next()){
Int id=rs.getInt(“id”); 或者 int id=rs.getInt(0);
};
连接数据库
使用纯java方式连接数据库
package cn.jbit.example02;
import java.sql.Connection;
import java.sql.DriverManager;
public class example02 {
public static void Main(String[] args) {
Connection conn=null;
//加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
}
try {
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool","root","root");
logger.warn("连接成功");
System.out.println("连接成功");
} catch (Exception e) {
}finally {
try {
if(null!=conn) {
conn.close();
System.out.println("关闭连接成功!!");
}
} catch (Exception e) {
}
}
}
}
Statement接口和ResultSet接口
Connection接口的常用方法
方法名称 |
作用 |
Void close() |
立即释放 连接资源 |
Statement crementstatement() |
创建一个Statement的对象,来讲sql语句发送到数据库 |
PreparedStatement preparedStatement(String sql) |
创建一个preparedStatement对象将参赛化的sql语句发送到数据库 |
Boolean isCloseed() |
查询connection是否关闭 |
Statement接口的常用方法
方法名称 |
作用 |
Result ExecuteQuery(String sql) |
执行sql查询并且返回ResultSet的对象 |
Int executeUpdate(String sql) |
可以执行 insert,update,delete的操作,返回受影响行数 |
Boolean execute(String sql) |
可以执行任意的sql语句,若执行Result对象,则返回true,若执行更新计数或者不存在的结果,返回false |
ResultSet接口常用的方法
方法名称 |
作用 |
Boolean next() |
判断,将光标移到当前位置的下一行 |
Boolean previous() |
将光标移到上一行 |
Void close() |
关闭ResultSet对象 |
Int getInt(int CloumnIndex) |
以int 下标的形式获取该列的值 |
Int getInt(int CloumnName) |
以int列名的形式获取该列的值 |
float getFloate(int CloumnIndex) |
以float 下标的形式获取该列的值 |
Float getfloat(int CloumnName) |
以float列名的形式获取该列的值 |
String getString(int CloumnIndex) |
以String下标的形式获取该列的值 |
String getString(int CloumnName) |
以String列名的形式获取该列的值 |
Int getRow() |
得到光标当前所指行的行号 |
Boolean absolute(int row) |
将光标移动到指定的行 |
PreparedStatement接口
使用:PreparedStatement接口
方法名称 |
作用 |
Boolean execute() |
`可以执行任意的sql语句,若执行Result对象,则返回true,若执行更新计数或者不存在的结果,返回false |
ResultSet executeQuery() |
执行sql查询,返回ResultSet的对象 |
Int executeUpdate() |
可以执行 insert,update,delete的操作,返回受影响行数 |
Void setInt(int index,int x) |
将指定的参数设置给java int值,也就是给上面的sql语句的格式(?)设置值,前:下标1开始,后:值 |
Void setobject(int index,int x) |
给定对象设置指定参数 |
步骤:
- 创建PreparedStatement对象
通过connection的preparedStatement(String sql) 方法创建PreparedStatement 对象,sql语句可以一个或者多个参数,值用一个?占位符表示。
String sql=Update dog set name=?,health=? Where id=?
PreparedStatement ps=conn.preparedStatement(String sql);
- 给每个占位符的参数设置值
Ps.setInt(int index,int values); //第一个:是下标从1开始,第二个:是值
Ps.setString(int index,Stringvalues); //第一个:是下标从1开始,第二个:是值
- 执行sql语句
在设置各个参数值后,就可以调用preparedStatement的方法了(resultSet executeQuery), int execute() , boolean execute()