Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 空的结果集。你是不是想做一些类似的事情_Java_Mysql_Java Ee 6_Java Ee 7 - Fatal编程技术网

Java 空的结果集。你是不是想做一些类似的事情

Java 空的结果集。你是不是想做一些类似的事情,java,mysql,java-ee-6,java-ee-7,Java,Mysql,Java Ee 6,Java Ee 7,“从编号为“”的CList中选择1”。身份证件"'"? 其中“id”是一个变量?“从Number='id'所在的CList中选择1” 看起来您正在尝试实际选择数值为“id”的记录。当您尝试对空结果集执行“rs.next()”命令时,这可能会导致错误。你是不是想做一些类似的事情 “从编号为“”的CList中选择1”。身份证件"'"? 其中“id”是一个变量?由于您的第一个查询错误,导致出现此错误,因为它返回的结果集为空 首先, rs = s.executeQuery("SELECT 1 FROM

“从编号为“”的CList中选择1”。身份证件"'"? 其中“id”是一个变量?

“从Number='id'所在的CList中选择1”

看起来您正在尝试实际选择数值为“id”的记录。当您尝试对空结果集执行“rs.next()”命令时,这可能会导致错误。你是不是想做一些类似的事情


“从编号为“”的CList中选择1”。身份证件"'"? 其中“id”是一个变量?

由于您的第一个查询错误,导致出现此错误,因为它返回的结果集为空

首先,

rs = s.executeQuery("SELECT 1 FROM CList WHERE Number='id'");
代码中的上述行不正确,应该是这样的:

**rs = s.executeQuery("SELECT 1 FROM CList WHERE Number="+id);**
**ps = (PreparedStatement) con.prepareStatement("INSERT INTO CList (Number, First_Name, Last_Name,Phone_Number) VALUES (?,?,?,?)",Statement.RETURN_GENERATED_KEYS);
ps.setString(1,sm.getEmployeeID());
ps.setString(2,sm.getFirstName());
ps.setString(3,sm.getLastName());
ps.setString(4,sm.getPhoneNumber());**
然后将向数据库触发正确的查询

其次,下面的代码有问题

if(rs.next() == false) { 
                     SMember sm = new SMember();
                     ps = (PreparedStatement) con.prepareStatement("INSERT  
                                         INTO CList (Number, First_Name, Last_Name,  
                                         Phone_Number) VALUES ('"+sm.getEmployeeID()+"', 
                                         '"+sm.getFirstName()+"', '"+sm.getLastName()+"', 
                                               '"+sm.getPhone()+"')",   
                                     Statement.RETURN_GENERATED_KEYS);
                     ps.executeUpdate(); 
在上面的代码中,您应该初始化查询中当前的SMember对象,它们将变为null。当您使用PreparedStatement时,您应该像下面这样使用查询:

**rs = s.executeQuery("SELECT 1 FROM CList WHERE Number="+id);**
**ps = (PreparedStatement) con.prepareStatement("INSERT INTO CList (Number, First_Name, Last_Name,Phone_Number) VALUES (?,?,?,?)",Statement.RETURN_GENERATED_KEYS);
ps.setString(1,sm.getEmployeeID());
ps.setString(2,sm.getFirstName());
ps.setString(3,sm.getLastName());
ps.setString(4,sm.getPhoneNumber());**

出现此错误是因为您的第一个查询错误,它返回的结果集为空

首先,

rs = s.executeQuery("SELECT 1 FROM CList WHERE Number='id'");
代码中的上述行不正确,应该是这样的:

**rs = s.executeQuery("SELECT 1 FROM CList WHERE Number="+id);**
**ps = (PreparedStatement) con.prepareStatement("INSERT INTO CList (Number, First_Name, Last_Name,Phone_Number) VALUES (?,?,?,?)",Statement.RETURN_GENERATED_KEYS);
ps.setString(1,sm.getEmployeeID());
ps.setString(2,sm.getFirstName());
ps.setString(3,sm.getLastName());
ps.setString(4,sm.getPhoneNumber());**
然后将向数据库触发正确的查询

其次,下面的代码有问题

if(rs.next() == false) { 
                     SMember sm = new SMember();
                     ps = (PreparedStatement) con.prepareStatement("INSERT  
                                         INTO CList (Number, First_Name, Last_Name,  
                                         Phone_Number) VALUES ('"+sm.getEmployeeID()+"', 
                                         '"+sm.getFirstName()+"', '"+sm.getLastName()+"', 
                                               '"+sm.getPhone()+"')",   
                                     Statement.RETURN_GENERATED_KEYS);
                     ps.executeUpdate(); 
在上面的代码中,您应该初始化查询中当前的SMember对象,它们将变为null。当您使用PreparedStatement时,您应该像下面这样使用查询:

**rs = s.executeQuery("SELECT 1 FROM CList WHERE Number="+id);**
**ps = (PreparedStatement) con.prepareStatement("INSERT INTO CList (Number, First_Name, Last_Name,Phone_Number) VALUES (?,?,?,?)",Statement.RETURN_GENERATED_KEYS);
ps.setString(1,sm.getEmployeeID());
ps.setString(2,sm.getFirstName());
ps.setString(3,sm.getLastName());
ps.setString(4,sm.getPhoneNumber());**

出现此错误是因为您的第一个查询错误,它返回的结果集为空

首先,

rs = s.executeQuery("SELECT 1 FROM CList WHERE Number='id'");
代码中的上述行不正确,应该是这样的:

**rs = s.executeQuery("SELECT 1 FROM CList WHERE Number="+id);**
**ps = (PreparedStatement) con.prepareStatement("INSERT INTO CList (Number, First_Name, Last_Name,Phone_Number) VALUES (?,?,?,?)",Statement.RETURN_GENERATED_KEYS);
ps.setString(1,sm.getEmployeeID());
ps.setString(2,sm.getFirstName());
ps.setString(3,sm.getLastName());
ps.setString(4,sm.getPhoneNumber());**
然后将向数据库触发正确的查询

其次,下面的代码有问题

if(rs.next() == false) { 
                     SMember sm = new SMember();
                     ps = (PreparedStatement) con.prepareStatement("INSERT  
                                         INTO CList (Number, First_Name, Last_Name,  
                                         Phone_Number) VALUES ('"+sm.getEmployeeID()+"', 
                                         '"+sm.getFirstName()+"', '"+sm.getLastName()+"', 
                                               '"+sm.getPhone()+"')",   
                                     Statement.RETURN_GENERATED_KEYS);
                     ps.executeUpdate(); 
在上面的代码中,您应该初始化查询中当前的SMember对象,它们将变为null。当您使用PreparedStatement时,您应该像下面这样使用查询:

**rs = s.executeQuery("SELECT 1 FROM CList WHERE Number="+id);**
**ps = (PreparedStatement) con.prepareStatement("INSERT INTO CList (Number, First_Name, Last_Name,Phone_Number) VALUES (?,?,?,?)",Statement.RETURN_GENERATED_KEYS);
ps.setString(1,sm.getEmployeeID());
ps.setString(2,sm.getFirstName());
ps.setString(3,sm.getLastName());
ps.setString(4,sm.getPhoneNumber());**

出现此错误是因为您的第一个查询错误,它返回的结果集为空

首先,

rs = s.executeQuery("SELECT 1 FROM CList WHERE Number='id'");
代码中的上述行不正确,应该是这样的:

**rs = s.executeQuery("SELECT 1 FROM CList WHERE Number="+id);**
**ps = (PreparedStatement) con.prepareStatement("INSERT INTO CList (Number, First_Name, Last_Name,Phone_Number) VALUES (?,?,?,?)",Statement.RETURN_GENERATED_KEYS);
ps.setString(1,sm.getEmployeeID());
ps.setString(2,sm.getFirstName());
ps.setString(3,sm.getLastName());
ps.setString(4,sm.getPhoneNumber());**
然后将向数据库触发正确的查询

其次,下面的代码有问题

if(rs.next() == false) { 
                     SMember sm = new SMember();
                     ps = (PreparedStatement) con.prepareStatement("INSERT  
                                         INTO CList (Number, First_Name, Last_Name,  
                                         Phone_Number) VALUES ('"+sm.getEmployeeID()+"', 
                                         '"+sm.getFirstName()+"', '"+sm.getLastName()+"', 
                                               '"+sm.getPhone()+"')",   
                                     Statement.RETURN_GENERATED_KEYS);
                     ps.executeUpdate(); 
在上面的代码中,您应该初始化查询中当前的SMember对象,它们将变为null。当您使用PreparedStatement时,您应该像下面这样使用查询:

**rs = s.executeQuery("SELECT 1 FROM CList WHERE Number="+id);**
**ps = (PreparedStatement) con.prepareStatement("INSERT INTO CList (Number, First_Name, Last_Name,Phone_Number) VALUES (?,?,?,?)",Statement.RETURN_GENERATED_KEYS);
ps.setString(1,sm.getEmployeeID());
ps.setString(2,sm.getFirstName());
ps.setString(3,sm.getLastName());
ps.setString(4,sm.getPhoneNumber());**

查询语句可能存在“从CList中选择1,其中Number='id'”的问题,在SELECT语句中,您的id被视为字符串。我们需要用value替换

-->尝试这样{“从CList中选择1,其中Number=“+id}

-->还有一件事“从表名中选择1”将打印1,因为没有行对您的条件有用

所以我的建议是

{"SELECT * FROM CList WHERE Number="+id}

试试这个

查询语句可能存在“从CList中选择1,其中Number='id'”的问题,在SELECT语句中,您的id被视为字符串。我们需要用value替换

-->尝试这样{“从CList中选择1,其中Number=“+id}

-->还有一件事“从表名中选择1”将打印1,因为没有行对您的条件有用

所以我的建议是

{"SELECT * FROM CList WHERE Number="+id}

试试这个

查询语句可能存在“从CList中选择1,其中Number='id'”的问题,在SELECT语句中,您的id被视为字符串。我们需要用value替换

-->尝试这样{“从CList中选择1,其中Number=“+id}

-->还有一件事“从表名中选择1”将打印1,因为没有行对您的条件有用

所以我的建议是

{"SELECT * FROM CList WHERE Number="+id}

试试这个

查询语句可能存在“从CList中选择1,其中Number='id'”的问题,在SELECT语句中,您的id被视为字符串。我们需要用value替换

-->尝试这样{“从CList中选择1,其中Number=“+id}

-->还有一件事“从表名中选择1”将打印1,因为没有行对您的条件有用

所以我的建议是

{"SELECT * FROM CList WHERE Number="+id}

试试这个

这里有几个问题

问题的解决方案是不让数据库生成密钥,这就是为什么以后不能请求生成的密钥

请看这行代码:

ps = (PreparedStatement) con.prepareStatement("INSERT INTO CList (Number, First_Name, Last_Name, Phone_Number) VALUES ('"+sm.getEmployeeID()+"', '"+sm.getFirstName()+"', '"+sm.getLastName()+"', '"+sm.getPhone()+"')", Statement.RETURN_GENERATED_KEYS);
稍后,您需要将
编号
列的值作为生成的键进行检索。但是,您确实为该列传递了一个值,即
sm.getEmployeeID()
的返回值。若您传递一个值,它将不会生成(假设此列在数据库中定义为自动递增)

但是,修复此问题并不能解决所有问题,因为您的代码有很多问题。让我列出我可以直接发现的问题:

  • 您可以通过创建新对象来初始化变量sm。但是您仍然没有员工id、名字、姓氏或电话号码的值,因为您没有将这些值设置为sm(或者您是在默认构造函数中设置的?)
  • 您正试图使用一个准备好的语句,这是好的,但实际上您并没有这样做,这是非常糟糕的,因为它为SQL注入打开了基础。您不应该像现在这样创建查询字符串,而应该使用一个固定的字符串,例如
    INSERT-INTO-CList(Number,First\u-Name,Last\u-Name,Phone\u-Number)值(?,,?)
    ,然后在执行该语句之前设置该语句的值。这样,就不会有人通过该语句干扰您的数据库(请阅读SQL注入,只需通过谷歌搜索它来查看您将引入的问题)
  • 您的员工id似乎是方法的
    eId
    参数。您也应该在select语句中使用该参数,以查看它是否已存在于数据库中(此处也使用准备好的语句),并在稍后的insert语句中(当id不存在于数据库中时)
  • 如果您正在检查特定id,然后插入该特定id,则检索生成的某些id是毫无用处的。您已经定义了唯一标识符。请使用该标识符