现在要把bit类型怎样插入数据库statement.setXXX(参数位置,xxx);还有获取从数据库取出bit类型的数据getXXX

解决方案 »

  1.   

    select binary(a)
    from tb
      

  2.   

    标准的postgresql语句, bit类型都是通过字符串形式进行存取
    如 B'1010', 也可以用其他类型再进行个显示转换, 如: 
    44::bit(10), '01110'::bit(10)等但不知你的接口ODBC或ADO等有没有封装bit类型,假如没封装, 那就其他类型代替, 在写SQL语句时进行显示转换
      

  3.   

    在java中现在要把bit类型怎样插入数据库statement.setXXX(参数位置,xxx);还有获取从数据库取出bit类型的数据getXXX
      

  4.   

    help:
    位串类型
    [编辑]
    位串类型位串就是一串 1 和 0 的字串。它们可以用于存储和视觉化位掩码。我们有两种类型的 SQL 位类型:bit(n) 和 bit varying(n); 这里的 n是一个正整数。 bit类型的数据必须准确匹配长度n; 试图存储短些或者长一些的数据都是错误的。类型 bit varying 数据是最长 n 的变长类型; 更长的串会被拒绝。写一个没有长度的 bit 等效于 bit(1),没有长度的bit varying 意思是没有长度限制。 
    注意:如果我们明确地把一个位串值转换成 bit(n), 那么它的右边将被截断或者在右边补齐零,直到刚好 n 位, 而不会抛出任何错误。类似地,如果我们明确地把一个位串数值转换成 bit varying(n),如果它超过了n 位, 那么它的右边将被截断。 
    注意:在PostgreSQL7.2 之前,不管是否有明确的转换, bit 都会在右边自动截断或者在在右边填充零的。这个行为现在已经为了和SQL标准兼容修改过来了。 请参考 Section 4.1.2.3 获取有关位串常量的语法的信息。还有一些位逻辑操作符和位处理函数可用; 见Section 9.6。 
      例 8-3. 使用位串类型
      
      CREATE TABLE test (a bit(3), b bit varying(5));
      INSERT INTO test VALUES (B'101', B'00');
      INSERT INTO test VALUES (B'10', B'101');
      ERROR:  Bit string length 2 does not match type bit(3)
      INSERT INTO test VALUES (B'10'::bit(3), B'101');
      SELECT * FROM test;
        a  |  b
      -----+-----
       101 | 00
       100 | 101
      

  5.   

    is_pass 字段为 bitString sql="insert into t_sign_log(sign_user,tablename,sign_report_id,sign_date,is_pass,re) values(?,?,?,?,?,?)";
    statement=conn.prepareStatement(sql);
    statement.setString(1, username);
    statement.setString(2, tablename);
    statement.setLong(3, report_id);
    statement.setTimestamp(4, Timestamp.valueOf(datetime));
    //statement.setInt(5, ispass?1:0);
    statement.setBoolean(5, ispass);

    statement.setString(6, re);
    statement.execute();报错:
        org.postgresql.util.PSQLException: 错误: 字段 "is_pass" 的类型为 bit, 但表达式的类型为 boolean
      建议:你需要重写或转换表达式
      位置:104
      

  6.   

    insert into t_sign_log(sign_user,tablename,sign_report_id,sign_date,is_pass,re) values(?,?,?,?,?::BIT VARYING(8),?)";statement.setInt(5, ispass?1:0);//statement.setBoolean(5, ispass);
      

  7.   

    9楼,以前我用的就是statement.setInt(5, ispass?1:0);没有人遇到过吗?

    高手快来!!!
      

  8.   

    postgreSQL怎样操作bit类型问题
      

  9.   

    这个有式过吗?
    insert into t_sign_log(sign_user,tablename,sign_report_id,sign_date,is_pass,re) values(?,?,?,?,?::BIT VARYING(8),?)";bit类型的输入可用字符串或整型代替, 但在SQL语句一定要来个显示转换
    显示转换的格式为  XXX::类型 或 cast(xxx as 类型)
      

  10.   


    麻烦你把这个insert语句写详细一点!谢谢!
      

  11.   

    你的SQL语句是参数化语句, 有6个?, JDBC会解析的, 所以才要下面的6个setxxx不知jdbc解析得了这个语句的第5个?参数
    insert into t_sign_log(sign_user,tablename,sign_report_id,sign_date,is_pass,re) values(?,?,?,?,?::BIT VARYING(8),?);假如解析不了,换成
    insert into t_sign_log(sign_user,tablename,sign_report_id,sign_date,is_pass,re) values(?,?,?,?,cast(? as BIT VARYING(8)),?);如果还是解析不了, 第5个变量就不要参数化, 直接把值嵌入SQL语句
    String sql="insert into t_sign_log(sign_user,tablename,sign_report_id,sign_date,is_pass,re) values(?,?,?,?,"+
    ispass?"1":"0"+"::BIT VARYING(8),?)";
      

  12.   

    还是改变使用boolean类型
      

  13.   


    org.postgresql.util.PSQLException: 错误: 无法把类型 integer 转换为 bit varying