CREATE TABLE public.h_user ( id serial4 not null, username varchar(50) NULL, "password" varchar(64) NULL, nickname varchar(60) NULL, email varchar(255) NULL, gender bit(1) NULL, height float4 NULL, CONSTRAINT user_pkey PRIMARY KEY (id) ); 求指教怎么使用预处理PreparedStatement 设置bit(1)的值插入到库中。
package com.health.util; import java.sql.*; public class bitTest { public static void main(String[] args) { // 数据库连接信息 String url = "jdbc:postgresql://localhost:5432/postgres"; //加 tinyInt1isBit=false 参数也是报错 // String url = "jdbc:postgresql://localhost:5432/postgres?tinyInt1isBit=false"; String username = "postgres"; String password = "postgres"; // SQL语句 String sql = "insert into h_user (username, password, gender,height) values(?,?,?,?)"; try { // 加载并注册JDBC驱动 Class.forName("org.postgresql.Driver"); // 建立数据库连接 try (Connection conn = DriverManager.getConnection(url, username, password); // 创建PreparedStatement PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, "ztt"); pstmt.setString(2, "123456"); // 设置bit(1)值,这里下面设置的情况都报错 // pstmt.setObject(3, new Boolean(true)); // pstmt.setObject(3, true,Types.BIT); // pstmt.setObject(3,new Byte("1")); // pstmt.setObject(3, new Short("1"),Types.BIT); // pstmt.setObject(3,1); pstmt.setObject(3,1,Types.BIT); pstmt.setFloat(4, 170); // 执行SQL语句 pstmt.executeUpdate(); } } catch (Exception e) { e.printStackTrace(); } } } package com.health.util; import java.sql.*; public class bitTest { public static void main(String[] args) { // 数据库连接信息 String url = "jdbc:postgresql://localhost:5432/postgres"; String username = "postgres"; String password = "postgres"; // SQL语句 也可以把0::bit替换成cast(1 as bit(1))也可设置成功 String sql = "insert into h_user (username, password, gender,height) values('ztt1','123',0::bit,172)"; try { // 加载并注册JDBC驱动 Class.forName("org.postgresql.Driver"); try (Connection conn = DriverManager.getConnection(url, username, password); // 创建Statement Statement stat = conn.createStatement()) { // 执行SQL语句 int result = stat.executeUpdate(sql); } } catch (Exception e) { e.printStackTrace(); } } } //用PGobject解决 PGobject pGobject = new PGobject(); pGobject.setType("BIT"); pGobject.setValue("1"); pstmt.setObject(3,pGobject); 完整的代码为:
package com.health.util; import org.postgresql.util.PGobject; import java.sql.*; public class bitTest { public static void main(String[] args) { // 数据库连接信息 String url = "jdbc:postgresql://localhost:5432/postgres"; String username = "postgres"; String password = "postgres"; // SQL语句 String sql = "insert into h_user (username, password, gender,height) values(?,?,?,?)"; try { // 加载并注册JDBC驱动 Class.forName("org.postgresql.Driver"); // 建立数据库连接 try (Connection conn = DriverManager.getConnection(url, username, password); // 创建PreparedStatement PreparedStatement pstmt = conn.prepareStatement(sql)) { pstmt.setString(1, "ztt"); pstmt.setString(2, "123456"); //用PGobject解决 PGobject pGobject = new PGobject(); pGobject.setType("BIT"); pGobject.setValue("1"); pstmt.setObject(3,pGobject); pstmt.setFloat(4, 170); // 执行SQL语句 pstmt.executeUpdate(); } } catch (Exception e) { e.printStackTrace(); } } } 处理无法访问org.postgresql.util.PGobject:
我使用的是 Spring boot 2.1.5.RELEASE 我在我的pom .xml中有以下依赖项
org.postgresql postgresql runtime 因为您在运行时作用域中设置了JDBC驱动程序,此作用域指示编译时不需要依赖项,但执行时需要依赖项。它在运行时和测试类路径中,但不在编译类路径中。
它不在编译类路径中,导致在编译期间无法找到它的类。您应该将其更改为scope,这是默认范围,因此您可以简单地省略
org.postgresql postgresql