• Java学习十三


    学习内容:

    1.Java反射

    2.jdbc入门


    1.反射的概述

    Java的反射机制:动态获取信息以及动态调用对象方法

    Java的反射机制的作用:用来编写一些通用性较高的代码或者框架的时候使用

    原理:java文件编译成class文件,通过jvm将class对象加载到内存中,其中构造方法加载为构造对象,属性加载为Field对象,方法加载为Method对象

     2.Field类:属性

    Filed对象的获得

    得到所有的成员变量

    Field[] fields = c.getFields();//取得所有public属性(包括父类继承)
    
    Field[] fields = c.getDeclareFields();//取得所有public属性(包括父类继承)

    得到指定的成员变量

    Field name = c.getFields("name ");//取得所有public属性(包括父类继承)
    
    Field name = c.getDeclareFields("name ");//取得所有public属性(包括父类继承)

    设置Field变量是否可以访问

    field.setAccessible(boolean)

    Field变量值的读取、设置

    field.get(obj)
    field.set(obj,value)

    案例demo

    public void demo1() throws Exception{
        //获得Class
        Class class1 = Class.forname("com.imooc.test.Person");
        //获得属性
        Field field1 = class1.getField("name");
        //操作属性
        Person p = (Person)class1.newInstance();
        field.set(p,"李四")
        
        Object obj = field.get(p);
        system.out.println(obj);
    }

    method类方法类似

    2.jdbc API

    一、加载驱动

    DriveManager会导致驱动注册两次,实际开发中注册驱动使用

    Class.forName("com.mysql.jdbc.Driver")

    二、获得连接

    Connection.getConnection(url,username,password)

    Connection连接对象

    主要作用:

    一、创建执行SQL语句的对象

    Statement createStatement()                                 :执行SQL语句,有SQL注入的漏洞存在

    PreparedStatement prepareStatement(String sql):预编译SQL语句,解决SQL注入的漏洞

    CallableStatement prepareCall(String sql)            :执行SQL中存储过程

    二、进行事务的管理

    setAutoCommit(boolean autoCommit)                   :设置事务是否自动提交

    commit()                                                                  :事务提交

    rollback()                                                                 :事务回滚

    Statement :执行SQL

    主要作用:

    一、执行SQL语句

    boolean execute(String sql)                                      :执行SQL

    ResultSet executeQuery(String sql)                          :执行SQL中的select语句

    int executeUpdate(String sql)                                    :执行SQL中的insert/update/delete语句

    释放资源

    // 释放资源
    if(rs != null){
        try {
        rs.close();
        } catch (SQLException e) {
        e.printStackTrace();
        }
        rs = null;
    }
    if(stmt != null){
        try {
        stmt.close();
        } catch (SQLException e) {
        e.printStackTrace();
        }
        stmt = null;
    }
    if(conn != null){
        try {
        conn.close();
        } catch (SQLException e) {
        e.printStackTrace();
        }
        conn = null;//垃圾回收机制更早回收对象
    }         

    3.JDBC的SQL注入漏洞

     举例:在用户名中输入带SQL语句关键字中的or的话,由于or前面用户名是正确的,此时无论密码是什么都是错误的

    避免SQL注入漏洞的方法

    用PreparedStatement创造对象

    4. 数据库连接池

    应用程序直接获取连接,用户每次请求都需要向数据库获得连接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。极易造成数据库服务器内存溢出。

    c3p0为常用连接池

    手动设置连接池

    //创建连接池
    ComboPooledDataSource dataSource = new ComboPooledDataSource ();
    //设置连接池的参数
    dataSource.setDriverClass("com.mysql.jdbc.Driver");
    dataSource.setJdbcUrl("jdbc:mysql:///jdbctest");

    或使用配置文件的方式

  • 相关阅读:
    复杂网络常用数据集网站
    01单人决策问题
    《无线网络安全技术》阅读笔记
    最优化理论基础
    测试layer控件,除了ie报错其它浏览器都生效
    Native App、Web App、Hybrid App
    有些效果在IE下运行时,IE下开调试模式才显示正常是什么原因?
    关于Content-Type中application/x-www-form-urlencoded 和 multipart/form-data的区别及用法
    js表单提交的三种方式
    前端涉及的所有知识体系
  • 原文地址:https://www.cnblogs.com/-2016/p/12243357.html
Copyright © 2020-2023  润新知