我想在我的 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;
}

如果有帮助请告诉我:)