【问题标题】:How to insert values to a database in Class B from a JTextField input that is in Class A如何从 A 类中的 JTextField 输入向 B 类中的数据库插入值
【发布时间】: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 吗?
  • 我已经进行了编辑。我添加了一个屏幕截图以获得更好的想法,并将我的问题变成了一个单一的形式。我的问题用粗体表示。

标签: java swing jdbc


【解决方案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。
猜你喜欢
  • 2022-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-05
  • 2015-06-27
  • 1970-01-01
  • 2015-05-12
  • 2015-09-07
相关资源
最近更新 更多