【问题标题】:How to pass a variable's value in where clause in java? [duplicate]如何在java中的where子句中传递变量的值? [复制]
【发布时间】:2019-01-23 14:31:57
【问题描述】:

我正在尝试执行一个包含 where 条件的 sql 查询。但是每当我执行查询时,它都会给我java.lang.NullPointerException。请帮帮我!

我正在使用 mssql 和 java

dbURL = "jdbc:sqlserver://ip:portnumber;databaseName=abc";
        username = "abc";
        password = "abc";

        //Load MS SQL JDBC Driver
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        con = DriverManager.getConnection(dbURL,username,password);

        //Creating statement object
        st = con.createStatement();
        selectquery = "select * from abc where TradeType = '"+tradepair+"'";
        rs = st.executeQuery(selectquery);

        while (rs.next()) {

            getpair = rs.getString("TradeType");
            dbTradePair.add(getpair);

        }
        System.out.println("Pairs :-"+dbTradePair);

当“selectquery”被执行时,我得到“java.lang.NullPointerException”。 我希望我以正确的格式执行 sql 查询。有人可以帮我吗?

【问题讨论】:

  • 你必须使用 PreparedStatement。
  • 使用PreparedStatement而不是通过连接部分SQL和查询值来创建语句。
  • 你能分享一下抛出那个异常的那一行吗?我可以看到下面的行可以抛出: st = con.createStatement(); // 如果 con 为 null getpair = rs.getString("TradeType"); // 如果没有 TradeType 列 dbTradePair.add(getpair); // 如果 dbTradePair 为空

标签: java sql sql-server jdbc


【解决方案1】:

像这样(已编辑 - 之后正确关闭资源):

//Load MS SQL JDBC Driver
    try {

        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

    } catch (ClassNotFoundException e) {

        System.out.println(e.getMessage());

    }

    final String dbURL = "jdbc:sqlserver://ip:portnumber;databaseName=abc";
    final String username = "abc";
    final String password = "abc";

    Connection  con = null;
    PreparedStatement preparedStatement = null;
    final String selectquery = "select * from abc where TradeType = ?";
    try {
        con = DriverManager.getConnection(dbURL,username,password);
        preparedStatement = con.prepareStatement(selectquery);
        preparedStatement.setString(1, tradepair);

        // execute select SQL stetement
        ResultSet rs = preparedStatement.executeQuery();

        while (rs.next()) {

            String tradeType = rs.getString("TradeType");

            System.out.println("tradeType : " + tradeType);
        }

    } catch (SQLException e) {

        System.out.println(e.getMessage());

    } finally {

        if (preparedStatement != null) {
            preparedStatement.close();
        }

        if (con != null) {
            con.close();
        }

    }

【讨论】:

  • 我建议使用 try-with-resources,而不是在 finally 块中使用繁琐(且容易出错)的 null 检查 + close。
  • 同意 - 提供 java-7 或更高版本。
  • 当然可以,但是如果人们仍然停留在 Java 6 上,他们可能会考虑搬家……Java 6 于 13 年前发布,自 2013 年起就不再受到公众支持,并且不再扩展自去年 12 月以来的(付费)支持。
  • @user1653941 感谢您的解决方案。这对我来说很神奇!
  • 如果有帮助,很高兴接受这个答案。
猜你喜欢
  • 1970-01-01
  • 2023-04-11
  • 2018-06-22
  • 2022-06-29
  • 1970-01-01
  • 1970-01-01
  • 2020-01-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多