有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java我想在我的sql数据库中添加一个搜索,通过id获取名称的函数会创建一个错误

我有一个音乐数据库,所以我需要一个搜索功能,现在当进入搜索栏时,我得到一个错误:“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;
    }

共 (2) 个答案

  1. # 1 楼答案

    看起来你只选择了一列而不是两列

    正确的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;
    }
    

    如果有帮助,请告诉我:)