JDBC
jDBC简介
Java是通过JDBC技术实现对数据的访问的,JDBC是java数据库(Java database connectivity)技术的简称,它充当java应用程序与各种不同的数据库之间的媒介,吧数据持久化,这就是一种持久化机制
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驱动(可能会引发异常,所以用ClassNotFoundExeception来声明try——catch)
a) Class.forName(“JDBc驱动类名称”);
- 与数据库建立连接
a) Connection conn=DriverManager.getConnection(“数据库连接字符串“,”数据库用户名”,”密码”);
- 发生sql语句,并且返回结果
a) Statement st=conn.createStatement(); //创建执行sql语句的对象
b) ResultSet rs=statement.executeQuery(“sql语句”); //返回结果集
- 处理返回的结果
While(rs.next()){ //判断是否有下一行的数据
//读取
Int id=rs.getInt(“id”); 或者 int id=rs.getInt(0);
};
连接数据库
使用纯java方式连接数据库
需要引入jar包,mysql-connector-java-5.1.0-bin.jar
package cn.jbit.example02;
import java.sql.Connection;
import java.sql.DriverManager;
import org.apache.log4j.Logger;
public class example02 {
private static Logger logger=Logger.getLogger(example02.class.getName());
public static void main(String[] args) {
Connection conn=null;
//加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO: handle exception
logger.error(e);
}
try {
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/myschool","root","root");
logger.warn("建立连接成功啦");
System.out.println("建立连接成功啦");
} catch (Exception e) {
// TODO: handle exception
logger.error(e);
}finally {
try {
if(null!=conn) {
conn.close();
System.out.println("关闭连接成功!!");
}
} catch (Exception e) {
// TODO: handle exception
logger.error(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接口
为了防止sql注入攻击,原因是statement接口方法是要进行sql语句的拼接.不仅麻烦而且存在安全隐患,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()