解析JDBC指令 【增删查改的使用】

本文是小白文,适合进行JDBC了解引入,对于有基础的同学可以进一步了解PreparedStatement的使用 & 注入问题

JDBC全称为:Java DataBase Connectivity(java数据库连接)。

作用:jdbc 解决了 java和数据兼容性的交互 简化了开发步骤

1. JDBC驱动

  • sun 公司制定了连接数据库的标准(jdbc接口),规范

  • 其他的厂商自己实现jdbc接口连接自己的数据库的api

2. JDBC接口(API)体系

说明
DriverManager驱动管理
Connection数据库连接接口(会话)
Statement发送sql到数据库的指令
ResultSet查询操作后 返回的结果集

3. jdbc的驱动的下载

  • 去官网下载

  • maven仓库下载 https://mvnrepository.com/

  1. 创建一个java项目
  2. 在java项目下面创建lib文件夹
  3. 把下载好的jar添加到lib
  4. 把jar和java项目进行关联

4. 操作步骤

  1. 获取connection数据库连接对像
  2. 通过connection获取sql发送对象
  3. 准备sql
  4. 执行sql
  5. 处理执行数据库响应结果
  6. 释放资源

4.1 Connection 连接数据库的接口

  • 常用方法
说明
colse()立即释放此Connection对象的数据库和JDBC资源
createStatement()创建一个statament对象
preparedStatement()创建一个PreparedStatement对象来将参数化的SQL语句发送到数据库
commit()事务提交
getAutoCommit()设置事务提交方式
rollback()事务回滚
  • 创建connection数据库对象
	/**
	 * 封装 conn 的获取 
	 * @return
	 */
	public static Connection getConn() {

		// 通过DriverManager 获取连接 返回一个conn 连接

		String url = "jdbc:oracle:thin:@localhost:1521:orcl";

		String user = "scott";

		String password = "tiger";

		Connection conn = null;
		try {
			// 获取连接
			return conn = DriverManager.getConnection(url, user, password);


		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;
	}
  • 数据库URL解析

4.2 Statement

用于执行静态SQL语句并返回它所生成结果的对象。发送sql到数据库,返回结果

  • 常用方法
说明
addBatch(String sql)将给定的SQL命令添加到此Statement对象的当前命令列表中
int executeUpdate(String sql)执行给定SQL语句,该语句可能为 INSERTUPDATE
DELETE语句或者不返回任何内容的SQL语句
插入一条数据 :
插入成功:数据库多了一条记录,返回1(返回值数据库响应的行数)
插入失败:数据库没有发生改变,返回0
executeQuery(String sql)执行sql的查询语句,返回结果集
exceteBatch()一批命令提交给数据库来执行,
如果全部命令执行成功,则返回更新计数组成的数组批处理
close()释放资源
  • 通过connection获取sql发送对象
		// 获取一个发送sql到数据库类
		// 创建一个发送sql到数据库的对象
		Statement st = null;
		try {
			st = conn.createStatement();

			// 更新操作 (insert uopate delete )
			// 准备sql
			String sql = "insert into t_person(id,name,age) values (34,'郭靖',40)";
			// executeUpdate:把sql发送到数据执行返回结果
			int update = st.executeUpdate(sql);

			if (update > 0) { // 判断是否有响应
				System.out.println("添加成功");
			} else {
				System.out.println("添加失败");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

4.3 ResultSet

表示数据库结果集的数据表

ResultSet接口提供用于从当前行获取列值的获取

  • ResultSet对象具有指向其当前数据行的光标。最初,光标被置于第一行之前。
  • 常用方法
说明
next()光标的移动释放数据
colse()关闭方法(释放资源)
获取方法
index :列的索引从1开始从左往右读取只能读取一次 colunmName:列的名称
JDBC 驱动程序尝试将底层数据转换为在获取方法中指定的 Java 类型,
并返回适当的 Java 值
getInt(index / colunmName)获取int值 jdbc驱动会把我们数据的数据类型转成java数据类型
number --> int
getString(index / colunmName)获取的string值 jdbc驱动会把我们的数据数据类型转成java数据类型
varchar2 --> String
  • ResultSet的使用
		// 获取st 
		Statement st = null;
		
		ResultSet rs = null;
		try {
			 st = conn.createStatement();
			  
			 // 准备SQL 
			 String sql = "select * from t_person";
			 
			 // 执行sql:executeUpdate() 
			 // 查询执行:executeQuery() 
			 
			 rs = st.executeQuery(sql);
			
			// 判断是否有数据next()判断是否有下一行 
			while (rs.next()) {
				
				// 通过列名索引获取数据 
                // int id = rs.getInt(1);
                // String name = rs.getString(2);
                // int age = rs.getInt(3);
				
				// 通过列名获取 
				int id = rs.getInt("id");
				String name = rs.getString("name");
				int age = rs.getInt("age");
				
				System.out.println(id + "\t" + name + "\t" + age);
			}
	 
		}

4.4 增删改查的使用

 public class Demo {
    
    @Test
    public void demo01() {
        // 获取connection数据库对象
        Connection conn = jdbcUtils.getConn();
        
        // 获取发送sql的类
        Statement st = null;
        try {
            st = conn.createStatement();
            
            // 获取sql
            String sql = "insert into t_table(id,name,age) values (1,'Tom',19)";
            
            // 执行sql
            int update = st.executeUpdate(sql);
              
            // 判断是否发送成功
            if (update > 0) {
                System.out.println("加载成功");
            } else {
                System.out.println("加载失败");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            
            //释放资源
            jdbcUtils.close(conn, st);
            
        }
    }
    
    /**
     * 修改数据
     */
    @Test
    public void demo02() {
        //获取connection
        Connection conn = jdbcUtils.getConn();
        
        //获取sql发送类
        Statement st = null;
        try {
            st = conn.createStatement();
            //获取sql
            String sql = "update t_table set id = 2, name = 'John', age = 20 where id = 1 ";
            
            //执行sql
            int update = st.executeUpdate(sql);
            
            //判断发送情况
            if (update > 0) {
                System.out.println("发送成功");
            } else {
                System.out.println("发送失败");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            //释放资源
            jdbcUtils.close(conn, st);
        }
        
    }
    /**
     * 删除数据
     */
    @Test
    public void demo03() {
        //安装驱动
        Connection conn = jdbcUtils.getConn();
        
        //获取发送sql类
        Statement st = null;
        try {
            st = conn.createStatement();
            
            //获取sql
            String sql = "delete from t_table where id = 2";
            
            //执行sql
            int update = st.executeUpdate(sql);
            
            //判断是否执行成功
            if (update > 0) {
                System.out.println("删除成功");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        
        //释放资源
        jdbcUtils.close(conn, st);
    }
     
     /**
     * 查询数据
     */
    @Test
    public void demo04() {
        //获取连接connection数据库连接对象
        Connection conn = jdbcUtils.getConn();
        
        //通过conn获取sql发送对象
        
        ResultSet rt = null;
        
        Statement st = null;
        try {
            st = conn.createStatement();
            
            //获取sql
            String sql = "select * from emp";
            
            //执行sql
            rt = st.executeQuery(sql);
            
            //判断是否有数据
            while (rt.next()) {
                int empno = rt.getInt("empno");
                String ename = rt.getString("ename");
                String job = rt.getString("job");
                
                System.out.println(empno + "\t" + ename + "\t" + job);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            jdbcUtils.close(conn, st, rt);
        }
        
    }
}
  • jdbcUtil工具包
public class jdbcUtils {
    
    static {
        
     // 1.安装驱动
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        
    }
    
    public static Connection getConn() {
        
        // 2.通过驱动管理获取连接接口
        String url = "jdbc:oracle:thin:@localhost:1521:orcl";
        
        String user = "scott";
        
        String password = "tiger";
        
        Connection conn = null;
        try {
            conn = DriverManager.getConnection(url, user, password);
            
            System.out.println(conn);
            
            
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
    
    
    public static void close(Statement st, Connection conn) {
        // 5.释放资源
        if (st != null) {
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
    
   	/**
   	*	先开后关原则(栈原则)
   	**/
    public static void close(ResultSet rt, Statement st, Connection conn) {
        // 5.释放资源
        if (st != null) {
            try {
                st.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
        if (rt != null) {
            try {
                rt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值