问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

jdbc数据库连接问题,在数据库中查有结果,但是jdbc中就是null.

发布网友 发布时间:2022-04-10 11:26

我来回答

4个回答

懂视网 时间:2022-04-10 15:47

当数据库字段的值为NULL时,我们使用jdbc获取到的值为什么呢?对于varchar、char等类型当使用getString时,根据常识轻松地知道值应该是NULL。但是,对于intfloat等类型,当我们使用getIntgetFloat方法时应该返回的值也是NULL么。答案是否定的,我们根据这几个的方法的注释可以知道,当数据库字段的值为NULL,通过jdbc获取到的值为0
float java.sql.ResultSet.getFloat(String columnLabel) throws SQLException方法的注释如下。

Retrieves the value of the designated column in the current row of this ResultSet object as a float in the Java programming language.
Parameters:
 columnLabel the label for the column specified with the SQL AS clause. If the SQL AS clause was not specified, then the label is the name of the column
Returns:
 the column value; if the value is SQL NULL, the value returned is 0
Throws:
 SQLException - if the columnLabel is not valid; if a database access error occurs or this method is called on a closed result set

但是当某一些字段的类型为INTFLOAT时,比如表示价格的字段,我们想要用NULL值表示该字段未填写值,那该怎么办呢?这时我们可以使用getObject或者getString方法,当结果为null时表示未填写值,当结果不为null时再将其转换为相应的基本类型。
java中的类型和sql的类型的映射关系定义在JDBC规范中。接下来需要研究一下这个文档。

jdbc类型映射到java类型

JDBC Type Java Type
CHAR String
VARCHAR String
LONGVARCHAR String
NUMERIC java.math.BigDecimal
DECIMAL java.math.BigDecimal
BIT boolean
BOOLEAN boolean
TINYINT byte
SMALLINT short
INTEGER int
BIGINT long
REAL float
FLOAT double
DOUBLE double
BINARY byte[]
VARBINARY byte[]
LONGVARBINARY byte[]
DATE java.sql.Date
TIME java.sql.Time
TIMESTAMP java.sql.Timestamp
CLOB java.sql.Clob
BLOB java.sql.Blob
ARRAY java.sql.array
DISTINCT Mapping of underlying type
STRUCT java.sql.Struct
REF java.sql.Ref
DATALINK java.net.URL
JAVA_OBJECT Underlying Java class
ROWID java.sql.RowId
NCHAR String
NVARCHAR String
LONGNVARCHAR String
NCLOB java.sql.NClob
SQLXML java.sql.SQLXML

jdbc类型映射到java对象

JDBC Type Java Object Type
CHAR String
VARCHAR String
LONGVARCHAR String
NUMERIC java.math.BigDecimal
DECIMAL java.math.BigDecimal
BIT Boolean
BOOLEAN Boolean
TINYINT Integer
SMALLINT Integer
INTEGER Integer
BIGINT Long
REAL Float
FLOAT Double
DOUBLE Double
BINARY byte[]
VARBINARY byte[]
LONGVARBINARY byte[]
DATE java.sql.Date
TIME java.sql.Time
TIMESTAMP java.sql.Timestamp
DISTINCT Object type of underlying type
CLOB java.sql.Clob
BLOB java.sql.Blob
ARRAY java.sql.Array
STRUCT java.sql.Struct or java.sql.SQLData
REF java.sql.Ref
DATALINK java.net.URL
JAVA_OBJECT Underlying Java class
ROWID java.sql.RowId
NCHAR String
NVARCHAR String
LONGNVARCHAR String
NCLOB java.sql.NClob
SQLXML java.sql.SQLXML

测试

创建测试用表,环境是mysql。

create table test(id int,price float,name varchar(2000));

插入数据

insert into test(id,price,name) values(12,12.3456,‘阿里巴巴‘);
insert into test(id,price,name) values(1,312.3456,‘阿里巴巴‘);
insert into test(id,price,name) values(null,142.3456,‘阿里巴巴‘);
insert into test(id,price,name) values(3,null,‘阿里巴巴‘);

数据表

id price name
12 12.3456 阿里巴巴
1 312.346 阿里巴巴
NULL 142.346 阿里巴巴
3 NULL 阿里巴巴

java使用jdbc连接

