1>请简述什么是JDBC和持久化概念

JDBC是英文:Java DataBase Connectivy 的缩写,是java在内部提供对应的接口(也就是java提供规范),同时各个厂商的数据库提供接口的实现类(通过提供jar包的形式),从而实现java与数据库的交互.

持久化概念是什么?持久化概念指将数据存储在可掉电式存储设备中,具体的实例就是将数据存储在关系型数据库(如MySql)中,它是实际存储在我们的硬盘上的.

2>请简述如何通过代码层面完成java代码和数据库之间的交互?

我们通过各个关系型数据库提供的实现类来调用方法,它具体的步骤可概括为:贾琏欲执事(当然在执行DML和DQL是有区别的)

2.1>贾:表示加载驱动(jar包里面的实现类)

琏:通过DriverManager获得connection连接对象

欲:一般通过预编码对象preparedStatement来执行sql语句

执:通过excutexxx();来执行sql语句

事:释放对应的资源

说明:

2.1>对于注册驱动,mysql5之后,mysql会自动帮你注册,所以加载驱动:Class.forName("com.mysql.jdbc.Driver")是可以省略的(但一般来说,还是写比较好)

2.2>在通过preparedStatemnt执行语句时候,我们可以无需将sql语句的值写死,只是提供一个问号作为占位符,然后再通过preparedStatement对象的get方法传入对应的参数,即可预处理数据(注意:还没开始执行哦)

3>如何理解DAO思想,怎么实现DAO?

DAO是英文:Data Acess Object 的缩写,中文意思是数据访问对象,其实就是将CRUD的方法封装成一个接口和对应的实现类来操作数据库

其中接口定义的方法有:

3.1>插入操作:public void insert(Object o); //要插入的数据被封装成了一个对象

3.2>删除操作:public void delete(Long id);//通过传入一个id,来修改对应行数

3.3>修改操作:public void updateById(Object o);

3.4>查询操作(查询一个对象):

public void Object selectById(Long id);//通过传入id来进行查询,并且将数据封装到一个对象里面

查询操作(查询多个对象):

public void List selectAll();//返回多个对象并将他们放在list集合中

4>如何理解JDBC中的事务?请你用自己的语言来简诉事务.

事务是由一组逻辑单元组成,一个逻辑单元可以理解为一个sql语句,在Mysql的系统中,在常见的三种存储引擎(MyISAM/MEMORY/INNODB)只有innodb存储引擎才支持事务,所以在创建表的时候,要注意这一点,而事务的存在是为了能将两个逻辑单元的事务实现业务逻辑上的统一,这一点在转账的案例上尤为突出,如果在代码层面上,第一个逻辑单元已经完成了对该行的修改,突然中间因为某些原因导致了异常,那么第二个逻辑单元的并没有实现对应的修改,最后导致一致性的破坏,为了解决这种情况的出现,我们需要引入事务.

那么事务是如何使用的呢?首先事务的使用时需要Connection对象来调用对应的方法,那么为什么是connection调用而不是Statement对象来调用呢?因为statment的使用常常是多样的,并且statment对象是connection调方法出来的,所以connection的功能更加强大,所以用connection调用

那么怎么使用事务呢?

三点:1>开启事务,在innodb中事务是默认提交的,我们需要调用connection.setAutoCommit(false);将自动提交改为手动提交

2>提交事务:connection.commit();

3>回滚事务:connection.rollBack();一旦在某个逻辑单元出现异常的时候,立马回滚,也即各个逻辑单元回到初始状态.

5>当利用DAO思想,实现数据库的数据转成对象时,怎么保证输出的时间格式为"yyyy-MM-dd HH:mm:ss"?

5.1>从上图得知,时间的格式是yyyy-MM-dd HH:mm:ss的,我一开始的思路是利用resultset.getDate("createtime")提取出来日期,再将其封装到对象的date属性中,然而问题是通过上述方法,只能获取到年月日的准确时间,而无法获取时分秒(都是00:00:00).

5.2>为了获取准确的时分秒,我使用了resultset.getTimeStamp("createtime")的方法,发现这个方式的输出,确实能实现时分秒的输出,然而我却奇怪地发现在每一个时分秒后面都多了一个0,比如2011-02-09 11:22:57.0,我现在都没清楚这个0是从哪里来的,但是我已经离正常的输出又近了一步

5.3>我在通过new Date(timestamp.gettime())去创建了date对象,然后我再利用simpledateformat将它format成字符串,这时候的输出就是我想要的,可以看看下图:

5.4> 上面通过时间戳的方式创建的date对象,我仍然将它传给对象,但为了输出的效果,我在对象类的toString方法中进行了小小改变:我这直接在creatime的输出处输出了被格式化的时间

分类: 源码分享 标签: 暂无标签

评论

暂无评论数据

暂无评论数据

目录