• 程序员与数据库打交道的JDBC知识概要


    1.JDBC全称:Java database connectivity,Java数据库连接。

    (1)           JDBC是一种用于执行SQL语句的Java API,为多种关系数据库提供多种统一访问,由一组Java语言编写的类和接口组成。

    (2)           程序员JDBC API程序可以访问所有的数据库。

    (3)           Java语言和JDBC结合,程序员不必为不同的平台写不同的应用程序,只需写一遍程序就可以使它在任意平台上运行。

    (4)           JDBC简单讲做三件事:与数据库建立连接,发送、处理数据库语句并处理结果。

    3.加载Oracle的JDBC驱动程序

    Class.forName(“Oracle.jdbc.driver.OracleDriver”)

    4.execute、executeQuery、executeUpdate

     executeQuery:返回结果集(ResultSet),通常用于select语句。

    executeUpdate:返回此操作影响的行数(int),通常用于insert,update,delete语句。

    execute返回Boolean值, 通常用于insert,update,delete语句。

    5.ResultSet处理的典型代码:

    while(rs.next()){

       String ename = rs.getString(1);

       int empno = rs.getInt(“empno”);

    }

    6.JDBC记载4大步骤

    (1)加载一个Driver驱动;

    (2)创建数据库连接(Connection)

    (3)创建SQL命令发布器Statement,通过statement发送命令并得到结果。

    (4)处理结果(select语句和resultset),处理完毕后关闭数据库资源。

    7.SQL注入攻击

    比如JDBC完成用户的登录功能

    (1)           SQL语句采用了字符串拼接技术String sql = “select * from t_user where userno= ‘”+userno+”’ and password =+upwd+”’”;

    (2)           继而使用SQL命令发布器发送SQL命令并得到结果:

    Stmt.executeQuery(sql);

    (3)           如输入:userno = “ abc:,password =” abc ‘or’ 1’ = 1”;

    于是上述SQL字符串就变为sql = “select * from t_user where userno =’ abc’ and password =’ abc’ ‘or’ 1’ = ‘ 1”;

    此语句的用户名和密码并不正确,但是仍然能访问数据表,所以存在风险,这就是所谓的SQL注入攻击。

    (4)           解决方案:采用statement的子接口PreparedStatement来实现。

    *1.可读性强不繁琐

    *2.安全

    *3多次执行同一条SQL语句,效率高

    例:

      Connection conn = null;

      Statement stmt = null;

      ResultSet rs = null;

    try{

       Class.forName(“oracle.jdbc.driver.OracleDriver”);

       conn = DriverManager.getConnection(“jdbc:oracle:thin:@localhost:1521:orcl”,”scott”,”tiger”);

       stmt = conn.createStatement();

     String sql = “select * from emp”;

    rs = stmt.executeQuery(sql);

  • 相关阅读:
    python学习笔记-4-列表和元组
    迭代器 生成器, 可迭代对象以及应用场景
    mysql的创创建用户阶段 开启客户端登录和授权阶段
    初识mysql数据库
    拆目录
    日志编码
    数据库mysql的安装.启动和基础配置------windows版本
    协程
    线程锁 死锁现象 递归锁 信号量 条件定时器 队列 线程池
    网络线程
  • 原文地址:https://www.cnblogs.com/7758521gorden/p/8051570.html
Copyright © 2020-2023  润新知