Java学习十三

Posted 歪歪bky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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");

或使用配置文件的方式

 

以上是关于Java学习十三的主要内容,如果未能解决你的问题,请参考以下文章

C++项目三代码参考(改进版)

2017-2018-1 20155216 《信息安全系统设计基础》第十四周学习总结

JVM进阶之路十二:字节码指令

Android 逆向加壳技术简介 ( 动态加载 | 第一代加壳技术 - DEX 整体加固 | 第二代加壳技术 - 函数抽取 | 第三代加壳技术 - VMP / Dex2C | 动态库加壳技术 )

shell学习四十九天----进程建立

JVM进阶之路十二:字节码指令