我正在做一个程序,Libros
其中Autores
一个autor
有很多libros
.
插入新的时,Libro
我需要获取id
delautor
以将其保存fk_dni
在 table 中Libros
,所以我有以下代码加载我保存在我的数据库中combobox
的那些。Autores
public void insertarLibro()
{
String url = "jdbc:sqlserver://localhost:1433;databaseName=Biblioteca";
String user = "mi_usuario";
String password = "mi_contraseña";
String fk_dni = "SELECT dni FROM Autores WHERE nombre = '?'";
try
{
Connection cn = DriverManager.getConnection(url, user, password);
PreparedStatement ps = cn.prepareStatement(fk_dni);
ResultSet rs = ps.executeQuery();
String nombre = (String)cboAutor.getSelectedItem();
while(rs.next())
{
ps.setString(1, nombre);
}
System.out.println("DNI : " + rs.getString(1));
}
catch(SQLException e)
{
System.out.println("ERROR : ");
e.printStackTrace(System.out);
}
}
但是我的程序返回以下错误
com.microsoft.sqlserver.jdbc.SQLServerException:结果集没有当前行
所以我推断我的程序没有进入我的循环while
。如果我删除查询中的单引号,fk_dni
它抛出的错误是:
未为参数编号 1 设置该值。
这System.out.println("DNI : " + rs.getString(1));
是临时的,因为我只使用它来验证数据是否正确显示。
正如@A.Cedano 已经说过的那样,查询的问号周围没有单引号:
此外,您必须将值传递给查询,然后执行它
代码中有一些错误:
拼写错误的准备查询。要在准备好的语句中传递的参数(由 表示)
?
不应像现在这样用单引号括起来。应该:您不能
executeQuery
在设置参数之前执行以下操作nombre
:注意:仅按名称搜索 DNI 可能会给您错误的数据,可能是来自埃及的José与来自拿撒勒的José不同。