常用 Class.format(com.mysql.jdbc.Driver); //用来添加数据库驱动
其中com.mysql.jdbc.Driver是驱动的路径;
2.连接:连接的前提是调用 java.sql.* 包中的API ;
用到的是 DriverManager类中的DriverManager.getConnection()方法
此方法中有三个参数:
1.数据库的地址
url:"jdbc:mysql://127.0.0.1:3306/db_jdbc_demo?characterEncoding=utf8&useSSL=false" ;`
用来连接本机的Mysql 数据库
2.数据库名字
name = “root”;
3.数据库密码
passwd= “123456”;
Connections conn = DriverManger.getConnection(url,name,passwd);
3.执行SQL语句需要使用一个类型为Statement或PreparedStatement的对象,并提交一个SQL语句到数据库执行查询
Statement类型:
Statement stmt = conn.createStatement();
它是调用conn 方法里的 CreateStatement() 方法;
用String类型的数据写SQL 语句
String sql = “SELECt id, first, last, age FROM Employees”;
用到的ResultSet 接受结果集合
ResultSet rs = stmt. executQuery(sql);
如果输出打印结果的话 rs中用两个方法:
while(rs.next()){ //rs.next(), 是否有下一个
int id = rs.getInt("id"); // 用rs 中的 getXXX来取出该字段的内容,该字段什么类型的就用 java什么类型的数据接受
System.out.println("id:" +id);
}
PreparedStatement类型:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class Demo07 {
public static void main(String[] args) {
//有本机默认地址
String url = "jdbc:mysql://127.0.0.1:3306/db_jdbc_demo?characterEncoding=utf8&useSSL=false";
String name = "root";
String passwd="123456";
Connection conn = null;
PreparedStatement pstmt = null;
Scanner sc = new Scanner(System.in);
int idFK = 0;
int idSK = 0;
double money = 0;int result = 0;
System.out.print("请输入付款方ID号");
idFK = sc.nextInt();
System.out.print("请输入收款方ID号");
idSK = sc.nextInt();
System.out.print("转账金额");
money = sc.nextDouble();
try{
String sql1 = "UPDATe into t_emp SET salary = salary-? WHERe id = ?";
String sql2 = "UPDATE into t_emp SET salary = salary+? WHERe id = ?";
Class.forName("com.mysql.jdbc.Driver");
//获取连接后要开启事物(Mysql 默认自动提交)
conn = DriverManager.getConnection(url,name,passwd);
conn.setAutoCommit(false);
pstmt = conn.prepareStatement(sql1);
pstmt.setInt(2,idFK);
pstmt.setDouble(1,money);
pstmt = conn.prepareStatement(sql2);
pstmt.setInt(2,idSK);
pstmt.setDouble(1,money);
result += pstmt.executeUpdate();//执行代码 :更新
if (result==2){
System.out.println("修改成功");
conn.commit();
}else{
System.out.println("修改失败");
}
System.out.println(result);
}catch (Exception e){
e.printStackTrace();
System.out.println("转账异常,正在回滚数据");
try {
conn.rollback();
} catch (SQLException ex) {
ex.printStackTrace();
}
}finally {
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}finally {
conn = null;
}
}
if (pstmt!=null){
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}finally {
pstmt=null;
}
}
}
}
}
先pstmt = conn.prepareStatement(sql1); 导入一个sql语句 SQL 中 的字段 可以 用 ?来进行占位
用 pstmt 中的setXXX()方法来进行填充,该方法有两个参数:
第一个参数是该SQL语句中第几个问号
第二个参数是该SQL语句中所填充的字段
XXX代表的是字段的数据类型
如果要执行一个SQL语句:UPDATE,INSERT或DELETE语句,那么需要下面的代码片段:
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "DELETE FROM Employees";
ResultSet rs = stmt.executeUpdate(sql);
主要的是 ResultSet 返回值:
如果成功了 RestlutSet 中 的rs 的值就为1 ;
executeUpdate(sql) , 他用来执行DML语句,
返回值是受影响的行数;int 类型
executeQuery(sql) ,他用来实行DQL查询语句,
返回值是ResultSet 集合,
4.JDBC事务1.首先要关闭自动提交(因为 默认是自动提交,不管成功还是失败)
首先调用conn 方法中的 setAutoCommit(false);关闭自动提交
2.提交:
conn.commit();
如果正常运行了,没发生什么错误 就提交到数据库;
3.回滚:
conn.rollback();
如果系统发生异常,就回滚可以设置使用保存点,使之混滚到保存点;
保存点:
setSavepoint(String savepointName): - 定义新的保存点,它还返回一个Savepoint对象。
releaseSavepoint(Savepoint savepointName): - 删除保存点。要注意,它需要一个Savepoint对象作为参数。 该对象通常是 由setSavepoint()方法生成的保存点。
try{
//Assume a valid connection object conn
conn.setAutoCommit(false);
Statement stmt = conn.createStatement();
//set a Savepoint
Savepoint savepoint1 = conn.setSavepoint("Savepoint1");
String SQL = "INSERT INTO Employees " +
"VALUES (106, 24, 'Curry', 'Stephen')";
stmt.executeUpdate(SQL);
//Submit a malformed SQL statement that breaks
String SQL = "INSERTED IN Employees " +
"VALUES (107, 32, 'Kobe', 'Bryant')";
stmt.executeUpdate(SQL);
// If there is no error, commit the changes.
conn.commit();
}catch(SQLException se){
// If there is any error.
conn.rollback(savepoint1);
}
实例:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
public class Demo07 {
public static void main(String[] args) {
//有本机默认地址
String url = "jdbc:mysql://127.0.0.1:3306/db_jdbc_demo?characterEncoding=utf8&useSSL=false";
String name = "root";
String passwd="123456";
Connection conn = null;
PreparedStatement pstmt = null;
Scanner sc = new Scanner(System.in);
int idFK = 0;
int idSK = 0;
double money = 0;int result = 0;
System.out.print("请输入付款方ID号");
idFK = sc.nextInt();
System.out.print("请输入收款方ID号");
idSK = sc.nextInt();
System.out.print("转账金额");
money = sc.nextDouble();
try{
String sql1 = "UPDATE into t_emp SET salary = salary-? WHERe id = ?";
String sql2 = "UPDATE into t_emp SET salary = salary+? WHERe id = ?";
Class.forName("com.mysql.jdbc.Driver");
//获取连接后要开启事物(Mysql 默认自动提交)
conn = DriverManager.getConnection(url,name,passwd);
conn.setAutoCommit(false);
pstmt = conn.prepareStatement(sql1);
pstmt.setInt(2,idFK);
pstmt.setDouble(1,money);
pstmt = conn.prepareStatement(sql2);
pstmt.setInt(2,idSK);
pstmt.setDouble(1,money);
result += pstmt.executeUpdate();//执行代码 :更新
if (result==2){
System.out.println("修改成功");
conn.commit();
}else{
System.out.println("修改失败");
}
System.out.println(result);
}catch (Exception e){
e.printStackTrace();
System.out.println("转账异常,正在回滚数据");
try {
conn.rollback();
} catch (SQLException ex) {
ex.printStackTrace();
}
}finally {
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}finally {
conn = null;
}
}
if (pstmt!=null){
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}finally {
pstmt=null;
}
}
}
}
}



