【问题标题】:How to properly pass argument values to sql query? java, netbeans如何正确地将参数值传递给 sql 查询?爪哇,网豆
【发布时间】:2013-12-09 01:25:03
【问题描述】:

我的 sql 查询语句有问题。如何正确地将参数值传递给 sql 查询?当我单击按钮时,它显示“INVALID ALTER COMMAND”。 Old_table_name、New_table_name 是文本字段

public void Change_table_name(String old_name, String new_name){
    try{
        Statement stmt=con.createStatement();
        ResultSet res=stmt.executeQuery("Alter table"+old_name.trim()+"Rename to"+new_name.trim());
        Table_Database.setModel(DbUtils.resultSetToTableModel(res));

    }catch(Exception e){
        JOptionPane.showMessageDialog(null, e);
    }
}

private void Change_table_nameActionPerformed(java.awt.event.ActionEvent evt) {                                                  
    String old_name = Old_table_name.getText().toString();
    String new_name = New_table_name.getText().toString();
    Change_table_name(old_name, new_name);

}  

【问题讨论】:

    标签: java sql database netbeans oracle11g


    【解决方案1】:

    您在查询中留出一些空间......就像那样......

    "Alter table "+old_name.trim()+" Rename to "+new_name.trim());
    

    【讨论】:

    • 感谢您的回复。它更改了表名,但是现在当我再次运行程序时,它说表或视图不存在。错误代码:942。它正在调用旧表名而不是新表名。但是,在数据库查看器中,表名已更改。
    【解决方案2】:

    你的方法有错误,改成下面的方法

        public void Change_table_name(String old_name, String new_name){
    try{
        Statement stmt=con.createStatement();
        ResultSet res=stmt.executeQuery("Alter table "+old_name.trim()+" Rename to "+new_name.trim());
        Table_Database.setModel(DbUtils.resultSetToTableModel(res));
    
    }catch(Exception e){
        JOptionPane.showMessageDialog(null, e);
    }
    }
    

    试试这个,如果不行就给个空格,然后用单引号,

    public void Change_table_name(String old_name, String new_name){
    try{
        Statement stmt=con.createStatement();
        ResultSet res=stmt.executeQuery("Alter table '"+old_name.trim()+"' Rename to '"+new_name.trim()+"'");
        Table_Database.setModel(DbUtils.resultSetToTableModel(res));
    
    }catch(Exception e){
        JOptionPane.showMessageDialog(null, e);
    }
     }
    

    【讨论】:

    • 感谢您的回复! :) 插入单引号后它说:无效的表名。我该怎么办?
    • 我收到消息:无法设置空表模型。但是表名会发生变化。这是什么错误?这是什么意思?
    • 这一行 ResultSet res=stmt.executeQuery("Alter table "+old_name.trim()+" Rename to "+new_name.trim()); 没有返回任何结果集,因此您的结果集值为 null 并且您将该 res 对象分配给 TableModel,这就是您收到此错误的原因。
    • 尝试通过注释这一行 Table_Database.setModel(DbUtils.resultSetToTableModel(res)); 并使用此语句 stmt.executeQuery("Alter table "+old_name. trim()+" 重命名为 "+new_name.trim()); 不分配给 res
    • 我明白你的意思。但是我应该如何处理结果集才能更新(更改)我的表名。我用来在 jtable 中显示表中的数据的 TableModel
    【解决方案3】:

    您还应该使用 executeUpdate() 而不是 executeQuery()。正如 Ajeessh 所指出的,“Alter table...”不返回任何结果集。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-05
      • 2010-10-10
      • 1970-01-01
      • 2022-11-18
      • 2016-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多