如何从 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 获取字符串并将其保存在变量中的更新?