简体   繁体   English

如何在 jdbc 中按 id 搜索

[英]how to search by id in jdbc

I use in my code jdbc wrote the following code to search id:我在我的代码中使用 jdbc 编写了以下代码来搜索 id:

public Item findById(String id) {
        Item result = null;

        String s = "SELECT id, key, name, creat, description FROM trackersql WHERE id = :id";

        try (Connection connection = init()) {
            PreparedStatement statement = connection.prepareStatement(s);

            ResultSet resultSet = statement.executeQuery();

            while(resultSet.next()) {
                Item item = new Item();

                statement.setString(1, id);
                statement.setString(2, item.getKey());
                statement.setString(3, item.getName());
                statement.setLong(4, item.getCreat());
                statement.setString(5, item.getDescription());
                statement.executeUpdate();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return result;
    }

doing my code check this way:这样做我的代码检查:

try {
            DriverManager.registerDriver(new org.postgresql.Driver());
        } catch (SQLException e) {
            e.printStackTrace();
        }
        TrackerSQL trackerSQL = new TrackerSQL();
        Item item1 = new Item("1", "1", "test1", 1, "test1");

        trackerSQL.init();

        System.out.println(trackerSQL.findById(item1.getId()));

but I get the following error:但我收到以下错误:

ERROR: syntax error (approximate position: ":") Position: 69 at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:273) at ru.job4j.trackersql2 ERROR: syntax error (approximate position: ":") Position: 69 at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java :1836) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags( AbstractJdbc2Statement.java:388) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:273) at ru.job4j.trackersql2 .TrackerSQL.findById(TrackerSQL.java:104) at ru.job4j.trackersql2.TrackerSQL.main(TrackerSQL.java:188) null .TrackerSQL.findById(TrackerSQL.java:104) 在 ru.job4j.trackersql2.TrackerSQL.main(TrackerSQL.java:188) Z20B9Z5766489C0DDAE

what is my mistake?我的错误是什么?

JDBC does not know named parameter. JDBC 不知道命名参数。 repalce :id with ?替换:id? . . Also you never bind the parameter你也永远不会绑定参数

String s = "SELECT id, key, name, creat, description FROM trackersql WHERE id = ?";
try (Connection connection = init()) {
    PreparedStatement statement = connection.prepareStatement(s);
    statement.setString(1,id)
    ResultSet resultSet = statement.executeQuery();

There is an other erro in your code:您的代码中还有另一个错误:

            statement.setString(1, id);
            statement.setString(2, item.getKey());
            statement.setString(3, item.getName());
            statement.setLong(4, item.getCreat());
            statement.setString(5, item.getDescription());
            statement.executeUpdate();

must be一定是

          Item item = new Item();

            item.setId(1, rs.getString(1));
            item.setKey(2, rs.getString(2));
          return item;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM