求助:请各位老大帮忙看看在JAVA中处理NULL的问题,不盛感激!

zsh168 2004-01-16 11:22:07
我的数据库查询BEAN如下DCBquery.java:
package DCB;
import java.sql.*;
import DBconnect.*;
public class DCBquery{

private String table_name_sql;//定义表名
private ResultSet rs = null;//定义结果集类
DBconnect cc = new DBconnect();
Connection conn= cc.getConnect();//建立连接类
Statement stmt=conn.createStatement();

/**
* 该方法是以传递过来的参数提取该表的记录
* @return
*/
public ResultSet rs_record() {
String sql="select * from "+this.getTable_name_sql();
try{
rs = stmt.executeQuery(sql);
}
catch(Exception e){
System.out.println("rs_record=" +e.getMessage());
}
return rs;
}

public DCBquery() throws Exception {
}
/**
* 该方法返回该表的记录总数
* @return
* @throws Exception
*/
public int sum() throws Exception{
String sql_sum = "select count(rowid) as t from "+this.getTable_name_sql();
rs=stmt.executeQuery(sql_sum);
rs.next();
if(rs != null){
sum = rs.getInt("t");
return sum;
}
else{
return 0;
}
}
/**
* 该方法是获得一个表名或者是一个表名加条件的形式
* 比如:dcb01或者dcb01 where jh='DW112'的格式
* @return
*/
public String getTable_name_sql() {
return table_name_sql;
}
/**
* 该方法是设置一个表名或者是一个表名加条件的形式
* @param table_name_sql 表名或者表名加条件
* 比如:dcb01或者dcb01 where jh='DW112'的格式
*/
public void setTable_name_sql(String table_name_sql) {
this.table_name_sql = table_name_sql;
}
}
下面是通过该查询页面显示的数据D_EJDW.jsp:
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<%@ page import="DCB.*"%>
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>二级单位代码</title>
<link rel=stylesheet href="../sstyle.css" type="text/css">
<script language="JavaScript" src="../js/sys_alert.js"></script>
</head>

<body>

