12月1日——培训第10天
今天是12月的第一天了,11月已经结束了,培训进入第10天,我们现在是进行到jdbc的地方,
昨天商量了一下,由于班里有人要过来,我们就不准备换房子了,还在那里,把窗户封一下就行了。
课程难度开始增加,这就更需要一颗平常心来对待了……
------------------------------------------
课程开始:
首先是多态的分析:主要说的是java的多态是运行时多态,C++则分为编译时多态和运行时多态两种,
具体底层细节不清楚,以后再说吧。
昨天老师讲的getConnection伪代码其实是不正确的
读取数据接口:
Statement、PreparedStatement、CallableStatement
Statement中executeUpdate方法用来返回影响的行数。
例:
先记着导入昨天说的两个包,一个是oracle的,一个是mysql的。
public class QueryDemo
{
Connection conn = null ;
Statement stmt = null ;
ResultSet rs = null ;
try
{
Class.forName("oracle.jdbc.OracleDriver");
conn = DriverManager.getConnection("jdbc:oracle:thin:"+
+"hr/hr@localhost:1521:orcl");
stmt = conn.createStatement();
rs = stmt.executeQuery("select first_name,last_name from employees");
//结果集保存了一个叫做游标的概念,一开始指向的是第一行的前一个记录,所以对结果集进行任何
//操作之前都要将游标向下移动一位,比如absolute方法就可以将游标移动到指定位置
//如果结果集中有10条记录,那么游标共有12个位置。
rs.absolute(2);//默认情况下游标只能向前移动一位,所以这么写是不可以的!!
rs.afterLast();//这条语句在默认情况下也不可以用!!
rs.previous();rs.last();//在默认情况下也是不可以用的!!
rs.next();//在默认情况下它是可以向下移动的,这个方法返回一个布尔值,
//也就是如果下一条记录有值的话,那么返回是true,否则返回false。
//现在rs包含了第二条记录
//对结果集进行遍历的格式:
while(rs.next())
{
System.out.println(rs.getString("first_name"));
//注意getString中的列名必须是实际选出的列名,也就是说,如果列有别名的话,
//使用别名。
//使用索引值的效率是高于使用列名的!
}
conn.close();//如果不关闭连接的话,好像也看不出什么问题,但是这样的话内存资源占用
//得不到释放,数据库会当机,在整个系统中占用资源最多的就是数据库连接,
//占用内存资源、cpu资源都非常多,close方法释放的是数据库端的资源,
//而不是把这个Connection给垃圾回收掉,只有失去引用的对象才会被垃圾回收
Connection conn1 = stmt.getConnection();
System.out.println(conn==conn1) ; //会打印出true
System.out.println(conn.equals(conn1)) ; //也会打印出true
//所以,用statement来getConnection的话得到的连接就是我们创建出来的连接
//所以,一旦连接关闭了,statement肯定也无法使用了,statement一旦被关闭,结果集也被关了。
//还有,第二条查询语句一旦被定义出来了,就不可以再用第一条查询语句的结果集了,
//因为当执行第二条查询语句时,第一条查询语句的游标已经失效了,所以一般一个结果集没有处理
//完毕时,是不创建第二个结果集的。
//虽然理论上可以只关闭连接,但是实际上不怎么作,而是先关闭结果集,再是语句,最后是连接。
//注意:如果仅仅向上面所说的关闭连接Connection的话,还是不够的,还应该主动关闭Statement
//和resultSet
//但是如果这么关闭:
rs.close();
stmt.close();
conn.close();
//也是不行的!!在实际中也肯定是通不过的!比方说,前面的语句如果出现异常的话,
//上面三条语句一条都不执行了。应该至少放到finally块中,见下面
//可以根据rs.getString(列索引整数或者列的名称)
}
catch(Exception ex)
{
…………………………
}
finally
{
try
{
if(rs!=null)
{
rs.close(); //这个只是释放了服务器数据库端资源
rs = null ; //把rs置为空,可以垃圾回收,释放应用程序端的内存空间
}
}
catch(SQLException ex)
{
e.printStackTrace();
}
try
{
if(stmt!=null)
{
stmt.close();
stmt = null ;
}
}
catch(SQLException ex)
{
e.printStackTrace();
}
try
{
if(conn!=null&&!conn.isClosed())
//注意绝对不可以写成if(!conn.isClosed()&&conn!=null)
//因为&&是短路与,之所以要用短路与,是因为如果第一个表达式为假
//的话,那么后面都不执行了,试想一下,如果conn确实是null值的话
//假如!conn.isClosed()表达式在前面的话,那么由于conn是null值,
//则根本不可能调用isClosed方法,会抛空指针异常的!所以两个表达式不能交换位置,
//而且不能用&,因为如果conn确实是空的话,因为符号&的关系,还会继续
//!conn.isClosed()的表达式判断,还是会有空指针异常!
{
conn.close();
conn = null ;
}
}
catch(SQLException ex)
{
e.printStackTrace();
}
}
//上面的finally关闭才是正常的
};
---------------------------------
数据库连接池:
连接是很耗费资源的,动态连接数据库的网站一般很慢,
解决办法:
程序一开始就获得一个全局的连接,连接始终是有效的,但是速度会越来越慢,但是这个连接使用过程
中会造成内存的泄漏
12月1日——培训第10天相关推荐
- 清华大学教评中心 <jpxzx2019@mail.tsinghua.edu.cn> 12月24日9:00-11:10试讲评审材料(庞观和朱峰老师)
➤01 邮件通知 卓老师好!感谢您担任线上试讲评审专家! 1.评审时间: 2020年12月24日(周四)9:00-11:10 2.试讲教师及内容: 12月24日 上 午 上午 试讲时间 9:00-10 ...
- 12月23日——培训第29天
今天是田老师讲课,我猜大概很多人都很想念他吧-- 其实大概很多人和我的想法类似:张老师的教学不适合初学者,更适合有一定基础且对知识点有很强把握的人,相对初学 来说,还是田老师的风格较容易让人接受一些. ...
- 12月25日——培训第31天
圣诞节--西方基督徒笃信的一天,圣灵降临的一天,什么时候竟然变成了中国人津津乐道的节日了呢--全球化.国际化已经 让我们没有太多自己的东西了,今天的中国人血脉中的传统文化还能保留有多少呢?我们这些现在 ...
- 12月2日——培训第11天
今天是周六,由袁龙友老师讲解SQLServer,以后这样的来自企业的老师可能会陆续前来吧,虽然 今天不是田老师上课,但是他也来了,难道他真的是这一期的主要负责人?张老师讲课的时间又能 有多少呢?当时可 ...
- 12月7日——培训第15天
今天应该是开始讲Hibernate了吧,昨天换了宿舍,原来那个宿舍虽然说地方大,但是晚上实在是太冷了, 现在换到的地方就是金毅从前的宿舍,也是在3层,现在好了,月租也便宜,屋子也暖和,很不错了-- 今 ...
- 12月5日——培训第14天
今天改坐了307,虽然车挤了一些,但是确实十分的顺利,没有一点堵车,不错. 今天该是行集rowset了吧,也不知道这netMeeting能不能用了. ------------------------- ...
- 12月16日——培训第23天
开始大风降温了,其实降到什么程度都无所谓,反正教室暖和,宿舍暖和,顶多就是路上冷点,这有什么呢 上午课程开始: HTML是谁发明的?Tim Berners-lee,英国人,父母参与过世界上第一台计算机 ...
- 12月9日——培训第17天
上午课程开始: 回顾:配置文件和映射文件:SessionFactory和Session的使用注意事项 配置文件 1 使用XML : 调用Configuration.configure()方法,如果不传 ...
- 12月19日——培训第26天
今天只上半天课,原因嘛,也简单,田老师经常的一周6天的上课,觉得累了,所以这周的第六天 他也就给自己放了半天假-- ------------------------------------------ ...
最新文章
- 控制台打印汉字的方法
- 杭电 1181 变形课
- SpringBatch简介
- HPE 的 OpenSwitch 项目得到 Linux 基金会支持
- maven的pom.xml中profiles的作用
- 如果我们预先得知未来某一刻会因为此刻的决定而失败,那是否还会继续努力?
- ViewPager的事件冲突的解决
- 【解题报告】Leecode 2057. 值相等的最小索引——Leecode周赛系列
- 机器学习实战应用50讲(一)-使用student’s T检验的未必是学生
- 《软件需求分析(第二版)》第 6 章——获取客户的需求 重点部分总结
- python分析犯罪数据_使用 SparkSQL 分析纽约市犯罪数据
- CSS从大图中抠取小图完整教程(background-position应用) (转)
- .net mysql 工作流_一个适合于.NET Core的超轻量级工作流引擎:Workflow-Core
- Vue 过滤器/watch/computed
- 指针变量使用规则实例
- Postgresql 地理位置操作
- 北大编程网格【练习题】,北医计算概论课程编程题答案整理,C语言/python/C++
- 近几年CVPR图像压缩总结
- 公开我的 星际帝国 辅助程序源代码
- 拒绝低销量:2022最新YouTube引流亚马逊方法