准备好的语句连接错误

时间:2012-12-30 20:10:12

标签: java jdbc prepared-statement

我正在尝试使用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();

3 个答案:

答案 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();

试一试。希望它能为你效劳。