<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">
<tr>
<td width="100%">
<p align="center"><b>二级单位代码</b></td>
</tr>
<tr>
<td width="100%"><font size="2">  <a href="D_EJDWAdd.jsp">录入二级单位代码</a></font></td>
</tr>
<tr>
<td width="100%"> <table border="1" cellpadding="1" cellspacing="1" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber2">
<tr height="20">
<td width="6%" align="center"><font size="2"><b>代码</b></font></td>
<td width="17%" align="center"><font size="2"><b>单位名称</b></font></td>
<td width="10%" align="center"><font size="2"><b>局级单位代码</b></font></td>
<td width="54%" align="center"><font size="2"><b>备注</b></font></td>
<td width="7%" align="center"><b><font size="2">修改</font></b></td>
<td width="6%" align="center"><b><font size="2">删除</font></b></td>
</tr>
<%
DCBquery D_EJDW=new DCBquery();
D_EJDW.setTable_name_sql("D_EJDW");
int curPages = Pagination.curPages(Pagination.strPage(request,"page"));
Pagination.setRows(10);//每页显示10条
int totalPages = Pagination.getPages(D_EJDW.sum());//取出总页数
if(D_EJDW.sum()>0){
ResultSet rs = Pagination.getPageSet(D_EJDW.rs_record(),curPages);
while(rs.next()){
%>
<tr align="center">
<td><%=rs.getString("DM")%></td>
<td><%=rs.getString("DWMC")%></td>
<td><%=rs.getString("JJDWDM")%></td>
<td><%=rs.getString("BZ")%></td>
</tr>
<%
}
rs.close();
%>
</table></td>
</tr>

</table>
</body>

</html>
我的问题是这样的:当通过上面的查询BEAN:DCBquery.java查询出数据的时候,下面显示的页面,如果字段中有空值NULL的时候,会显示在下面,当然有个比较笨的办法是可以在取出每个字段的数据比如在:rs.getString("DM")之前可以用个IF语句分别判断每个字段,这样可以判断;
如果几张表还可以,如果表多的话,很浪费时间的;我的问题是有没有比较简单的方法,直接在上面的BEAN里面处理一下,直接从select * from 表名;取出的数据处理一下,当然也有的想法是通过VAL这个函数判断,但是这样也会写不少的SQL语句,有没有更简单的方法,请各位高手给小弟指点一下!
...全文
54 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
darthin 2004-01-18
  • 打赏
  • 举报
回复
up
lightninglei 2004-01-18
  • 打赏
  • 举报
回复
zsh168(zsh168):
首先你是否确认你的数据类型都是String?也就是你的数据库取出来的内容是否全部都是String,如果是可以用:
public String isDataNull(String str){
if (obj==null){
return "";
}else{
return str;
}
}

如果不是,那么你需要对每个类型都自己判断。

当然你也可以用 instanceof 来判断是什么类型再做操作,如果嫌麻烦,也可以做个函数,里面try一下,出错就返回""就好了。
stonecsdn 2004-01-17
  • 打赏
  • 举报
回复
自己定义相应的类型类重载toString()方法:可以这样处理
toString(){
if(this==null)
return "";
else
return super.toString();
}
//只是一种想法。
zsh168 2004-01-17
  • 打赏
  • 举报
回复
lightninglei(闪电磊) 兄的方法,我试验过了,提示下面的错误:
D:\Tomcat 5.0\work\Catalina\localhost\_\org\apache\jsp\zyyt\TestWell\DCB02List_jsp.java:57: illegal start of expression
public String isDataNull(Object obj){
^

An error occurred at line: 79 in the jsp file: /zyyt/TestWell/DCB02List.jsp

Generated servlet error:
D:\Tomcat 5.0\work\Catalina\localhost\_\org\apache\jsp\zyyt\TestWell\DCB02List_jsp.java:86: cannot resolve symbol
symbol : method isDataNull (java.lang.String)
location: class org.apache.jsp.zyyt.TestWell.DCB02List_jsp
out.print(isDataNull(rs.getString("CSLXDM")));
^
2 errors

zsh168 2004-01-17
  • 打赏
  • 举报
回复
这个NULL倒是不参与运算,我就是查询的时候不想让它在界面中显示出来,也就是NULL变成空白就行了
clare0peng 2004-01-17
  • 打赏
  • 举报
回复
只要保证不让NULL值参与运算就不会有这种问题的
平时初始化,实例化的时候注意一点就ok了
kenli 2004-01-16
  • 打赏
  • 举报
回复
try catch
呵呵
timtin0361 2004-01-16
  • 打赏
  • 举报
回复
((rs.getString("DM")==null)?" ":rs.getString("DM"))

<tr align="center">
<td><%=((rs.getString("DM")==null)?" ":rs.getString("DM"))%></td>
....
</tr>

为null就显示空格
lightninglei 2004-01-16
  • 打赏
  • 举报
回复
你可以做一个函数,比如
public String isDataNull(Object obj){
if (obj==null){
return "";
}else{
return obj;
}
}
然后把<%=rs.getString("DM")%>改成<%=isDataNull(rs.getString("DM"))%>

这个方法我没有测试过,你测试一下,如果能确定取出来的都是String ,那么把Object参数改成String更好。
xl5550 2004-01-16
  • 打赏
  • 举报
回复
太长了,晕~
Leemaasn 2004-01-16
  • 打赏
  • 举报
回复
我也Up一下

我也Up两下

!!!
zsh168 2004-01-16
  • 打赏
  • 举报
回复
timtin0361(全力以赴我们心中的梦) 其实你的这个方法也不简洁,相当于IF语句,我有好多张表的,最少80张,这样判断太多了吧

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