四种驱动程序
MySQL
SQL Service
Oracle
DB2
事物控制(–是JDBC总一种让多条SQL语句作为一个整体,必须整体成功或整体失败的技术。
主要控制的是DML语句,需要保证数据的完整性。DQL 不参与事物
)
transaction
复杂业务:需要多条sql语句共同完成
整体性 同时成功或同时失败
原子性:
步骤:三步 都由一个对象完成 –Connection:
多条语句必须放到同一个连接完成
1、开启事物–设置AutoCommit(false)自动提交为假。
2、事物整体提交(整体成功)最后 执行 con.commit();整体提交
3、事物整体回滚。如果(整体失败) 执行 com.rollback();整体回滚
package com.lovo.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
/*
* 事务---Transaction---是JDBC中一种让多条SQL语句作为一个整体,必须整体成功或整体失败的技术。
* 主要控制的是DML语句,需要保证数据的完整性。DQL语句可以不参与事务。
* 这多条语句必须放到同一个连接中完成。
* 事务操作分为三步----这三步都由一个对象完成---Connection:
* 1、开启事务;
* 2、事务整体提交;
* 3、事务整体回滚。
*/
public class TestTransaction {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Connection con = null;
try {
con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test134" +
"?useUnicode=true&characterEncoding=utf8&useSSL=false", "root", "root");
con.setAutoCommit(false);//开启事务--设置自动提交为假
String insertSQL = "insert into t_team(f_teamName,f_teamCountry,f_teamCoach,f_teamNum,fk_groupid) " +
"values(?,?,?,?,?);";
String updateSQL = "update t_group set f_groupNum = f_groupNum+1 where pk_groupid = ?";
PreparedStatement insertPS = con.prepareStatement(insertSQL);
PreparedStatement updatePS = con.prepareStatement(updateSQL);
insertPS.setString(1, "龙之队");
insertPS.setString(2, "中华人民共和国");
insertPS.setString(3, "里皮");
insertPS.setInt(4, 23);
insertPS.setInt(5, 6);
updatePS.setInt(1, 6);
insertPS.executeUpdate();
updatePS.executeUpdate();
con.commit();//整体提交
} catch (SQLException e) {
// TODO Auto-generated catch block
try {
con.rollback();//整体回滚
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
e.printStackTrace();
} finally{
if(con != null){
try {
con.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
数据库操作步骤
1、加载驱动--告诉驱动管理器我们将使用哪一个数据库的驱动包
2、操作JDBC API 完成数据库动作
2-1 获取连接
URL--统一资源定位符 --样式: 协议//://ip地址:端口号/服务
协议: 使用的是MySQL的数据库
所以使用MySQL的协议jdbc:mysql://127.0.0.1:3306/test134
2-2 书写SQL语句 字符串拼接
2-3 获取语句对象– Statement 对象
2-4 执行语句对象 –所有的DML语句,全部执行executeUpdate()方法
常见的JDBC API
Driver 驱动
Connction接口 连接 建立通道
Statement 语句对象 增删改的 封装
ResultSet 查询语句返回的结果集
preparedStatement 指代预编译语句
作用:
1、可以完全替代stament ,执行executeUpdate()和executeQuery();
2、预编译解决 SQL 注入攻击
3、因为在执行之前就把语句和String SQL绑定上了(交给数据库预先编译了),执行时不能再改变SQL的结构
注意:
1、?是用来替代语句中的数据值的位置,不能替代跟结构有关的任何内容;
表名 列名,关键字 不能出现?
?的出现 从1 开始 不是从0 开始。
2、使用?替代字符串值的时候不能打上引号。
3、不要滥用预编译,预编译语句过多会影响数据库性能,一个项目中不要超过一百条
当数据值是由外部文本输入的时候,才用