标签:错误 接口 exce span ima 开发 数据库驱动 prot action
第十六章 整合数据库
JDBC是用于执行SQL的解决方案,开发人员使用JDBC的标准接口,数据库厂商则对接口进行操作,开发人员无须接触底层数据库驱动程序的差异性。 厂商在操作JDBC驱动程序时,依方式可将驱动程序分为4种类型:
·Type1:JDBC-ODBCBridge Driver
·Type2:NativeAPI Driver
·Type3:JDbc-NetDriver
·Type4:NativeProtocol Driver
取得联机等与数据库来源相关的行为规范在javax.sql.DataSource接口,实际如何取得Connection则由操作接口的对象来负责。 Connection是数据库连接的代表对象,接下来要执行SQL的话,必须取得java.sql.Statement对象,它是SQL描述的代表对象。可以使用Connection的createStatement()来建立Statement对象。
package cc.openhome;
importstaticjava.lang.System.out;
import java.sql.*;
publicclassConnectionDemo {
publicstaticvoidmain(String[] args)
throws ClassNotFoundException, SQLException {
Class.forName("com.mysql.jdbc.Driver");
StringjdbcUrl ="jdbc:mysql://localhost:3306/demo";
Stringuser ="root";
Stringpasswd ="openhome";
try(Connection conn =
DriverManager.getConnection(jdbcUrl, user, passwd)) {
out.printf("已%s数据库联机%n",
conn.isClosed() ?"关闭":"开启");
}
}
}
在使用Connection、Statement或ResultSet时,要将之关闭以释放相关资源。
如果有些操作只是SQL语句当中某些参数会有所不同,其余的SQL子句皆相同,则可以使用java.sql.PreparedStatement.可以使用Connection的preparedStatement()方法建立好一个预先编译的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()方法来动态调用指定的方法。
package cc.openhome;
importstaticjava.lang.System.out;
publicclassClassInfo{
public static void main(String[] args){
Class clz = String.class;
out.println("類別名稱:"+ clz.getName());
out.println("是否為介面:"+ clz.isInterface());
out.println("是否為基本型態:"+ clz.isPrimitive());
out.println("是否為陣列物件:"+ clz.isArray());
out.println("父類別名稱:"+ clz.getSuperclass().getName());
}
} 
由同一类加载器载入的.class文档,只会有一个Class实例。如果同一.class文档由两个不同的类加载器载入,则会有两份不同的Class实例。
package cc.openhome;
import static java.lang.System.out;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
publicclass ClassLoaderDemo{
publicstaticvoid main(String[] args) {
try{
Stringpath = args[0];// 測試路徑
StringclzName = args[1];// 測試類別
Classclz1 = loadClassFrom(path, clzName);
out.println(clz1);
Classclz2 = loadClassFrom(path, clzName);
out.println(clz2);
out.printf("clz1 與 clz2 為%s實例",
clz1 == clz2 ?"相同":"不同");
}catch(ArrayIndexOutOfBoundsExceptione) {
out.println("沒有指定類別載入路徑與名稱");
}catch(MalformedURLExceptione) {
out.println("載入路徑錯誤");
}catch(ClassNotFoundExceptione) {
out.println("找不到指定的類別");
}
}
privatestaticClassloadClassFrom(Stringpath,StringclzName)
throwsClassNotFoundException,MalformedURLException{
ClassLoaderloader = newURLClassLoader(newURL[] {newURL(path)});
returnloader.loadClass(clzName);
}
}

第十八章 自定义泛型、枚举与注释
注释
在原始码中使用注释,对编译程序提供额外编译提示,或提供应用程序执行时期可读取的组态信息。注释可以仅用于原始码,编译后留在.class文档仅供编译程序读取或开放执行时期读取。
@Override //就是标准注释,被注释的方法必须是父类或接口中已定义的方法,请编译程序协助是否真的为重新定义方法。 @Deprecated //如果某个方法原先存在与API中,后来不建议再使用,可以在该方法上注释。若有用户后续想调用或重新定义这个方法,编译程序会提出警告。对于支持泛型的API,建议明确指定泛型真正类型,如果没有指定,编译程序会提出警告。 @SuppressWarnings //指定抑制unchecked的警告产生: @SuppressWarnings(value={"unchecked"}) @SafeVarargs //表明开发人员确定避免了heap pollution问题。heap pollution问题就是编译程序无法检查执行时期的类型错误,无法具体确认自变量类型。 @FunctionalInterface //让编译程序可协助检查interface是否可做为lambda的目标类型 自定义注释类型 ·标示注释:就是注释名称本身就是信息,对编译程序或应用程序来说,主要是检查是否有注释出现,并作出对应的动作。
(1)如果注释名称本身无法提供足够信息,设置单值注释
(2)注释属性也可以用数组形式指定。
(3)在定义注释属性时,如果属性名称为value,则可以省略属性名称,直接指定值。
(4)对成员设定默认值,使用default关键字即可。
(5)要设定数组默认值,可以在default之后加上{},必要时{}中可放置元素值。
定义注释时,可使用java.lang.annotation.Target限定时可指定java.lang.annotation.ElementType的枚举值。 在制作JavaDoc文件时,默认不会将注释数据加入文件中,如果想要将注释数据加入文件,可以使用java.lang.annotation.Documented。 默认父类设定的注释,不会被继承至子类,在定义注释时,设定java.lang.annotation.Inherited注释,就可以让注释被子类继承。
交易简介
标签:错误 接口 exce span ima 开发 数据库驱动 prot action
原文地址:http://www.cnblogs.com/20145207lza/p/6746539.html