有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用空字符串代替空字符串是一种好的做法吗?

例如在数据库中考虑:

CREATE TABLE users (
  id INTEGER IDENTITY PRIMARY KEY,
  last_name VARCHAR (50) DEFAULT '' NOT NULL,
  first_name VARCHAR (50) DEFAULT '' NOT NULL,
  email VARCHAR(50) DEFAULT '' NOT NULL)

并考虑使用Hibernate作为ORM与数据库交互的程序。p>

我认为这意味着:

  • 避免NullPointerException
  • 避免检查空值的需要

这是好的做法吗?请举例说明利弊


共 (5) 个答案

  1. # 1 楼答案

    以我的经验,这不是一个好的做法。在需要的地方分配空值

  2. # 2 楼答案

    这取决于您的用例null is a special value and has a special semantic。您可以将all默认为空字符串,但姓氏为空字符串或null(姓氏未知或不适用)可能会非常不同(我知道,这是个糟糕的例子)

  3. # 3 楼答案

    好吧,缺点是你无法区分“我没有为这个字段输入任何内容”和空字符串。如果您不必担心空字符串,那就太好了。除非你的司机介绍他们。(我认为一些旧版本只是将空字符串转换为java null。)

  4. # 4 楼答案

    正如Petermm所写,“Null”有一个特殊的含义,通常由数据库引擎中的特殊运算符支持

    “良好实践”是一个短语,它的意思是你想表达的任何意思,但要稍微解开论点:

    • 可维护性:坏主意。大多数开发人员已经习惯了在数据库系统中实现NULL的方式,并且需要在设计中接受特殊培训

    • 容错:坏主意。如果一列不允许为null,这通常意味着应用程序设计中的某些内容。如果用户记录必须具有有效的电子邮件地址,则您现在无法再在数据库级别验证该地址-因此您的数据库可能会逐渐充满虚假数据,并且只有在尝试向“”发送电子邮件时才能发现。“空指针”异常是特性,不是bug

    • 性能:根据http://www.sql-server-performance.com/2007/datatypes/,NULL速度较慢

  5. # 5 楼答案

    引用Django ORM docs

    Avoid using null on string-based fields such as CharField and TextField because empty string values will always be stored as empty strings, not as NULL. If a string-based field has null=True, that means it has two possible values for “no data”: NULL, and the empty string. In most cases, it’s redundant to have two possible values for “no data;” the Django convention is to use the empty string, not NULL.

    因此,是的,最广泛使用的pythonweb框架考虑了您提出的最佳实践设计,并默认提供了这种行为。Java现在也在使用Java8{}来摆脱{},也许是时候从这个角度重新考虑我们的DB设计了