Java 准备好的语句连接错误

Java 准备好的语句连接错误,java,jdbc,prepared-statement,Java,Jdbc,Prepared Statement,我正在尝试使用一个准备好的语句来插入一条记录(到嵌入式java数据库中)。我希望在单击保存按钮(JButton)时输入信息。我是Java新手,从未尝试过使用预先准备好的语句 我无法让我的连接(con)知道它是连接。下面的代码用于我放置在action listener中的准备好的语句 请让我知道我做错了什么。非常感谢您抽出时间。我希望我的代码是正确的 String sql = "INSERT INTO Users (UserId, fName, lastName, userName, passwo

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

我无法让我的连接(con)知道它是连接。下面的代码用于我放置在action listener中的准备好的语句

请让我知道我做错了什么。非常感谢您抽出时间。我希望我的代码是正确的

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();
这个片段:

Connection con = DriverManager.getConnection(host, uName, uPass);
表示连接仅在本地定义。将其设为类成员变量并使用:

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);
这个片段:

Connection con = DriverManager.getConnection(host, uName, uPass);
表示连接仅在本地定义。将其设为类成员变量并使用:

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);

问题不在于事先准备好的声明。它比这更基本


准备陈述。。。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
是一个局部变量,它在声明它的块的末尾超出了范围。如果您试图使用超出范围的变量,编译器会说找不到它。本质上,它不知道您在谈论什么变量……

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


准备陈述。。。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
是一个局部变量,它在声明它的块的末尾超出了范围。如果您试图使用超出范围的变量,编译器会说找不到它。基本上,它不知道您所说的是什么变量….

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

Connection con = DriverManager.getConnection(DB_host, DB_UserName, DB_UserPassword);
它将为连接类创建本地对象con

根据您的陈述,我知道您正在使用用户ID作为自动增量字段。您无需显式输入值

所以您将您的语句修改为

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

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

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

Connection con = DriverManager.getConnection(DB_host, DB_UserName, DB_UserPassword);
它将为连接类创建本地对象con

根据您的陈述,我知道您正在使用用户ID作为自动增量字段。您无需显式输入值

所以您将您的语句修改为

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

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

您如何创建“con”?Connection con=DriverManager.getConnection(主机、uName、uPass);host、uName和uPass都是变量,它们也是givin。那么实际的问题是什么?有错误吗?准备陈述。。。con带下划线,表示找不到变量如何创建“con”?Connection con=DriverManager.getConnection(host、uName、uPass);host、uName和uPass都是变量,它们也是givin。那么实际的问题是什么?有错误吗?准备陈述。。。con带下划线,表示找不到变量我不确定如何添加第一个参数,因为它是自动生成的问题是关于连接的,但您对参数的观察和回答是正确的:)我不确定如何添加第一个参数,因为它是自动生成的问题是关于连接的,但您的有关参数的观察和回答是正确的:)