如何从 A 类中的 JTextField 输入向 B 类中的数据库插入值

Posted

技术标签:

【中文标题】如何从 A 类中的 JTextField 输入向 B 类中的数据库插入值【英文标题】:How to insert values to a database in Class B from a JTextField input that is in Class A 【发布时间】:2016-10-16 07:00:58 【问题描述】:

我正在为一个项目制作一个在线食品订购系统,但我还是 Java 新手。我有两节课。 Signin.java 和其他的是 mextable.java。我正在尝试访问一个文本字段(signin.java 的一部分),从 Mextable.java 读取 that 值并将该值插入到 MexTable.java 内的表中。

我能够从signin.java 中的JTextField 读取值。我还能够获取该数据并将其插入到同一类 signin.java 中的表login 中。

所以我的问题是 我如何在不同的班级做同样的事情?意味着读取用户名(在signin.java 中输入JTextField)并将其插入到表orders(它是Mextable.java 的一部分)?

Signin.java 代码(我只添加了代码的主要行):

     public class signin extends javax.swing.JFrame 

      Connection conn;

      OracleResultSet rs = null; 
        OraclePreparedStatement pst;

  public signin() 
    initComponents();

    connect();

  public void connect()
  
     // connection with database
      
 private void loginActionPerformed(java.awt.event.ActionEvent evt)     

    protected static javax.swing.JTexfield userTF;

    try

    String pass = passTF.getText().trim();
    String user = userTF.getText().trim();
    String sql = "select uname,pass"
            + " from login "
            + "where uname = '"+user+"' "
            + "AND pass = '"+pass+"'";
   pst = (OraclePreparedStatement) conn.prepareStatement(sql);
   rs = (OracleResultSet) pst.executeQuery(sql);

      // remaining code
   

      //catch block

                             

Mextable.java:

从 Signin.java 访问 userTF 文本字段的组件值显然不起作用,因为没有插入该值。而不是那个值,NULL 被插入。此插入查询中的其余值插入到表orders 中。

   private void ConOrd2ActionPerformed(java.awt.event.ActionEvent evt)                                         
    try
     signin l = new signin();
        l.getComponent(0).getName();
        int rows = jTable23.getRowCount();
          String user4 = l.userTF.getText().trim();
      String sqli = "insert into orders"
            + "(o_id,item_id, order_name, uname)"
            + " values (ord_seq.nextval,?,?,'"+user4+"')"; 

          //o_id,item_id,order_name is inserted and uname value is added as       
   //Null instead of the username value in the JTextfield in the Signin page.

        pst = (OraclePreparedStatement) conn.prepareStatement(sqli);
        for(int row =0; row < rows; row++)
        
            String item2= (String)jTable23.getValueAt(row, 0);
            String fooname2= (String)jTable23.getValueAt(row, 1);
            pst.setString(1, item2);
            pst.setString(2, fooname2);
            pst.execute();
        
        pst.executeUpdate();
        conn.commit();

    

    catch(Exception e)
    
        System.out.println(e);
    
                               
       

【问题讨论】:

请一次问一个问题。你在问什么? Signin.java 的代码在哪里?没有它,我们怎么能帮助你,因为你抱怨这门课没有用? 我已经添加了代码。 Signin.java 的代码是代码块的第一部分。我说访问该值不起作用并且该值没有被插入。剩下的就是。班级工作正常。那里没有问题。只是输入 JTexfield 值(来自 Signin.java)没有被插入到另一个名为 MexTable.java 的类中的表中。 先生,我现在把它加粗了,所以很容易区分 问题是什么?如何从JTextField 中检索数据?如何将变量从 A 类传递到 B 类?如何将其写入数据库?你能用一个简洁的问题发minimal reproducible example 吗? 我已经进行了编辑。我添加了一个屏幕截图以获得更好的想法,并将我的问题变成了一个单一的形式。我的问题用粗体表示。 【参考方案1】:

据我所知,流程从登录到mextable。并且每个用户都将拥有用户名。在这种情况下,您可以将字段 JTextField 设为公共静态并在 mextable 类中使用该字段。

登录类

公共静态 JTextField val ;

并在可混合使用中访问

类名.变量名;

Signin.val;

【讨论】:

我把它变成了公共静态JTextField userTF;然后在 mextable 中我通常像 singin l = new singin(); 一样访问它然后 String sqli = "插入订单" + "(o_id,item_id, order_name, uname)" + " 值 (ord_seq.nextval,?,?,'"+l.userTF.getText().trim();+" ')"; 但仍然没有显示列 uname 的订单表 您不需要为静态字段创建对象,只需使用 classname.variable name.p 请在被 mextable 类访问之前检查该字段是否被填充 我把它变成了 singin.userTF.getText();我再次检查了订单表。还是没有运气! :( 并且该字段在被 mextable.class 访问之前没有被填充。 如果它没有被填充,你希望如何到达 mextable 。我假设首先你使用登录并且必须填充该字段。为了使签名生效,然后您可以将值存储在任何字段中的某个位置并跨类访问 ir。

以上是关于如何从 A 类中的 JTextField 输入向 B 类中的数据库插入值的主要内容,如果未能解决你的问题,请参考以下文章

如何从 JTextField 获取字符串并将其保存在变量中的更新?

如何从其他面板从 JTextField 获取输入

如何向 jtextfield 添加填充

如何从 Jpanel 中的 JTextField 获取值并将其发送到其他 JPanel?

java中如何实现在jtextfield中输入多行文字

java中JTextField输入的字符如何进行判断非法输入