求教Postgresql在jdbc处理bit(1)字段的预处理解决方案
创始人
2025-02-11 05:04:35
0

文章目录

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

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

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

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

     org.postgresql     postgresql     runtime  

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

     org.postgresql     postgresql  

相关内容

热门资讯

透视脚本!aapoker怎么提... 透视脚本!aapoker怎么提高中牌率,aapoker辅助软件合法吗,技巧教程(有挂黑科技);小薇(...
透视规律!aapoker透视插... 透视规律!aapoker透视插件,aapoker辅助软件合法吗,微扑克教程(有挂插件)1、玩家可以在...
透视ai代打!aapoker透... 透视ai代打!aapoker透视插件,aapoker真的假的,揭秘教程(有挂规律)小薇(透视辅助)致...
透视科技!aapoker俱乐部... 透视科技!aapoker俱乐部靠谱吗,aapoker发牌逻辑,科技教程(有挂教程)1、实时aapok...
透视最新!aapoker怎么开... 透视最新!aapoker怎么开辅助器,aapoker能控制牌吗,AA德州教程(有挂攻略)1、不需要A...
透视工具!aapoker怎么选... 透视工具!aapoker怎么选牌,aapoker万能辅助器,教你教程(有挂教程)aapoker万能辅...
透视规律!aapoker插件,... 透视规律!aapoker插件,aapoker辅助插件工具,科技教程(有挂方法)1、上手简单,内置详细...
透视神器!aapoker辅助器... 透视神器!aapoker辅助器怎么用,aapoker怎么提高中牌率,教你攻略(有挂辅助)1、打开软件...
透视黑科技!aapoker能控... 透视黑科技!aapoker能控制牌吗,aa poker透视软件,黑科技教程(有挂揭秘)1、每一步都需...
透视ai!aapoker辅助器... 透视ai!aapoker辅助器是真的吗,aapoker真的假的,力荐教程(有挂教程)1、不需要AI权...