Statement st = conn.createStatement();
String sql = "select * from test where id = 3";
java.sql.ResultSet rs = st.executeQuery(sql);
while (rs.next()) {
 String name = rs.getString("name");
 String idStr = rs.getString("id");
 Object idObj = rs.getObject("id");
 int id = rs.getInt("id");
 float price = rs.getFloat("price");
 System.out.println("---------------------------");
 System.out.println(idObj instanceof Integer);
 System.out.println("id = " + id);
 System.out.println("idStr = " + idStr);
 System.out.println("idObj = " + idObj);
}

结果

---------------------------
true
id = 3
idStr = 3
idObj = 3

参考

  • java.sql.ResultSet相应方法的注释
  • JSR 221 JDBC? 4.2 Specification下载地址
  • 数据库字段为null时jdbc获取的值

    标签:throws   integer   答案   des   header   binary   应该   nload   use   

    热心网友 时间:2022-04-10 12:55

    1、首先看看有没有报错
    2、是否能正常连接到数据库
    3、pstmt.executeQuery();这里面应该有你要查询的语句的,你没有啊。那不肯定是空的追问没报错,也可以正常连接到数据库,比如说那个select title from body where id=1执行之后会在result里面存入title=null这么一个元素,但是这个表里是有东西的,不是null啊。

    热心网友 时间:2022-04-10 14:13

    用的oracle数据库的话,在数据库中看看是不是提交了事务。

    热心网友 时间:2022-04-10 15:48

    你调式过,使用rs.next()么?如果第一次调用都返回false那么就真是获取不到东西了。
    声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
    360浏览器怎么设置倍速播放 ...先讲女主的灵魂飘荡了一段时间,然后重生,请问是那本? 拯救者散热器怎么开 电脑如何一键还原系统电脑一键还原怎么操作 神舟笔记本电脑怎么重新设置神舟战神bios恢复出厂设置 神舟电脑恢复出厂设置神舟战神怎么恢复原厂系统 水泥楼梯如何铺木楼梯 家里面楼梯是水泥的不想铺地毯或者地砖还能铺什么 楼梯的水泥台阶上可以铺地板革吗 手机腾讯会议共享屏幕播放视频没声 小莉帮忙团的祝捷个人资料 如何把邮箱和QQ号码解绑 喜欢像女孩子的女装大佬 这是哪个女装大佬。。。 抖音上有一个女装大佬,长得挺好看。好像是在太原。 有两个酒窝钉 求助找人 我感觉她们都像女装大佬? 明明是女生却长得像女装大佬,是什么体验? 15款美日牌帝豪CVT向上版仪表盘上有变速箱指示灯吗 新帝豪用的CVT变速箱怎么样 2016款新帝豪CVT变速箱怎么样? 为什么帝豪GS的cvt变速箱在长途跑上坡时加速无力 帝豪cvt是钢带还是链条- 问一问 帝豪cvt变速箱什么牌子?帝豪cvt变速箱和什么车上的变速箱一样啊? 帝豪CVT变速箱耐用吗?毛病多吗? 4代帝豪变速箱什么型号4代帝豪用的是什么牌子的变速箱? 第四代吉利帝豪变速箱是什么牌子 衣服时间长了长黄点了,用啥能洗掉 360n7怎么关闭今日头条极速版的推荐? 达瓦别作兆和吟舟兆有什么区别? 达瓦吟舟t怎么那么细 记者小莉帮忙手机号 哥特式建筑的代表做是什么? 小莉帮忙需要什么条件如何要农民工工资 河南电视台小莉帮忙新闻热线是多少? 河南电视台民生频道小莉帮忙怎么联系? 小莉帮忙律师团怎么样?民事纠纷调解效果如何? 哥特式建筑的代表作是什么?特点和成就又是什么 著名的哥特式建筑 找小莉帮忙需要多少钱 什么是【哥特式建筑】? 保险法有规定被保险人不可以变更吗? 河南小莉帮忙怎么联系呢 《战狼2》在央视六套重播多次收视率为何还那么高? 蒙牛纯牛奶是乳饮料吗?喝这个有什么好处?成年人喝有用吗? 珠联璧合、佳偶天成是什么意思 珠联璧合 什么意思 伊利学生奶是纯奶还是乳饮料 战狼2哪年上映的 战狼2什么时候在电影频道播放? 芋怎么读