我试图将TextField值保存到数据库中,但得到了一个“java.lang.NullPointerException”。
我希望在调用“addClient()”方法时,将客户端的名字保存到数据库中。
有人能帮我把它修好吗?提前谢谢大家。
控制器类:
import java.net.URL;
import java.sql.SQLException;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.TextField;
import wakiliproject.Forms.AddNew.DB.NewClientDB;
public class NewClientController implements Initializable {
@FXML
public TextField firstName;
// Initializes the controller class.
@Override
public void initialize(URL url, ResourceBundle rb) {
// TODO
}
@FXML
public void addClient() throws SQLException {
new NewClientDB().main();
}
}
数据库类:
import Database.Plain.Skell.DBConnect;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import wakiliproject.Forms.AddNew.NewClientController;
public class NewClientDB extends NewClientController {
private String firstNames = new NewClientController().firstName.getText();
public void main() throws SQLException {
Connection conn = DBConnect.connect();
Statement stmt = null;
try {
//STEP 3: Open a connection
System.out.println("Connecting to a selected database...");
System.out.println("Connected database successfully...");
//STEP 4: Execute a query
System.out.println("Inserting records into the table...");
stmt = conn.createStatement();
String sql = "INSERT INTO KIWI "
+ "VALUES (102, " + (firstNames) + ")";
stmt.executeUpdate(sql);
System.out.println("Inserted records into the table...");
} catch (SQLException se) {
//Handle errors for JDBC
se.printStackTrace();
} catch (Exception e) {
//Handle errors for Class.forName
e.printStackTrace();
} finally {
//finally block used to close resources
try {
if (stmt != null) {
conn.close();
}
} catch (SQLException se) {
}// do nothing
try {
if (conn != null) {
conn.close();
}
} catch (SQLException se) {
se.printStackTrace();
}//end finally try
}//end try
System.out.println("Goodbye!");
}//end main
}
编辑:
我忘了提到这是在JavaFx中,而“TextField firstName”是从使用JavaFx SceneBuilder创建的FXML文件中调用的。我尝试在控制器中初始化它,但没有成功。有什么想法吗?我认为这些类型的对象不应该被初始化,至少JavaFx是这样。
错误:
Caused by: java.lang.NullPointerException
at wakiliproject.Forms.AddNew.DB.NewClientDB.<init>(NewClientDB.java:12)
at wakiliproject.Forms.AddNew.NewClientController.addClient(NewClientController.java:41)
... 40 more
我猜是这条线-
private String firstNames = new NewClientController().firstName.getText();
正在引发NullPointerException。您正在创建NewClientController的新实例,但从未初始化firstName实例变量。
在这一行中,firstName为空
private String firstNames = new NewClientController().firstName.getText();
必须在构造函数中或在声明时初始化变量
public TextField firstName=新建TextField();
问题内容: 我根据另一个问题编写了一个非常简单的代码,它是: 丢给我一个错误 java.lang.NullPointerException第5和17行 我不知道我在做什么错。 问题答案: 无法自动拆箱为原始值,当您尝试与进行比较时会发生这种情况。在 类型为,因此左侧操作数也必须为。您正在传入,这是一个对象,但可以自动拆箱到。 因此,这相当于 显然,如果是,则以上抛出。 为了避免自动拆箱的隐藏陷阱,
我有一个字符串值,格式为“星期二 4月30 00:00:00 UTC 1996”; .我希望将此值转换为“30-APR-96 05:30:00.000000000 AM”中的时间戳字段 我在这里尝试的是 我得到一个异常时间戳格式必须是yyyy-mm-dd hh:mm:ss[。ffffff] 在DB中,当我看到我的类型为Timestamp并且值存储在“30-APR-96 05:30:00.00000
问题内容: 我想一种添加到我当过用户更改的,它的值,应用程序在控制台上打印的东西。 我进行了搜索,发现以下非常相似的问题:JTextField的值更改侦听器 提到的问题的答案非常清楚和有效,但是不幸的是,它仅对(Not )有用,因为它说您应该像这样使用DocumentListener: 但是在JavaFX的TextField中,您无法执行此操作。所以?解决办法是什么? (使用代码进行描述可能会很好
我有一个方法,我有一个问题。下面的第二个方法promptForPinNumber()调用第一个方法canConvertToInteger(),然后根据布尔变量pinValid的值是true还是false执行操作。 当我单独执行方法canConvertToIntger()时,它运行良好,并且pinValid的值是正确的。 当我执行promptForPinNumber()并输入引发和异常的字符串时,p
我有一个格式为“2013-11-19 07:41:38.990000000”的字符串值。我希望将此值转换为oracle数据库中“19-nov-13 07.41.38.00000000000 am”格式的时间戳字段。 我已经尝试使用以下代码进行转换: 但是在插入时,它会生成以下错误:ORA-01843:不是一个有效的月份
由于某些原因,gridView中的值没有从包中保存。也没有向logcat输出任何内容。我是否正确地从gridview获取值?它充满了编辑文本,因此应该从中获取值 航海日志