java - 如何在jdbc中按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;
}
这样做我的代码检查:
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()));
但我收到以下错误:
错误:语法错误(近似位置:“:”)位置:69 at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java :1836) 在 org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257) 在 org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512) 在 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) 空
我的错误是什么?
解决方案
JDBC 不知道命名参数。替换:id
为?
。你也永远不会绑定参数
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();
您的代码中还有另一个错误:
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();
一定是
Item item = new Item();
item.setId(1, rs.getString(1));
item.setKey(2, rs.getString(2));
return item;
推荐阅读
- javascript - JS React 导入差异包大小
- javascript - Sensortower daterangepicker 设置期间的最小值最大值
- c++ - 在 C++20 中还需要 std::ssize() 吗?
- xml - 是否有一个 basex 函数可以随机擦除 XML 文件的某些部分?
- javascript - 从外部 api 迭代对象
- java - 动态代码评估:SerializationUtils.clone() 上的不安全反序列化
- javascript - 声波动画页面加载器
- android - Exoplayer HLS 无限缓冲
- ssl - Artifactory jfrog cli:x509:由未知权威签署的证书
- python-3.x - 在类别级别绘制时间序列