jdbc基础

一、JDBC
    数据库驱动:
        数据库厂商为了方便开发人员从程序中操作数据库而提供的一套jar包,通过导入这个jar包就可以调用其中的方法操作数据库,这样的jar包就叫做数据库驱动
    JDBC:
        sun定义的一套标准,本质上是一大堆的操作数据库的接口,所有数据库厂商为java设计的数据库驱动都实现过这套接口,这样一来同一了不同数据库驱动的方法,开发人员只需要学习JDBC就会使用任

意数据库驱动了
   
    六个步骤实现JDBC:(导包是要导接口)
        //1.注册数据库驱动
                //(缺点:加载驱动两次)
                //--创建Mysql的Driver对象时,导致了程序和具体的Mysql驱动绑死在了一起
        DriverManager.registerDriver(new Driver());
        //2.获取数据库连接
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day10", "root", "root");
        //3.获取传输器对象
        Statement stat = conn.createStatement();
        //4.利用传输器传输sql语句到数据库中执行,获取结果集对象
        ResultSet rs = stat.executeQuery("select * from user");
        //5.遍历结果集获取查询结果
        while(rs.next()){
            String name = rs.getString("name");
            System.out.println(name);
        }
        //6.关闭资源
        rs.close();
        stat.close();
        conn.close();
        

         代码改进:
        //1.注册数据库驱动(反射方式)
                 Class.forName("com.mysql.jdbc.Driver");
        //2.获取数据库连接(参数:链接,用户名,密码)
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day10", "root", "root");
        //3.获取传输器对象
        Statement stat = conn.createStatement();
        //4.利用传输器传输sql语句到数据库中执行,获取结果集对象
        ResultSet rs = stat.executeQuery("select * from user");
        //5.遍历结果集获取查询结果
        while(rs.next()){
            String name = rs.getString("name");
            System.out.println(name);
        }
        //6.关闭资源
        rs.close();
        stat.close();
        conn.close();

        小细节:
       1、链接自己主机localhost可以省略,链接默认端口3306可以省略。
        即Connection conn = DriverManager.getConnection("jdbc:mysql:///day10", "root", "root");
       
        2、常用数据库URL地址的写法:
          Oracle写法:jdbc:oracle:thin:@localhost:1521:sid       
           SqlServer—jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=sid       
           MySql—jdbc:mysql://localhost:3306/sid
           Mysql的url
          3、地址的简写形式: jdbc:mysql:///sid              
          4、常用属性:useUnicode=true&characterEncoding=UTF-8
 

Jdbc程序中的Connection,它用于代表数据库的链接,Connection是数据库编程中最重要的一个对象, 客户端与数据库所有交互都是通过connection对象完成的,这个对象的常用方法:
createStatement()            :创建向数据库发送sql的statement对象。
prepareStatement(sql) :创建向数据库发送预编译sql的PrepareSatement对象。
prepareCall(sql):创建执行存储过程的callableStatement对象。
setAutoCommit(boolean autoCommit):设置事务是否自动提交。
commit() :在链接上提交事务。
rollback() :在此链接上回滚事务


Jdbc程序中的Statement对象用于向数据库发送SQL语句, Statement对象常用方法:
executeQuery(String sql) :用于向数据发送查询语句。
executeUpdate(String sql):用于向数据库发送insert、update或delete语句
execute(String sql):用于向数据库发送任意sql语句
addBatch(String sql) :把多条sql语句放到一个批处理中。
executeBatch():向数据库发送一批sql语句执行。


Jdbc程序中的ResultSet用于代表Sql语句的执行结果。Resultset封装执行结果时,采用的类似于表格的方式。ResultSet 对象维护了一个指向表格数据行的游标,初始的时候,游标在第一行之前,调用ResultSet.next() 方法,可以使游标指向具体的数据行,进行调用方法获取该行的数据。
ResultSet既然用于封装执行结果的,所以该对象提供的都是用于获取数据的get方法:
获取任意类型的数据
getObject(int index)
getObject(string columnName)
获取指定类型的数据,例如:
getString(int index)
getString(String columnName)

ResultSet还提供了对结果集进行滚动的方法:
next():移动到下一行
Previous():移动到前一行
absolute(int row):移动到指定行
beforeFirst():移动resultSet的最前面。
afterLast() :移动到resultSet的最后面。



    SQL注入攻击:
            由于dao中执行的SQL语句是拼接出来的,其中有一部分内容是由用户从客户端传入,所以当用户传入的数据中包含sql关键字时,就有可能通过这些关键字改变sql语句的语义,从而执行一些特   

        殊的操作,这样的攻击方式就叫做sql注入攻击
       
            PreparedStatement利用预编译的机制将sql语句的主干和参数分别传输给数据库服务器,从而使数据库分辨的出哪些是sql语句的主干哪些是参数,这样一来即使参数中带了sql的关键字,数   

        据库服务器也仅仅将他当作参数值使用,关键字不会起作用,从而从原理上防止了sql注入的问题

        PreparedStatement主要有如下的三个优点:
            ~1.可以防止sql注入
            ~2.由于使用了预编译机制,执行的效率要高于Statement
            ~3.sql语句使用?形式替代参数,然后再用方法设置?的值,比起拼接字符串,代码更加优雅.

       
        *JDBC大数据
            Text Blob
       使用JDBC处理大数据
在实际开发中,程序需要把大文本 Text 或二进制数据 Blob保存到数据库。
Text是mysql叫法,Oracle中叫Clob

基本概念:大数据也称之为LOB(Large Objects),LOB又分为:
clob和blob
clob用于存储大文本。Text
blob用于存储二进制数据,例如图像、声音、二进制文等。

对MySQL而言只有blob,而没有clob,mysql存储大文本采用的是Text,Text和blob分别又分为:
TINYTEXT(255)、TEXT(64k)、MEDIUMTEXT(16M)和LONGTEXT(4G)
TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB
       
   


你可能感兴趣的:(jdbc基础)