我正在尝试使用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();
答案 0 :(得分: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);
答案 1 :(得分: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
是一个局部变量,它在声明它的块的末尾超出了范围。如果您尝试使用超出范围的变量,编译器会说它无法找到它。从本质上讲,它不知道你在谈论什么变量......
答案 2 :(得分:0)
创建连接对象以连接数据库。尝试这样......
Connection con = DriverManager.getConnection(DB_host, DB_UserName, DB_UserPassword);
它将为Connection类创建本地对象con。
根据您的判断,我了解您使用 UserId 作为自动增量字段。你不需要明确输入值。
所以你将ur语句修改为
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();
试一试。希望它能为你效劳。