发表于: 2018-09-17 23:08:10
2 347
今日完成:
1.statement对象
1)创建时不需要传递sql语句,但是执行需传递sql语句;
2)如果涉及到动态参数的传递,必须使用字符串的拼接
执行sql语句:
execute:返回boolean类型的值,代表是否有结果集返回(如果执行select操作,是有ResultSet的,返回值为true)
executeUpdate:返回int类型的值,代表的是,操作执行完成后,受影响的数据库的行计数(针对于insert,update,delete)
executeQuery:返回的是ResultSet
ResultSet:类似于指针或者游标的东西,里边保存的不是所有的结果,而是指向结果集的正上方。所以如果一旦连接关闭那么ResultSet将取不到值
处理结果集:
next(),每执行一次,向下移动一次,如果有值,返回true,如果没值返回false
while(rs.next()){
rs.getType(index/columnName);
如果传的是index,那么索引是从1开始的。
例如:
执行select id,last_name from s_emp;
那么1代表的就是id,依次类推
}
statement增删改查:
增:这里碰到了一个问题,就是数据库的连接问题
删:
改:
查:
2.PreparedStatement:
1.创建时就需要传递sql语句,执行的时候不需要传递sql语句
2.如果涉及到动态参数的传递,可以使用字符串拼接,也可以使用?占位的形式
要求在执行sql语句之前,给?号传值。
给?传值使用的是
pstmt.setType(index,value); index代表给第几个?赋值。index从1开始
3.提供预编译的功能,某种程度上可以避免sql注入的问题
4.提前做语法检查,在给?赋值的过程中要求数据类型一定要匹配,这样在某种程度上可以避免因为数据类型不匹配而发生的异常
收获:今天较忙,没法抽出大量时间完成学习,对statement对象完成增删改查做了个练习,工厂模式还是非常好用的,减少了代码的重复。
问题:在今天编写测试类运行add()时,出现了一个跟“transport socket”有关的异常,我开始以为是因为我忘记了关闭资源而产生的,当我尝试关闭连接时,运行测试类时又报了空指针异常,然后不关闭资源,测试类又能正常运行了,而那个跟“transport socket”有关的异常没能在复现一边。
明天计划:statement和preparestatement的区别,然后分别用他们完成批处理功能
评论