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学习十三的主要内容,如果未能解决你的问题,请参考以下文章
2017-2018-1 20155216 《信息安全系统设计基础》第十四周学习总结
Android 逆向加壳技术简介 ( 动态加载 | 第一代加壳技术 - DEX 整体加固 | 第二代加壳技术 - 函数抽取 | 第三代加壳技术 - VMP / Dex2C | 动态库加壳技术 )