javax是扩展包,对之前功能的扩展
java.sql
访问数据库
不同的数据库访问的方式不同通讯协议、编译方式不同。
不同的数据库的sql、加锁机制不同。
ODBC:微软指定的开放数据库连接标准
ODBC驱动程序:负责将标准函数转换成数据库的接口
JDBC:java连接数据库的标准
JDBC driver:第三方提供
①JDBC-ODBC bridge:java先访问ODBC,再访问数据库,好处不用安装驱动程序,jdk自带的
②OCI方式:java直接访问本地的数据库的函数,提高了访问效率
③middle server:访问一个进程,数据库服务器
④JDBC直连:用java直接访问数据库,最快的,不经过其他的过程
JDBC直连
Collection 接口:
setAutoCommit(boolean autoCommit)
Sets this connection's auto-commit mode to the given state.
自动提交
异常的时候调用rollback
Driver
connect(String url, Properties info)
Attempts to make a database connection to the given URL.
DriverManger
getConnection() 建立连接
class.forname("com.mysql.jdbc.Driver");
运行时,动态加载一个类,编译的时候不需要这个类,动态的创建对象,执行该类的静态初始化代码
会抛出class not found Exception 异常
初始化代码,
class Student{
{
初始化代码,可以用static修饰,在类加载的时
候访问类的静态变量执行,优先于main函数执行
只执行一次
}
}
Eg:
class Driver implement java.sql.Driver{
static {
Driver d = new Driver();
DriverManger.registerDriver(d);
}
}
Beans
Object o = Beans.instantiate(ClassLoader,"com.abc.beans.Student");
ClassLoader 类加载器
java可以反编译
java 代码混淆器
jdbc协议:
这里写代码片
协议组成
协议名称+主机+主机上的文件
面向抽象的编程
class abstract EProduct{
}
class abstract EProduct{
}
class AProduct extends EProduct{
}
class BProduct extends EProduct{
}
class ProductFactory {
public static EProduct getEProduct(){
Properties p = new Properties();
p.load(new FileInputStream("app.properties"));
return (EProduct) Beans.instantiate(getClass().getClassLoader("default"));
}
public static EProduct getEProduct(String type){
Properties p = new Properties();
p.load(new FileInputStream("app.properties"));
return (EProduct) Beans.instantiate(getClass().getClassLoader(type));
}
}
class App {
main(){
EProduct e1 = ProductFactory.getEProduct();
String s;
EProduct e2 = ProductFactory.getEProduct(s);
}
}
app.properties 中定义类
default=AProduct
other=BProduct
这样的好处就是,在App的类中都是抽象的编程,只需要修改app.properties 这个配置文件就可以对工程进行维护