我想在我的 sql 数据库中添加一个搜索,通过 id 获取名称的函数会产生错误
I want to add a search in my sql database, function to get the name by the id creates an error
我有一个音乐数据库,所以我需要一个搜索功能,现在进入搜索栏时,我收到错误消息:“JDBC 调用中的参数无效:参数索引超出范围:1 “
public static Song getSongByName(String name)
{
String sql =
"SELECT songID FROM Song "+
"WHERE name = '?'; ";
Connection conn = Connections.getConnection();
Song erg = null;
try
{
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1,name);
ResultSet rs = pstmt.executeQuery();
rs.next();
int id = rs.getInt (1);
name = rs.getString (2);
erg = new SongImpl(id,name);
rs.close();
pstmt.close();
}
catch(SQLException exc)
{
System.err.println("Fehler: in SQL-Aufruf");
System.err.println("["+sql+"]");
exc.printStackTrace();
System.exit(6);
}
Connections.putConnection(conn);
return erg;
}
查看示例https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
尝试删除单引号:
String sql =
"SELECT songID FROM Song "+
"WHERE name = ?; ";
您应该使用不带引号的字符串参数,因为您的语句被解释为 SQL 不带参数的查询。
您似乎只选择了一列而不是两列。
正确的 SQL 查询应该是:
SELECT songID, songName FROM Song WHERE name = '?';
试试这个:
public static Song getSongByName(String name)
{
String sql =
"SELECT songID, songName FROM Song "+
"WHERE name = ?";
Connection conn = Connections.getConnection();
Song erg = null;
try
{
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1,name);
ResultSet rs = pstmt.executeQuery();
rs.next();
int id = rs.getInt(1);
String name = rs.getString(2);
erg = new SongImpl(id, name);
rs.close();
pstmt.close();
}
catch(SQLException exc)
{
System.err.println("Fehler: in SQL-Aufruf");
System.err.println("["+sql+"]");
exc.printStackTrace();
System.exit(6);
}
Connections.putConnection(conn);
return erg;
}
如果有帮助请告诉我:)
我有一个音乐数据库,所以我需要一个搜索功能,现在进入搜索栏时,我收到错误消息:“JDBC 调用中的参数无效:参数索引超出范围:1 “
public static Song getSongByName(String name)
{
String sql =
"SELECT songID FROM Song "+
"WHERE name = '?'; ";
Connection conn = Connections.getConnection();
Song erg = null;
try
{
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1,name);
ResultSet rs = pstmt.executeQuery();
rs.next();
int id = rs.getInt (1);
name = rs.getString (2);
erg = new SongImpl(id,name);
rs.close();
pstmt.close();
}
catch(SQLException exc)
{
System.err.println("Fehler: in SQL-Aufruf");
System.err.println("["+sql+"]");
exc.printStackTrace();
System.exit(6);
}
Connections.putConnection(conn);
return erg;
}
查看示例https://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
尝试删除单引号:
String sql =
"SELECT songID FROM Song "+
"WHERE name = ?; ";
您应该使用不带引号的字符串参数,因为您的语句被解释为 SQL 不带参数的查询。
您似乎只选择了一列而不是两列。
正确的 SQL 查询应该是:
SELECT songID, songName FROM Song WHERE name = '?';
试试这个:
public static Song getSongByName(String name)
{
String sql =
"SELECT songID, songName FROM Song "+
"WHERE name = ?";
Connection conn = Connections.getConnection();
Song erg = null;
try
{
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1,name);
ResultSet rs = pstmt.executeQuery();
rs.next();
int id = rs.getInt(1);
String name = rs.getString(2);
erg = new SongImpl(id, name);
rs.close();
pstmt.close();
}
catch(SQLException exc)
{
System.err.println("Fehler: in SQL-Aufruf");
System.err.println("["+sql+"]");
exc.printStackTrace();
System.exit(6);
}
Connections.putConnection(conn);
return erg;
}
如果有帮助请告诉我:)