java之旅之JDBC

Java Database Conncetivity

四种驱动程序

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、不要滥用预编译,预编译语句过多会影响数据库性能,一个项目中不要超过一百条
当数据值是由外部文本输入的时候,才用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值