第十六章 整合数据库
JDBC
- Java语言访问数据库的一种规范,是一套API。
- JDBC (Java Database Connectivity) API,即Java数据库编程接口,是一组标准的Java语言中的接口和类,使用这些接口和类,Java客户端程序可以访问各种不同类型的数据库。
- 比如建立数据库连接、执行SQL语句进行数据的存取操作。
- 注册Driver操作:与数据库建立连接的标准方法是调用DriverManager.getConnection方法。
- 该方法接受含有某个URL的字符串。DriverManager类(即所谓的JDBC管理层)将尝试找到可与那个URL所代表的数据库进行连接的驱动程序。
- DriverManager类存有已注册的Driver类的清单。当调用方法getConnection时,它将检查清单中的每个驱动程序,直到找到可与URL中指定的数据库进行连接的驱动程序为止。
- Driver的方法connect使用这个URL来建立实际的连接。
- 取得Connection操作对象:要取得操作对象可以通过DriverManager的getConnection()。
- 关闭Connection操作对象:使用 close() 来关闭与数据库的连接,或可以使用尝试自动关闭资源语法来简化程序撰写。
Statement
- Statement的executeQuery()方法则是用于SELECT等查询数据库的SQL,executeUpdate()会返回int结果,表示数据变动的笔数,executeQuery()会返回java.sql.ResultSet对象,代表查询的结果,查询的结果会是一笔一笔的数据。
- 可以使用ResultSet的next()来移动至下一笔数据,它会返回 true 或 false表示是否有下一笔数据,接着可以使用getXXX()来取得数据。如果有些操作只是SQL语句中某些参数会有所不同,其余的SQL子句皆相同,则可以使用java.sql.PreparedStatement。
- 可以使用Connection的preparedStatement()方法创建好一个预编译(precompile)的SQL命令,其中参数会变动的部分,先指定“?”这个占位字符。
- 需要真正指定参数执行时,再使用相对应的setInt()、setString()等方法,指定“?”处真正应该有的参数。
反射与类加载器
- Java真正需要某个类时才会加载对应的.class文档,而非在程序启动就加载所有类。
- java.lang.Class的实例代表Java应用程序运行时加载的.class文档。
- 可以通过Object的getClass()方法,或者通过.class常量取得每个对象对应的Class对象,如果是基本类型,也可以使用对应的打包类加上.TYPE取得Class对象。
- 例如:Integer.TYPE可取得代表int的Class对象。
- 如果事先不知道类名称,可以利用Class.forName()动态加载.class文档,取得Class对象之后,利用其newInstance()方法建立类实例。
- java.lang.reflect.Method实例是方法的代表对象,可以使用invoke()方法来动态调用指定的方法。
自定义泛型
- 在定义泛型时,使用extends限定指定T实际类型时,必须是某类的子类。
- 共变性(Covariance):B是A的子类Node可视为一种Node,称Node具有共变性。
- 通配字符“?”与extends限制T的类型,只能通过T声明的名称取得对象指定给Object,或将T声明的名称指定为null。
自定义枚举
- enum定义了特殊的类,继承自java.lang.Enum。
- enum是个抽象类,无法直接实例化。
- enum操作Comparable接口,ordinal的值是会使用enum枚举的成员顺序。equals()与hashCode()基本上继承了Object的行为,但被标示为final。
- 可以使用values()的方法,将内部维护Action枚举实例的数组复制后返回。