0

我正在尝试使用 Prepared Statement 插入记录(到嵌入式 Java 数据库中)。我希望在单击保存按钮 (JButton) 时输入信息。我是 Java 新手,从未尝试过使用准备好的语句。

我无法让我的连接 (con) 知道它是一个连接。以下代码用于我放置在动作侦听器中的准备好的语句。

请让我知道我做错了什么。非常感谢您的参与。我希望我正确地编写了代码。

String sql = "INSERT INTO Users (UserId, fName, lastName, userName, password) VALUES (?, ?, ?, ?, ?)";
PreparedStatement stmt = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

stmt.setString(2, "fName" );
stmt.setString(3, "lastName" );
stmt.setString(4, "userName" );
stmt.setString(5, "password" );
stmt.executeUpdate();
4

3 回答 3

4

这个片段:

Connection con = DriverManager.getConnection(host, uName, uPass);

将表明Connection con仅在本地定义。使其成为类成员变量并使用:

con = DriverManager.getConnection(host, uName, uPass);

您似乎没有在您的第一个参数中设置PreparedStatement

stmt.setString(1, UserId);

您还确定要为参数设置文字值吗?

更新:

由于第一个参数是自动生成的,您可能需要:

String sql = "INSERT INTO Users (fName, lastName, userName, password) VALUES (?, ?, ?, ?)";

PreparedStatement stmt = ...   
stmt.setString(1, fName);
stmt.setString(2, lastName);
stmt.setString(3, userName);
stmt.setString(4, password);
于 2012-12-30T20:12:04.400 回答
1

问题不在于准备好的语句。它比这更基本。

con.prepareStatement... con 带有下划线并表示它找不到变量

这意味着con不在范围内。我们不知道你实际上做了什么,但这里有一个例子:

if (foo) {
    Connection con = DriverManager.getConnection(host, uName, uPass);
}
String sql = "INSERT INTO Users (UserId, fName, lastName, userName, password) " +
             "VALUES (?, ?, ?, ?, ?)";

// Compilation error     vvv
PreparedStatement stmt = con.prepareStatement(sql, 
                                              Statement.RETURN_GENERATED_KEYS);

问题是它con是一个局部变量,它在声明它的块的末尾超出了范围。如果您尝试使用超出范围的变量,编译器会说它找不到它。本质上,它不知道您在说什么变量....

于 2012-12-30T21:32:25.300 回答
0

用于创建连接对象以连接数据库。像这样尝试...

Connection con = DriverManager.getConnection(DB_host, DB_UserName, DB_UserPassword);

它将为 Connection 类创建本地对象 con。

从您的陈述中,我了解到您正在使用UserId作为自动增量字段。您无需明确输入值。

因此,您将您的语句修改为

String sql = "INSERT INTO Users (fName, lastName, userName, password) VALUES (?, ?, ?, ?)";
PreparedStatement stmt = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
stmt.setString(1, "fName" );
stmt.setString(2, "lastName" );
stmt.setString(3, "userName" );
stmt.setString(4, "password" );
stmt.executeUpdate();

试试看。希望它对你有用。

于 2013-02-04T11:24:20.170 回答