我正在创建一个Java应用程序,以允许用户通过GUI界面将数据插入MySQL数据库。它的结构是对所有GUI使用主类,然后对每个函数在外部使用单独的类(创建表,插入数据等)。
我已经在GUI部分中创建了一个函数,该函数通过使用actionListener来检查用户何时按下JButton,然后打开一个JOptionPane,该面板中包含带有一些JTextfields的面板,然后进入if / else语句进行检查如果第一个JTextField中包含文本(其余数据可以为null)。一旦此过程完成,它将在JTextField上运行getText并将其存储在字符串中。
主类:
package catalogue;
addSupplier.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae) {
//Call a JOptionPane and give it an int value to be able to check status of button presses without another ActionListner
int result = JOptionPane.showConfirmDialog(null, addSupplierPanel, "Please enter supplier name", JOptionPane.OK_CANCEL_OPTION);
//Checks if OK button is pressed
if (result == JOptionPane.OK_OPTION){
//Check if user entered any text into suppNameIn (Cannot be null)
if(suppNameIn.getText().equals("")){
//Dispense error as suppNameIn is empty
System.out.println("Pressed Okay, nothing entered");
} else {
//Grab the text from the JTextField and convert it into a usable string
String suppNameInsert = suppNameIn.getText();
String suppCollectionInsert = suppCollectionIn.getText();
//Confirmation that data has been read in from JTextField correctly
System.out.println(suppNameInsert + " Successfully entered");
System.out.println(suppCollectionInsert + " Successfully entered");
try{
//Connect to DB
Connection conn = CatalogueDB.getConnection();
//Prepare statement to run the insert script using the strings as input variables
PreparedStatement posted = conn.prepareStatement("INSERT INTO supplier (suppName, suppCollection) VALUES ('"+suppNameInsert+"', '"+suppCollectionInsert+"')");
//Push the PreparedStatement 'posted'
posted.executeUpdate();
//Catch if anything goes wrong while connecting to the database
} catch(Exception e){System.out.println("Error adding supplier");}
//Finish by printing a message to say the insert has worked.
finally{
System.out.println("Insert Completed.");
}
}
}
}
});
}
单独的insertData类:
package catalogue;
import java.sql.Connection;
import java.sql.PreparedStatement;
public class insertData {
CatalogueUI.suppNameInsert;
public void insertSupplier() throws Exception{
try{
//Connect to DB
Connection conn = CatalogueDB.getConnection();
PreparedStatement posted = conn.prepareStatement("INSERT INTO supplier (suppName, suppCollection) VALUES ('"+suppNameInsert+"', '"+suppCollectionInsert+"')");
posted.executeUpdate();
} catch(Exception e){System.out.println("Error adding supplier");}
finally{
System.out.println("Insert Completed.");
}
}
}
我遇到的问题是我无法在主类之外访问String。我是否以错误的方式构建了我想要达到的目标,或者我遇到的问题比我想的要独立?
我无法在主类之外访问String
当然。类的工作独立于其他人。一个类不知道在其他任何类中正在使用什么变量。
如果要创建两个类,则需要将参数从一个类传递到另一个。调用方法并将参数传递给方法时,这没有什么不同。
我会说没有理由要开一个单独的课。 SQL访问只是您的主类中的一种方法。
PreparedStatement posted = conn.prepareStatement("INSERT INTO supplier (suppName, suppCollection) VALUES ('"+suppNameInsert+"', '"+suppCollectionInsert+"')");
此外,您正在错误地使用PreparedStatement
。使用PreparedStatement
的目的是将参数传递给PreparedStatement
。正确使用PreparedStatement
将使上面的代码更易于阅读和维护。
请参阅:Using Prepared Statements以获取更多信息。