1 、数据库名中的每个字母区分大小写,这里就要求 SQL 语句中的连接语句中的数据库名中的每个字母和 postgreSQL 软件的数据库名 中的每个字母的 大小写要严格一致。
2 、 下面是重点:
我在 postgreSQL 软件中新建一个数据表 Student(S 是大写的 ) ,然后我写了一个更新数据表 Student 的程序,这个更新语句如下(下面的更新语句中的 Student 中的 S 也是大写的):
PreparedStatement pp = conn.prepareStatement("UPDATE Student set name=' 王丽 ' where \"IdNumber\" ='456'");
pp.executeUpdate();
按理来说这没有错,但是在执行时却出现了以下错误:
Exception in thread "main" org.postgresql.util.PSQLException: 错误 : 关系 "student" 不存在
这是为什么呢?
我们细心的观察就可以看到在上面的错误中的 student 中的 S 是一个小写,这又是为什么呢?明明我们在更新语句中的 Student 中的 S 是大写,现在错误语句中的 student 中的 S 却是一个小写。
通过程序的验证和资料的查找发现:
在执行 SQL 语句时对于不加双引号的数据表名和字段名 SQL 语句会将它们中的大写字母的自动转换为小写字母。然后根据自动转换后数据表名到 postgreSQL 软件中去找对应的数据表,就像上面的 Student 能找到吗?答案是不能,所以报错了。那么现在的问题是怎样不让 SQL 语句把数据表名和字段名中的含有的大写字母自动转换为小写字母呢?答案是为那些含有大写字母的数据表名和字段名加上一个双引号。
把上面的更新语句修改后,如下:
PreparedStatement pp = conn.prepareStatement("UPDATE \"Student\" set name=' 王丽 ' where \"IdNumber\" ='456'");
pp.executeUpdate();
这次程序顺利通过,而且数据表也更新了。看看在这条更新语句中 Student 的变化,我们为 Student 加了个双引号 \" \" 变为 \"Student\" 。
对于字段名的大小写问题和数据表名的大小写问题是一样的:如果不加双引号 SQL 语句会将含有大写字母的字段名自动转换为小写,然后根据转换后的字段名查找相应字段。下面我们验证一下字段名:
同样我在 postgreSQL 中的数据库名为 Student ,数据表名也为 Student 的表中新建一个字段 IdNumber, 然后通过 IdNumber 这个字段去更新数据表:
更新语句:
PreparedStatement pp = conn.prepareStatement("UPDATE \"Student\" set name=' 王丽 ' where IdNumber ='456'");
运行时出现错误:
Exception in thread "main" org.postgresql.util.PSQLException: 错误 : 字段 "idnumber" 不存在
观察一下这个错误是不是和上面的错误类似。具体怎样修改,大家试试,加深一下印象,这里我就不写了。
总结一下:在以后用到 postgreSQL 时要注意软件中和 SQL 语句中的 数据库名、 数据表名和字段名大小写问题,当然用中文的话就没有大小写问题了。
提供一个关于 在 postgreSQL 数据库名、 数据表名和字段名大小写问题 的网址给大家看一下: