欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 求教Postgresql在jdbc处理bit(1)字段的预处理解决方案

求教Postgresql在jdbc处理bit(1)字段的预处理解决方案

2025/6/27 23:48:31 来源:https://blog.csdn.net/weixin_44231698/article/details/140682745  浏览:    关键词:求教Postgresql在jdbc处理bit(1)字段的预处理解决方案

文章目录

  • 1.建表语句:
  • 2.使用以下方式的预处理方式都报错了
  • 3.可以先用sql拼接实现功能
  • 4.预处理方式解决设置bit(1)字段的值
    • 4.1找不到org.postgresql.util.PGobject的类文件


1.建表语句:

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)
);

2.使用以下方式的预处理方式都报错了

求指教怎么使用预处理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);// 创建PreparedStatementPreparedStatement 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();}}
}

3.可以先用sql拼接实现功能

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);// 创建StatementStatement stat = conn.createStatement()) {// 执行SQL语句int result = stat.executeUpdate(sql);}} catch (Exception e) {e.printStackTrace();}}
}

4.预处理方式解决设置bit(1)字段的值

//用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);// 创建PreparedStatementPreparedStatement 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();}}
}

4.1找不到org.postgresql.util.PGobject的类文件

处理无法访问org.postgresql.util.PGobject:
我使用的是 Spring boot 2.1.5.RELEASE 我在我的pom .xml中有以下依赖项

<dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><scope>runtime</scope>
</dependency>

因为您在运行时作用域中设置了JDBC驱动程序,此作用域指示编译时不需要依赖项,但执行时需要依赖项。它在运行时和测试类路径中,但不在编译类路径中。
它不在编译类路径中,导致在编译期间无法找到它的类。您应该将其更改为scope,这是默认范围,因此您可以简单地省略

<dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId>
</dependency>

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词