【问题标题】:column not allowed here oracle with getText此处不允许使用带有 getText 的 oracle 列
【发布时间】:2014-11-11 20:30:36
【问题描述】:

我试图在数据库中保存/编辑/删除一个新行。用getText()写入要保存的gui值

这里是代码

Connection conn = Connessione.ConnecrDb();
   Statement stmt = null;
   ResultSet emps = null;

   try{


   String sql;  
        sql = "INSERT INTO PROGETTO.LIBRO (ISBN, DISPONIBILITA, TITOLO, CASA_EDITRICE, CODICE_AUTORE, GENERE, PREZZO)"
                + "VALUES (txt_isbn, txt_disp, txt_titolo, txt_casa, txt_autore, txt_genere, txt_prezzo)";


        stmt = conn.createStatement();

        emps = stmt.executeQuery(sql);

    String ISBN= txt_isbn.getText();
    String DISPONIBILITA= txt_disp.getText();
    String TITOLO= txt_titolo.getText();
    String CASA_EDITRICE= txt_casa.getText();
    String CODICE_AUTORE= txt_autore.getText();
    String GENERE= txt_genere.getText();
    String PREZZO = txt_prezzo.getText();


           JOptionPane.showMessageDialog(null, "SALVATO");



               }catch(SQLException | HeadlessException e)
   {
        JOptionPane.showMessageDialog(null, e);
   }
   finally 
   {
       try{
           if (emps != null)
                emps.close();
        }
        catch (SQLException e) { }
        try
        {
            if (stmt != null)
                stmt.close();
        }
        catch (SQLException e) { }
    }     

收到此错误:此处不允许列

上面的代码只负责插入操作。如何删除和修改表记录?

【问题讨论】:

  • 哪一行导致错误?
  • 这些变量是什么? txt_isbn, txt_disp, txt_titolo, ...?
  • 我假设您在将值分配给变量之前尝试插入值。您需要放置您的分配语句,然后在插入查询中使用它们并执行它。

标签: java sql oracle netbeans


【解决方案1】:

你在这里问了两个不同的问题

1.此处不允许列

这是因为您没有将任何参数的值传递到插入语句中。

我不确定您的要求,但是我将在这种情况下使用 PreparedStatement。

例子

String insertTableSQL = "INSERT INTO DBUSER"
        + "(USER_ID, USERNAME, CREATED_BY, CREATED_DATE) VALUES"
        + "(?,?,?,?)";
        PreparedStatement preparedStatement = dbConnection.prepareStatement(insertTableSQL);
        preparedStatement.setInt(1, 11);
        preparedStatement.setString(2, "MindPeace");
        preparedStatement.setString(3, "system");
        preparedStatement.setTimestamp(4, getCurrentTimeStamp());
        preparedStatement .executeUpdate();

2。这段代码只是保存数据,删除,修改一整行怎么办?

答案很简单。你必须编写相同的代码:)

你需要 3 个 SQL 语句,它具有 DELETE 和 UPDATE 操作,就像上面例子中的插入一样。

【讨论】:

    【解决方案2】:
    String sql = "INSERT INTO PROGETTO.LIBRO (ISBN, DISPONIBILITA, TITOLO, "
            + "CASA_EDITRICE, CODICE_AUTORE, GENERE, PREZZO)"
            + "VALUES (?, ?, ?, ?, ?, ?, ?)";
    
    try (PreparedStatement stmt = conn.createStatement()) {
    
        NumberFormat numberFormat = NumberFormat.getInstance(Locale.ITALY);
        String ISBN = txt_isbn.getText();
        String DISPONIBILITA = txt_disp.getText();
        String TITOLO = txt_titolo.getText();
        String CASA_EDITRICE = txt_casa.getText();
        String CODICE_AUTORE = txt_autore.getText();
        String GENERE = txt_genere.getText();
        BigDecimal PREZZO = new BigDecimal(
                numberFormat.parse(txt_prezzo.getText()).doubleValue())
               .setScale(2);
        stmt.setString(1, ISBN);
        stmt.setString(2, DISPONIBILITA);
        stmt.setString(3, TITOLO);
        stmt.setString(4, CASA_EDITRICE);
        stmt.setString(5, CODICE_AUTORE);
        stmt.setString(6, GENERE);
        stmt.setBigDecimal(7, PREZZO);
    
        int updateCount = stmt.executeUpdate();
    
        JOptionPane.showMessageDialog(null, "SALVATO");
    } catch(SQLException | HeadlessException e) {
        JOptionPane.showMessageDialog(null, e);
    }
    

    Try-with-resources 会自动关闭 stmt。

    准备好的语句将 SQL 中的值替换为:

    INSERT INTO table(column1, colum2, ....)
    VALUES('De\'l Rey',
           1234.50,
           ...)
    

    为:

     "De'l Rey"
     1.234,50
    

    如果成功,updateCount 应该为 1。

    【讨论】:

    • 我使用字符串作为价格。工作。我曾尝试使用浮动但不工作
    【解决方案3】:

    哇..真的!!

    我创建了三个按钮来删除/更新/插入,现在一切正常并自动更新表格。

    你已经非常非常棒了。非常感谢。

    最后一件事。

    如果我想在删除/更新等“找不到书”时插入错误消息,我尝试创建一个 if:

    Boolean found = false;
      try{
        sql= delete...... 
           etc
       if (!found)
    

    JOptionPane.showMessageDialog(null, "NOT FOUND","ERRORE",JOptionPane.WARNING_MESSAGE);

    等等……

     Connection conn = Connessione.ConnecrDb();
       Statement stmt = null;
       ResultSet emps = null;
    
    
        try{
    
            String sql= "DELETE FROM progetto.libro WHERE isbn =?";  /
    
            pst=(OraclePreparedStatement) conn.prepareStatement(sql);
    
            pst.setString (1, txt_isbn.getText());
    
            pst.execute();
    
    
    
             JOptionPane.showMessageDialog(null, "ELIMINATO");
             Update_table(); 
    
             txt_isbn.setText("");
             txt_disp.setText("");
             txt_titolo.setText("");
             txt_casa.setText("");
             txt_autore.setText("");
             txt_genere.setText("");
             txt_prezzo.setText("");
    
    
        }
    
    
        catch (Exception e)
         {
          JOptionPane.showMessageDialog(null,e);
    
    
        }     
    

    如果找到该书必须退出该书删除,否则“未找到”。但是当我部署时,我总是出来“删除”。为什么?

    再次感谢

    【讨论】:

      猜你喜欢
      • 2018-05-15
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      相关资源
      最近更新 更多