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

时间:2016-10-16 07:00:59

标签: java swing jdbc

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

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

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

Signin.java Login page Screenshot

ORder Table from 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);
    }
}                               
       }

1 个答案:

答案 0 :(得分:0)

就我可以分析的问题而言,流程从登录到可用。并且每个用户都将拥有username.in在这种情况下,您可以将字段JTextField作为公共静态并在mextable类中使用该字段。

在登录课程中

Public static JTextField val;

并且可以使用mextable

班级名称。变种名称;

Signin.val;