Java 用空值填充文本框
我正在写一个Webapp,其中有一些数据必须从数据库中提取并显示在文本框中。一切正常。但是如果(!rs.next()),我需要在这些文本框中将值显示为Java 用空值填充文本框,java,jdbc,dao,Java,Jdbc,Dao,我正在写一个Webapp,其中有一些数据必须从数据库中提取并显示在文本框中。一切正常。但是如果(!rs.next()),我需要在这些文本框中将值显示为无可用数据,目前我正在尝试下面的代码 package org.DAO; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.S
无可用数据
,目前我正在尝试下面的代码
package org.DAO;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import org.bean.UserBean;
import org.code.general.DBConnection;
import org.code.general.GetTheUserDetails;
public class GetDataDAO {
DBConnection dbConnection = new DBConnection();
GetTheUserDetails getTheUserDetails = new GetTheUserDetails();
public List<UserBean> list(String systemUserName) throws Exception {
List<UserBean> userBeans = new ArrayList<UserBean>();
try {
Connection conn = dbConnection.getConn();
Statement stmt = dbConnection.getStmt();
ResultSet rs = dbConnection.getRs();
String excelPath = dbConnection.getExcelPath();
String queryString = null;
dbConnection.createClassForNameForExcel();
conn = DriverManager.getConnection(
"jdbc:odbc:Driver={Microsoft Excel Driver (*.xls)};DBQ=" + excelPath + "; READONLY=FALSE;");
System.out.println("Connecting to database…");
System.out.println("Oracle JDBC Driver Registered!");
if (conn != null) {
System.out.println("You made it, take control your database now!");
} else {
System.out.println("Failed to make connection!");
}
stmt = conn.createStatement();
queryString = "Select * from [" + dbConnection.getSheetPath()
+ "$] where STATE IS NULL and [Case Owner] = '"
+ getTheUserDetails.getUserNameDetails(systemUserName) + "'";
System.out.println("Query is " + queryString);
rs = stmt.executeQuery(queryString);
ResultSetMetaData rsmd = rs.getMetaData();
System.out.println("bno of cols are " + rsmd.getColumnCount());
while (rs.next()) {
if (rs.next()) {
UserBean userBean = new UserBean();
userBean.setCaseNumber(rs.getString(1));
userBean.setCaseOwner(rs.getString(2));
userBean.setStatus(rs.getString(4));
userBean.setIssue(rs.getString(5));
userBean.setReason(rs.getString(6));
userBean.setDateOpened(rs.getString(7));
userBean.setAge(rs.getInt(8));
userBeans.add(userBean);
} else {
UserBean userBean = new UserBean();
userBean.setCaseNumber("None");
userBean.setCaseOwner("None");
userBean.setStatus("None");
userBean.setIssue("None");
userBean.setReason("None");
userBean.setDateOpened("None");
userBean.setAge(Integer.parseInt("None"));
userBeans.add(userBean);
}
}
rs.close();
conn.commit();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
return userBeans;
}
}
请让我知道我哪里出了问题,我怎样才能解决这个问题
谢谢
在jsp中,检查bean是否为空,然后在文本框下检查没有可用数据。理想情况下,您应该在servlet或控制器中完成,因为jsp应该尽可能轻
在jsp中,检查bean是否为空,然后在文本框下检查没有可用数据。理想情况下,您应该在servlet或控制器中执行此操作,因为jsp应该尽可能轻每次迭代代码都会跳过一行:
while (rs.next()) {
if (rs.next())
如果结果集为0或1行,则只需使用rs.next()
:
此外:
conn
上的null
检查是多余的,因为如果失败会抛出异常
- 使用try with resources确保总是发布
连接
,语句
和结果集
代码在每次迭代中跳过一行:
while (rs.next()) {
if (rs.next())
如果结果集为0或1行,则只需使用rs.next()
:
此外:
conn
上的null
检查是多余的,因为如果失败会抛出异常
- 使用try with resources确保总是发布
连接
,语句
和结果集
公共布尔下一步()
将光标移动到下一行。如果结果集中没有更多行,此方法将返回false
因此,当您两次调用rs.next()
时,一次在while
中调用,一次在if
中调用,每次都会错过一行
尝试删除如果
条件公共布尔下一步()
将光标移动到下一行。如果结果集中没有更多行,此方法将返回false
因此,当您两次调用rs.next()
时,一次在while
中调用,一次在if
中调用,每次都会错过一行
尝试删除如果
条件如果行为空,则必须具有如下逻辑:
rs = stmt.executeQuery(queryString);
ResultSetMetaData rsmd = rs.getMetaData();
System.out.println("bno of cols are " + rsmd.getColumnCount());
while (rs.next()) {
UserBean userBean = new UserBean();
userBean.setCaseNumber(rs.getString(1));
userBean.setCaseOwner(rs.getString(2));
userBean.setStatus(rs.getString(4));
userBean.setIssue(rs.getString(5));
userBean.setReason(rs.getString(6));
userBean.setDateOpened(rs.getString(7));
userBean.setAge(rs.getInt(8));
userBeans.add(userBean);
}
if(userBeans.size() == 0) {
UserBean userBean = new UserBean();
userBean.setCaseNumber("None");
userBean.setCaseOwner("None");
userBean.setStatus("None");
userBean.setIssue("None");
userBean.setReason("None");
userBean.setDateOpened("None");
userBean.setAge(Integer.parseInt("None"));
userBeans.add(userBean);
}
rs.close();
conn.commit();
conn.close();
但是如果行不是空的,只是包含空值,那么您可以有如下逻辑:
rs = stmt.executeQuery(queryString);
ResultSetMetaData rsmd = rs.getMetaData();
System.out.println("bno of cols are " + rsmd.getColumnCount());
while (rs.next()) {
UserBean userBean = new UserBean();
String value = rs.getString(1) == null ? "None" : rs.getString(1);
// you do this for all the columns, from 1 to 8
userBean.setCaseNumber(rs.getString(1));
userBean.setCaseOwner(rs.getString(2));
userBean.setStatus(rs.getString(4));
userBean.setIssue(rs.getString(5));
userBean.setReason(rs.getString(6));
userBean.setDateOpened(rs.getString(7));
userBean.setAge(rs.getInt(8));
userBeans.add(userBean);
}
rs.close();
conn.commit();
conn.close();
如果行为空,则必须具有如下逻辑:
rs = stmt.executeQuery(queryString);
ResultSetMetaData rsmd = rs.getMetaData();
System.out.println("bno of cols are " + rsmd.getColumnCount());
while (rs.next()) {
UserBean userBean = new UserBean();
userBean.setCaseNumber(rs.getString(1));
userBean.setCaseOwner(rs.getString(2));
userBean.setStatus(rs.getString(4));
userBean.setIssue(rs.getString(5));
userBean.setReason(rs.getString(6));
userBean.setDateOpened(rs.getString(7));
userBean.setAge(rs.getInt(8));
userBeans.add(userBean);
}
if(userBeans.size() == 0) {
UserBean userBean = new UserBean();
userBean.setCaseNumber("None");
userBean.setCaseOwner("None");
userBean.setStatus("None");
userBean.setIssue("None");
userBean.setReason("None");
userBean.setDateOpened("None");
userBean.setAge(Integer.parseInt("None"));
userBeans.add(userBean);
}
rs.close();
conn.commit();
conn.close();
但是如果行不是空的,只是包含空值,那么您可以有如下逻辑:
rs = stmt.executeQuery(queryString);
ResultSetMetaData rsmd = rs.getMetaData();
System.out.println("bno of cols are " + rsmd.getColumnCount());
while (rs.next()) {
UserBean userBean = new UserBean();
String value = rs.getString(1) == null ? "None" : rs.getString(1);
// you do this for all the columns, from 1 to 8
userBean.setCaseNumber(rs.getString(1));
userBean.setCaseOwner(rs.getString(2));
userBean.setStatus(rs.getString(4));
userBean.setIssue(rs.getString(5));
userBean.setReason(rs.getString(6));
userBean.setDateOpened(rs.getString(7));
userBean.setAge(rs.getInt(8));
userBeans.add(userBean);
}
rs.close();
conn.commit();
conn.close();
我认为调用rs.next()
两次不是一个好主意。这将导致不显示第一个值,因为您跳过了它。其次,如果数据库不包含任何值,则不应指向新行。您是说这些值只是null,但行存在吗?我只是担心行是空的,然后循环中的逻辑将无法工作。此外,如果rs.next()
为false,这意味着您无法创建空的UsesrBean。您必须在while循环之外执行此操作。您好@JernejK,我是否应该删除while(rs.next())
,并保留,如果不是这样的话
?视情况而定。数据库是否返回一个实例,只是所有行都为空?或者这是否意味着该表根本不包含行?因为如果表不包含任何行,“rs.next()”方法将始终为false。您甚至不会执行if-else,因为它甚至无法进入while循环。我认为调用rs.next()
两次不是一个好主意。这将导致不显示第一个值,因为您跳过了它。其次,如果数据库不包含任何值,则不应指向新行。您是说这些值只是null,但行存在吗?我只是担心行是空的,然后循环中的逻辑将无法工作。此外,如果rs.next()
为false,这意味着您无法创建空的UsesrBean。您必须在while循环之外执行此操作。您好@JernejK,我是否应该删除while(rs.next())
,并保留,如果不是这样的话
?视情况而定。数据库是否返回一个实例,只是所有行都为空?或者这是否意味着该表根本不包含行?因为如果表不包含任何行,“rs.next()”方法将始终为false。你甚至不会执行if-else,因为它甚至无法进入while循环。很高兴我的第一个代码帮助了你。享受编写更多代码的乐趣:)很高兴我的第一个代码确实帮助了您。享受编码的乐趣更多:)