求教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  

相关内容

热门资讯

微乐小程序真的有挂!微乐山西小... 微乐小程序真的有挂!微乐山西小程序破解器(开挂)攻略-原来科普是真的挂该软件可以轻松地帮助玩家将外卦...
透视教你!微乐小程序黑科技(外... 透视教你!微乐小程序黑科技(外挂),微乐南昌辅助神器,教程总结(真实有挂)-哔哩哔哩1、超多福利:超...
事发当天!微乐小程序黑科技,微... 事发当天!微乐小程序黑科技,微乐自建房脚本免费入口(作弊器)积累教程(总是真的是有挂)一、游戏安装教...
微信小程序黑科技免费!微信小程... 微信小程序黑科技免费!微信小程序游戏破解器(开挂)教程-切实科普真的有挂微信小程序黑科技免费!微信小...
值得注意的是!微乐小程序免费黑... 值得注意的是!微乐小程序免费黑科技,微乐家乡app下载(作弊器)操作教程(真是有挂)1)有没有挂:进...
透视辅助!微乐小程序黑科技(外... 透视辅助!微乐小程序黑科技(外挂),微乐云南小程序辅助器,教程方针(有挂透明挂)-哔哩哔哩1、不需要...
微乐小程序透视挂!微信小程序游... 微乐小程序透视挂!微信小程序游戏辅助器(开挂)挂-一直揭露真的是有挂1)免费钻石:进一步探索免费脚本...
微乐小程序真的有挂!微乐小程序... 微乐小程序真的有挂!微乐小程序免费脚本(开挂)教程-真是曝光是有挂1、在插件功能辅助器技巧中,中转单...
微乐小程序黑科技!微乐自建房免... 微乐小程序黑科技!微乐自建房免费黑科技下载苹果(开挂)插件-总是了解存在有挂1、公共底牌简单,透视插...
微乐小程序黑科技免费!微信小程... 微乐小程序黑科技免费!微信小程序有挂吗辅助(开挂)神器-真是详细真的是有挂1、模拟器是什么优化,俱乐...