java中statement对象的作用,Statement stmt=null的作用是什么?该如何解决

Statement stmt=null的作用是什么?

本帖最后由 u014297219 于 2014-07-28 09:57:42 编辑

pageEncoding="gbk"%>

html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

通过MySql的JDBC驱动访问数据库

使用MySql的JDBC驱动访问数据库


学生ID学生姓名成绩班级

Connection con=null;    //作用是什么,能否省略,后面用Connection直接创建con对象?

Statement stmt=null;     //作用是什么,能否省略,后面用Statement直接创建stmt对象?

ResultSet rs=null;          //作用是什么,能否省略,后面用Resultset直接创建rs对象?

Class.forName("com.mysql.jdbc.Driver");

String url="jdbc:mysql://localhost:3306/student?useUnicode=true&charaterEncoding=gbk";

con=DriverManager.getConnection(url,"root","");       //上面省略后,该语句前加上Connection

stmt=con.createStatement();                       //上面省略后,该语句前加上Statement

String sql="select * from 成绩表 where 成绩>90";

rs=stmt.executeQuery(sql);                //上面省略后,该语句前加上Resultset

while(rs.next()){

%>

}

rs.close();

con.close();

stmt.close();%>

为什么首先对Connection、Statement和Resultset三个对象赋空值?

------解决方案--------------------

主要用意是:申明变量。

上面可以

rs=stmt.executeQuery(sql);

//上面省略后,该语句前加上Resultset 也可以

------解决方案--------------------

你这么写当然可以省略了,这么写代码不健壮。

应该这么写Connection con=null;    //作用是什么,能否省略,后面用Connection直接创建con对象?

Statement stmt=null;     //作用是什么,能否省略,后面用Statement直接创建stmt对象?

ResultSet rs=null;          //作用是什么,能否省略,后面用Resultset直接创建rs对象?

try{

Class.forName("com.mysql.jdbc.Driver");

String url="jdbc:mysql://localhost:3306/student?useUnicode=true&charaterEncoding=gbk";

con=DriverManager.getConnection(url,"root","");       //上面省略后,该语句前加上Connection

stmt=con.createStatement();                       //上面省略后,该语句前加上Statement

String sql="select * from 成绩表 where 成绩>90";

rs=stmt.executeQuery(sql);

}catch(Exception e){

//处理逻辑

}

这时就不能省略了。

------解决方案--------------------

作用时  及时清空缓存内容  释放资源

同时也起到全局变量

可以省略 但是介于效率问题 最好还是养成这样编码的好习惯

------解决方案--------------------

在你这段代码里 前三条声明没有起到什么作用,完全可以用你后三条注释的的方法写。

最能解释这种写法的估计就是3楼这段代码了,如果查询操作失败,catch块里面可能要用到con这些变量,而且要有finally块来清理资源,关闭con,或者用try with resource这种写法,不知道现在jsp里面支不支持。

------解决方案--------------------

Connection con=null;   声明对象变量,后面指向一个DriverManager.getConnection(url,"root","");  的对象引用

先定义null ,再指向对象的引用,是因为3楼的代码方式,因为try catch 的原因。

如果 直接将异常抛出的话,那可以直接

Connection con = DriverManager.getConnection(url,"root","");

------解决方案--------------------

引用:为什么首先对Connection、Statement和Resultset三个对象赋空值?

如果我说在本例中可以不用这么写,会不会有点失望?也就是说按照你后面注释的改法在本例中没啥差异。

不过你给的例子中倒是真有严重问题,就是没有保证资源的绝对释放,也就是说应该类似于:

Connection con=null;

....

try {

con=DriverManager.getConnection(url,"root","");

.....

}  finally {

if (con != null) {

con.close();

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值