本文已参与「新人创作礼」活动,一起开启掘金创作之路。 JDBC提供了独立于数据库的统一API,MySQL、Oracle等数据库公司都可以基于这个标准接口来进行开发。包括java.sql包下的Driver,Connection,Statement,ResultSet是JDBC提供的接口。而DriverManager是用于管理JDBC驱动的服务类,主要用于获取Connection对象(此类中全是静态方法)。
当我们查看API,在Driver接口中,明确要求:Driver接口是每个驱动程序类必须实现的接口。Java SQL 框架允许多个数据库驱动程序。每个驱动程序都应该提供一个实现 Driver 接口的类。并且明确:在加载某一 Driver 类时,它应该创建自己的实例并向 DriverManager 注册该实例。这意味着用户可以通过调用以下程序加载和注册一个驱动程序
Class.forName("foo.bah.Driver")
下边重点分析注册驱动的两种方式:
第一种:
Driver driver = new Driver();//com.mysql.jdbc.Driver
DriverManager.registerDriver(driver);
第二种:
Class.forName("com.mysql.jdbc.Driver");
这两种注册方式有什么不同呢?第一种方式,相对比较好理解,就是先创建数据库驱动,然后调用registerDriver()方法完成注册。第二种方法是利用发射机制来完成的,直接看的话, 我们会想 Class.forName(driverClass) 只能帮助我们得到Driver的Class对象啊,为什么会帮我们完成注册了呢。从上边对Driver()的API的查阅,API要求:在加载某一 Driver 类时,它应该创建自己的实例并向 DriverManager 注册该实例。我们猜想是在类加载时,就自动完成了注册。下边去具体看一下源码:
第一种方法,其JDK1.7下的DriverManger的registerDriver()方法:
public static synchronized void registerDriver(java.sql.Driver driver)
throws SQLException {
/* Register the driver if it has not already been added to our list */
if(driver != null) {
registeredDrivers.addIfAbsent(new DriverInfo(driver));
} else {
// This is for compatibility with the original DriverManager
throw new NullPointerException();
}
println("registerDriver: " + driver);
}
从其源码,可以看到DriverManger将要注册的驱动程序信息封装到了DriverInfo中,然后放进了一个List中。在后边获得连接时会再用到。
// List of registered JDBC drivers
private final static CopyOnWriteArrayList<DriverInfo> registeredDrivers = new CopyOnWriteArrayList<DriverInfo>();
第二种方法:第二种方法是怎么通过只要获得Driver的Class对象就可以完成注册呢,下边看一下其com.mysql.jdbc.Driver的源码:
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
// ~ Static fields/initializers
// ---------------------------------------------
//
// Register ourselves with the DriverManager
//
static {
try {
java.sql.DriverManager.registerDriver(new Driver());
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
}
从上边可以看到,它是用静态代码块实现的。
根据类加载机制,当执行 Class.forName(driverClass) 获取其Class对象时, com.mysql.jdbc.Driver 就会被JVM加载,连接,并进行初始化,初始化就会执行静态代码块,也就会执行下边这句代码:
java.sql.DriverManager.registerDriver(new Driver());
这就和第一种方式相同了。
对于上边的两种驱动注册方法,我们一般采用第二种方法:
(1)第一种方式 Driver driver = new Driver() 其在内部也执行静态代码块,这相当于实例化了两个Driver对象;
(2)第一种方式 Driver driver = new Driver() 会产生对某一种数据库的依赖(会import驱动包),耦合性较高。
所以一般采用低二种方式。
JDBC连接数据库的步骤为:
// 首先要导入数据库驱动jar包、直接复制到文件那里,然后加入到路径
// 1. 注册驱动
Class.forName("com.mysql.jdbc.Driver");java反射机制
//2. 创建一个连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","password");
//3. 创建一个sql语句的发送命令对象
Statement stmt = conn.createStatement();
// 4. 执行sql,拿到查询的结果集对象
ResultSet rs = stmt.executeQuery("select * from stu");
//5. 输出结果集的数据
while(rs.next()){
system.out.println(rs.getInt("id")+":"+rs.getString("name"));
}
//6. 关闭连接,命令对象以及结果集。
rs.close();
stmt.close();
conn.close();
1.软件开发的相关知识
1.1软件开发的流程:
需求分析-->概要设计--->详细设计-->编码-->测试-->发布运维
1.2项目的评估
1.2.1项目周期的评估: 需求分析与业务讨论(30%--40%)+编码(30%--40%)+测试和项目的发布(剩下的)
1.2.1.1项目进度梯形图:是进行项目进度划分的
1.2.2项目风险的把控:人员流失的风险,技术实现的风险,政策性的风险
1.2.3项目人员的匹配:PM(技术+产品) UI 测试 2-3coding 售后 (7人)
1.2.4项目技术的选定:看项目组成员都会什么,据实际情况
1.2.5项目成本的把控: 不当误工时,不来回返工
1.2.6项目工程款的预算 首付款的一半就可以开戏了
1.2.7项目售后和维护:其实就是那么回事
1.3团队的建设:1)己正则众人服 2)对待工作要认真,对待兄弟要用心
导读模块:在项目开始编码之前,我们需要对其业务进行分析,那么分析了之后该怎么办呢?
ps:学生选课管理系统: 1)找名词:学生,课,--->至少是有学生表,课程表 2)找关系:学生选课了之后才会产生关联--->产生选课记录+成绩--->课程成绩表(选课记录表) 课程-->谁教的课程-->教师--->教师表 3)确定表之后的回顾:学生表,课程表,成绩表,教师表 ps:将分析得到的表关系实现PD建模,进而得到库表文件(xx.sql),再生产数据库,最后添加测试数据
1.PD建模:PowerDesigner是sybase公司出产的一款能够进行pd建模(画出数据库表关系的模型图)的软件, 且是收费的,且功能非常强大,且是可以双向生成的(pd模型<--->xx.sql)
2.PowerDesigner这个软件的安装: 1)安装的时候,选择hong kong,是为了给该软件设定时区的 2)破解:。。。。。
3.PowerDesigner这软件的使用 6164
第一天: 1)SVN的环境架设好 2)业务分析-->写什么,要整明白 3)分工:几个人?,一天分一次?,具体的研究方向(前台1,数据库1,后台2) 4)梯度表:
第二天: 1)需求分析--->pd模型-->xxx.sql--->数据库--->添加测试数据 ps:文件夹的名字:第一组--出租房屋管理系统--张三 xxx.sql 2)找小样-->只是需要准备3个小样 (尽可能的贴近于你的项目)
第三天: 1)确定好技术框架,开始编写代码 组长:mvc,工具类,jar包,tomcat,jdk....
第四天: 1)完成基础功能,跑通业务流程 组长:标准案例:命名,文件夹分层,注释(文件(类和接口)注释,方法注释,语句注释)
第五天: 1)加技术功能:条件查询,批量删除,级联删除,上传下载,导出&导入excel,发邮件 验证码, EL&JSTL ,Ajax,e-charts,监听器,过滤器,表单验证,异常处理 二级联动,js/Jquery操作DOM,动态生成下拉列表,日期控件
ps:技术差的完成这些就可以
第六天: 1)发短信,2)二维码,3)分享,点赞收藏,
第七天:测试&修复bug
第八天:写文档
第九天:准备演讲ppt,完善项目
第十天:项目验收 项目规范:
- os;软件版不―网络环境建改都小组一样
- 使用的技术: html ,css,js,jquery,ajax,e-charts, jsp. servlet, jdbc, mysql, javamail, poi, commons-io等(必须项).特效,vue, bootstrap, Layui,日期组件,校验组件 3)项目的框架自己搭建,注解式开发,配置的xml文件开发自己说了算 4)尽可能的规范:要么是英语,要么是拼音,不建议tudouNamel