Java 准备好的语句连接错误
我正在尝试使用一个准备好的语句来插入一条记录(到嵌入式java数据库中)。我希望在单击保存按钮(JButton)时输入信息。我是Java新手,从未尝试过使用预先准备好的语句 我无法让我的连接(con)知道它是连接。下面的代码用于我放置在action listener中的准备好的语句 请让我知道我做错了什么。非常感谢您抽出时间。我希望我的代码是正确的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
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带下划线,表示找不到变量我不确定如何添加第一个参数,因为它是自动生成的问题是关于连接的,但您对参数的观察和回答是正确的:)我不确定如何添加第一个参数,因为它是自动生成的问题是关于连接的,但您的有关参数的观察和回答是正确的:)