概念
JDBC是由Oracle公司提供的一个**接口**,作用是**让java操作可以操作数据库。**
JDBC实现步骤
1.导入JAR包
2.注册驱动(在mysql5.0版本之后可以不同手动注册驱动)
3.获取链接对象
4.获取执行者对象
5.执行SQL语句
6.处理结果
7.关闭资源
注册驱动(DriverManager)
Class.forName("com.mysql.jdbc.Driver");
//在底层其实就是一个静态代码块中调用了一个registerDriver方法,方法里面new了一个Driver
/*
在mysql的jar包中是提供了一个Driver类,Class.form(Driver的路径)->将类加载到内存中,通过下面这个静态方法会在字节码文件中生成一个clinit方法,静态方法会随着类加载到内存中,使调用者就可以注册驱动。在mysql版本5之后就不用手动注册驱动。
static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
}
*/
connection(连接)
作用:
1.获取执行者对象
//通过驱动给管理,获取连接对象
Connection connection= DriverManager.getConnection();
//连接对象获取执行者对象
Statement sta=connection.createStatement();//此对象存在一个SQL注入的问题,开发不会使用。
//通过连接对象获取预编译对象
PreparedStatement ps=connection.preparedStatement("SQL语句");//可以解决SQL注入的问题
2.事务管理
3.释放资源
@Test
public void test1(){
Connection connection = null;
PreparedStatement ps1 = null;
PreparedStatement ps2 = null;
try {
connection = DriverManager.getConnection("jdbc:mysql:///day22", "root", "root");
//开启事务
connection.setAutoCommit(false);
//?代表暂位符号
String sql1="update account set balance=balance-500 where id=?;";
String sql2="update account set balance=balance+500 where id=?;";
//给占位符设置参数
ps1 = connection.prepareStatement(sql1);
ps2 = connection.prepareStatement(sql2);
ps1.setInt(1,1);
ps2.setInt(1,2);
ps1.executeUpdate();
ps2.executeUpdate();
//如果没有出现异常就提交事务
connection.commit();
} catch (SQLException throwables) {
//如果出现异常事务回滚
try {
connection.rollback();
} catch (SQLException e) {
e.printStackTrace();
}
throwables.printStackTrace();
}finally {
//关闭资源
if(ps1!=null){
try {
ps1.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(ps2!=null){
try {
ps2.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
}
Statement(语句)
1.封装SQL语句
2.执行sql语句
- DML(增删改):结果为int类型
使用executeUpte()
- DQL(查询):结果为结果集类型
使用executeQuery()
3.释放资源
- void close();
4.preparStatement(SQL语句)
设置占位符:
setXXX(占位符位置,占位符实参);
例如
setInt(1,10);->表示第1个占位符,参数是10
ResultSet(结果集)
存储结构(mysql结果在java中的数据结构)
list<map<string,object>> map中的String就是字段名,Object就是数据。
1.判断结果集中是否还有数据,boolean next();
有数据返回true,并将索引向下移动一行。
没有数据就返回false
2.获取结果集中的数据:XXX getXXX("列名")
例如:字段是int类型就是:int getInt("列名");
3.释放资源
void.close();
原理图: