jdbc关于#sql#的问题,如何解决?

        Statement statement = connection.createStatement();
        //使用executeQuery会返回一个结果集
        ResultSet resultSet = statement.executeQuery(sql);
        /*+--------+-----+----+
        | name   | age | id |
        +--------+-----+----+
        | sea    |  12 |  1 |
        | 路易斯  |  18 |  2 |
        | louis  |  12 |  4 |
        | khan   |  18 |  5 |
        +--------+-----+----+
        4 rows in set (0.02 sec)*/
        //使用while循环取出数据
        while(resultSet.next()){//让光标向后移动,如果没有更多行,则返回false
            String name = resultSet.getString(1);//获取该行的第一列
            int age = resultSet.getInt(2);//获取第二列
            int id = resultSet.getInt(3);
            System.out.println(name + "\t" + age + "\t" + id);

出现错误:

img


请求帮助!!感谢

你的sql是怎么写的呢,确认你的resultSet返回的结果是按照你的列表一样的数据么

在发布问题的时候,建议说下问题背景,不然我们还得重新分析下你在实现啥需求,你的错误提示已经告诉你sea转换数字报错,前面的代码是否调用了什么函数?

已解决,在查询的时候,需要将查询列和查询的类型相匹配

img

都更换填字段名称试一下:

String sea=resultSet.getString("sea");
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/772789
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:JDBC查询数据库时出现 sql语句正确,但是查询英文可以,汉字不行的情况解决办法
  • 除此之外, 这篇博客: 使用jdbc拼接条件查询语句时如何防止sql注入中的 使用jdbc拼接条件查询语句时如何防止sql注入 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    • 最近公司的项目在上线时需要进行安全扫描,但是有几个项目中含有部分老代码,操作数据库时使用的是jdbc,并且竟然好多都是拼接的SQL语句,真是令人抓狂。
    • 在具体改造时,必须使用PreparedStatement来防止SQL注入,普通SQL语句比较容易改造,本重点探讨在拼接查询条件的时候如何方式SQL注入,具体思路请参考下面的示例代码。
  • 您还可以看一下 孔德孟老师的Java数据库编程JDBC入门实战案例课程中的 采用自带客户端创建表并进行SQL编程小节, 巩固相关知识点
  • 以下回答由chatgpt基于相关博客总结生成:

    由于参考资料中的代码和问题并无直接关系,结合问题描述,我认为问题出在了#sql#这个变量的使用上,它可能被误认为是SQL语句的一部分而导致错误。我的建议是先检查一下代码中的#sql#出现的位置,并根据需要将其转义。可能的代码如下所示:

    String sql = "SELECT * FROM table WHERE column LIKE '%" + escapedSQL + "%'";
    

    这里,escapedSQL是之前已经通过一些规则进行了转义的SQL语句,用%进行模糊匹配。

    对于转义SQL语句,可以使用Java提供的PreparedStatement来防止SQL注入攻击。这样,就可以让用户提供的信息不参与SQL编译过程,避免注入攻击的发生。

    下面是一个PreparedStatement的使用示例:

    try {
        String sql = "SELECT * FROM table WHERE column LIKE ?";
        PreparedStatement stmt = conn.prepareStatement(sql);
        stmt.setString(1, "%" + searchText + "%");
        ResultSet rs = stmt.executeQuery();
    } catch (SQLException ex) {
        // handle SQLException
    }
    

    这里使用PreparedStatement进行模糊匹配,一定程度上避免了SQL注入攻击的发生。在使用PreparedStatement时需要注意,只有占位符'?'才能进行参数绑定,如果有其他字符也需要进行合适的转义处理。

    除了PreparedStatement外,其他的一些安全编码的措施也可以帮助我们防止SQL注入攻击。例如,遵循最小特权原则,尽可能降低程序的权限,限制对数据库的访问。另外,可以使用安全的密码管理工具,加强密码的安全性,避免被猜解。

    总之,防止SQL注入攻击需要在开发时考虑清楚,使用防护措施,避免程序受到攻击。