基本插入在数据库中有效,但在 java 类中无效

Posted

技术标签:

【中文标题】基本插入在数据库中有效,但在 java 类中无效【英文标题】:Basic insert works in database but not in java class 【发布时间】:2019-06-25 12:21:21 【问题描述】:

我第一次使用 Microsoft Azure 的云数据库,所有 SQL (SELECT, UPDATE and DELETE) 都在工作,除了插入。当我尝试插入表格时,它给了我这个异常: com.microsoft.sqlserver.jdbc.SQLServerException:为更新生成了结果集。

请记住,在数据库本身中完成所有 SQL 工作。

我注意到它只在使用 stat.executeUpdate() 时才给我,当我将其更改为 stat.executeQuery() 时,没有例外并且“成功”,但它不会在表中插入任何内容。

我已经更新了所有软件,但仍然没有任何改变。

我发现一个 INSERT 有效,但另一个无效。

编辑:另一个问题是返回评论,而我的方法是无效的并且没有使用 stat.executUpdate() 来获取评论。

public static void main(String[] args)

    ConnectDB();
    insertHistory("5364", 10, "5005", "353", "6", 10, "admin");

这是损坏的 INSERT:

    public static void insertHistory(String sInt, int iBase, String P1, String P2, String P3, int pBase, String Email)
    
        try
        
            stat = con.prepareStatement("INSERT INTO dbo.tblHistory (Num, BaseForNum, P1, P2, P3, BaseForP, UserID) VALUES (?, ?, ?, ?, ?, ?, ?)");
            stat.setString(1, sInt);
            stat.setInt(2, iBase);
            stat.setString(3, P1);
            stat.setString(4, P2);
            stat.setString(5, P3);
            stat.setInt(6, pBase);
            stat.setInt(7, getUserID(Email));
            stat.executeUpdate();
        
        catch(SQLException e)
        
            System.out.println(e);
            JOptionPane.showMessageDialog(null, "Could not save to tblHistory.");
        
    

这是有效的插入:

    public static void insertAccount(String Email, String Password)
    
        try
        
            stat = con.prepareStatement("INSERT INTO dbo.tblUser (Email, Password) VALUES (?, ?)");
            stat.setString(1, Email);
            stat.setString(2, Password);
            stat.executeUpdate();
            JOptionPane.showMessageDialog(null, "Account created.");
        
        catch(SQLException e)
        
            JOptionPane.showMessageDialog(null, e);
        
    

我希望它没有异常并插入到数据库中,但我得到一个 SQL 异常。

【问题讨论】:

所以由于某种原因我的代码格式消失了,不知道如何修复它。 难道insertHistorystring参数之一是NULL SQLServerException: A result set was generated for update的可能重复 这个函数是做什么的? getUserID(Email) 是否返回 NULL,这可能导致问题? getUserID(Email) 正在获取与电子邮件在同一行的主键,现在它的值为 1 【参考方案1】:

我将stat.setInt(7, getUserID(Email)) 更改为stat.setInt(7, 1)。 RealSkeptic 说这是因为它访问了数据库。

【讨论】:

以上是关于基本插入在数据库中有效,但在 java 类中无效的主要内容,如果未能解决你的问题,请参考以下文章

简单的 Mockito 验证在 JUnit 中有效,但在 Spock 中无效

SQL Sum Query 在 PHPmyAdmin 中有效,但在 Java resutset 中无效

SQL 查询在 phpMyAdmin 中有效,但在 Java 中无效

在 SQL 中有效但在 PHP 中无效的查询

相同的代码在 java 中有效,但在 android 中无效

查询比较字符串在 Oracle 中有效,但在 Java 中无效