JDBC
一,什么是JDBC(==========>mysql-connector-java-5.1.38.jar)
JDBC就是java语言用来操作mysql数据库的,通过java代码发送sql语句到数据库,在数据库执行操作(crue)在Java控制台显示。
二,什么是jdbc驱动?为什么每种数据库在发布后都会发布对应的驱动程序?
jdbc驱动就是java操作数据库的一个工具包,只要有了工具包java就可以操作数据库。在编写java代码的时候直接使用这个工具包就欧克,
三,jdbc的api
1)DriverManager:是驱动管理器
2)Connection对象:用来连接数据库
3)PreparedStatement对象和Statement对象:是用来发送sql语句执行对象。
4) 查询:ResultSet对象,结果集对象,对于查询的结果需要通过该对象获取。
[外链图片转存失败(img-FNN0wpgt-1569410823884)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1562549927565.png)]
java代码链接数据库的操作步骤(上一步的对象是下一步调用方法的)
1.获得jdbc驱动
(需要提前下载在oracle官网下载)
2.连接数据库
DriverManaer.getConnection() DriverManager是驱动管理器,getConnection()是专门用来链接数据库的对象。getConnection的参数是:jdbc:mysql://localhost:3306/数据库name 和超级管理员和数据库密码。
3.创建命令对象
PreparedStatement对象和Statement对象:是用来发送sql语句执行对象。
creatStatement在创建对象的时候不需要带sql语句,而是在下一步获得结果集的时候传入sql语句creatStatement的返回值是statement
而preparedStatement在创建实例的时候就要直接传入sql语句 他的返回值就是prepare’dStatement
4.获得结果集对象
获得ResultSet对象,结果集对象就是用statement或者用prepaedStatement调用executeQuert()方法 他的返回值是resultSet
5.查询结果集对象
然后用resulySet调用next()方法,返回值是Boolean,在注入式攻击的时候可以当作方法的返回值
在resulySet没有调用next()方法之前,可以把sesulySet看作是一张表(指证),他在表的第一行的前面,每调用next()方法一次指针就下移一行,如果指针下面有值就返回TRUE如果没有就返回false
6.反向关闭(先开的后关)
如果对象不等于null就关掉
public class jdbc2 {
public static void main(String[] args) throws SQLException {
mendth(30);
}
public static void mendth(int deptNO) throws SQLException {
ResultSet resultSet=null;
Statement statement=null;
Connection connection=null;
try {
//创建驱动jdbc
Class<?> aClass = Class.forName("org.gjt.mm.mysql.Driver");
//和数据库进行链接,获得数据库的对象
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/students","root","1234");
//创建命令对象
statement = connection.createStatement();
//查询sql语句
String sql="select*from dept where deptno="+deptNO;//写sql语句
//结果集
resultSet = statement.executeQuery(sql);
if(resultSet.next()){
String loc = resultSet.getString("loc");
String dname = resultSet.getString("dname");
int deptno = resultSet.getInt("deptno");
System.out.println("查询数据库的结果是:");
System.out.println(loc+" "+dname+" "+deptno);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if(null!=resultSet){
resultSet.close();
}
if(statement!=null){
statement.close();
}
if(connection!=null){
connection.close();
}
}
}
}
四,jdbc处理事务的步骤
1.获得驱动
Class<?> aClass = Class.forName("org.gjt.mm.mysql.Driver");
2,获得connection对象,连接数据库
3.用同一个connection对象执行一组sql语句,也就是一个事务
4.设置提交方式为手动提交
setAutocommit=false;
5.异常回滚
6.正常提交
案例
package day13.jdbc;
import day12.dao.DBUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class TransactionTest {
/**
* 转账案例jdbc处理事务
* @param args
* @throws SQLException
*/
public static void main(String[] args) throws SQLException {
testJbdc();
}
//jbbc处理事务
public static void testJbdc() throws SQLException {
PreparedStatement st=null;
Connection connection = DBUtil.getConnection();
try {
//设置提交方式为手动提交
connection.setAutoCommit(false);
//扣款
String sql="update bank set balance=balance-10000 where name='zhangsan'";
String SQL="update bank set balance=balance+10000 where name='lisi'";
st = connection.prepareStatement(sql);
//收到扣款
int update =st.executeUpdate();
st=connection.prepareStatement(SQL);
int update2=st.executeUpdate();
if(update>0&&update2>0){
//正常提交
connection.commit();
System.out.println("正常提交!!!!!!!");
}
} catch (Exception e) {
//回滚
connection.rollback();
System.out.println("回滚!!!!!!!!!!!");
e.printStackTrace();
}finally {
DBUtil.CloseAll(null,st,connection);
}
}
}
滚
connection.rollback();
System.out.println(“回滚!!!!!!!!!!!”);
e.printStackTrace();
}finally {
DBUtil.CloseAll(null,st,connection);
}
}
}