JDBC链接数据库Java ----笔记整理

1.什么是JDBC
   JDBC(Java Data Base Connectivity,java数据库连接):是一种用于执行sql语句的java
   API(接口),可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成,JDBC提供了一种基准,据此可以构建更高级的工具和标准,使数据开发人员能够编写数据库应用程序

2.数据库驱动
   数据库厂商的JDBC接口实现  Connection 等接口的实现类的jar文件

3.常用接口
   Driver接口
        由数据库厂商提供
       装载MySql驱动:Class.forName("com.mysql.jdbc.Driver");
       装载Oracle驱动:class.forName("oracle.jdbc.driver.oracleDriver");
   
   Connection接口
       connection与特定数据库的连接(会话),在连接上下文中执行sql语句并返回结果
       DriverManager.getConnection(url,user,password)方法建立在JDBC URL中定义数据       库Connection连接上
       连接MySQL数据:Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:port/database","user","password");
       连接SQLServer数据库:connection conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://host:port;DatabaseName=database","user","password");


4.常用方法
     createStatement();创建向数据库发送sql的statement对象
     prepareStatement(sql); 创建向数据库发送预编译sql的PrepareSatement对象
     prepareCall(sql);   创建执行储存过程的callableStatement对象

  不常用:
     setAutoCommit(boolean autoCommit); 设置事物自动提交
     commit();  在链接上提交事物
     rollback(); 在此链接上回滚事物


5.Statement接口
        用于执行静态sql语句并返回它生生成的结果对象
     三种Statement类
        Statement:由createStatement创建,用于发送简单的sql语句(不带参数)、
        PreparedStatement:继承自Statement接口,由preparedStatement创建,用于发送含有一个或多个参数的sql语句,preparedStatement对象比Statement对象的效率更高,并且可以防止sql注入,所以我们一般都使用PreparedStatement
        callableStatement:继承自preparedStatement接口,由方法prepareCall创建,用于存储过程


     常用的Statement方法
        
         executeQuery(String sql); 运行select语句,并返回ResultSet结果集
         executeUpdate(String sql);运行insert/update/delete操作,返回更新的行数
    不常用:
         addBatch(); 把多条sql语句放到一个批处理中
         executeBatch(); 向数据库发送一批sql语句执行
         execute(String sql); 运行语句,返回是否有结果集

6.ResultSet接口
       ResultSet提供检索不同类型字段的方法,
           getString(int index),getString(String columnName);获得在数据库里是varchar,char等类型的数据对象。
           getFloat(int index),getFloat(String columnName); 获得在数据库里是float类型的数据对象
           getDate(int index),getDate(String columnName)获得在数据库里是Date类型的数据
           getBoolean(int index),getBoolean(String columnName);获得在数据库里是Boolean类型的数据
           getobject(int index) getobject(String columnName)获得在数据库里任意类型的数据
     

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


  依次关闭对象或连接:ResultSet  Statement  Connection


7.JDBC的使用步骤
    1.  加载JDBC驱动 
        Class.forName(com.MySql.jdbc.Driver);  //不会对具体的驱动产生一依赖
      
       
    2.  建立数据库连接Connection
        Connection conn = DriverManager.getConnection(url,user.password);

       
      URL 用于标识数据库的位置,通过URL地址告诉JDBC程序连接那个数据库
        URL的合法写法:
               jdbc:mysql:[]//localhost:3306/test?参数名:参数值
                 jdbc         协议
                 mysql:[]   子协议
               //localhost:3306/     主机:端口
               test?                数据库
       其他参数:useUnicode=true&characterEncoding=utf8


    3.  创建执行Sql的语句Statement

         String id = "5";
         String sql ="delete from table where id=" + id;
         Statement  stm = conn.createStatement();
         stm.executequery(sql);
//存在sql注入的危险
//如果用户传入的id为"5 or 1" 那么将删除表中的所有记录

     /*PreparedStatement 有效的防止sql注入(sql语句在程序运行之前进行了预编译,当运行时动态的把参数传递给PreprareStatement时,即使参数里有敏感字符如 or '1=1' 数据库也会作为一个参数字段的属性值来处理而不会作为一个sql指令)*/
        String sql = "insert into user(name,pwd) values(?,?);
        PreparedStatement ps = conn.prepareStatement(sql);
        ps.setString(1,"col_value"); //占位符顺序从1开始
        ps.setString(1,"123456");   //也可以使用setObject
        ps.executeQuery();


    4.  处理执行结果集ResultSet
           ResultSet rs = ps.executeQuery();
           while(rs.next()){
              rs.getString(col_name);
              rs.getInt(1);
                           }
    5.  释放资源
    //数据库连接(connection)非常耗资源,尽量晚创建,尽量早释放
    //都要加try catch 以防止前面关闭出错,后面不执行
     conn.close();
      ps.close();
      rs.close();

整理之前的Java学习笔记,看看这三年学了些什么,毕业了,要找工作了感觉啥也没学清楚,顺便重温Java,在向后面学

猜你喜欢

转载自blog.csdn.net/RONG_YAO/article/details/89322559