1. 程式人生 > >java 資料庫名、資料表名和欄位名大小寫問題

java 資料庫名、資料表名和欄位名大小寫問題

postgreSQL 中資料庫名、 資料表名和欄位名大小寫問題,這個問題很常見。

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'"); 

      執行時出現錯誤: 

  觀察一下這個錯誤是不是和上面的錯誤類似。具體怎樣修改,大家試試,加深一下印象,這裡我就不寫了。  

       總結一下:在以後用到 postgreSQL 時要注意軟體中和 SQL 語句中的 資料庫名、 資料表名和欄位名大小寫問題,當然用中文的話就沒有大小寫問題了。

       提供一個關於 在 postgreSQL 資料庫名、 資料表名和欄位名大小寫問題 的網址給大家看一下:

相關推薦

C# 如何獲取SQL Server 中指定資料的所有型別

如何獲取指定資料表的所有欄位名和欄位型別。SqlConnection.GetSchema方法有2個過載形式,獲取指定資料表的所有欄位名和欄位型別的祕密就在GetSchema (String, String[])的第二個引數中。 定義如下: public override DataTable GetS

mysql 獲得指定資料庫所有以及指定的所有

SELECT COLUMN_NAME 列名, DATA_TYPE 欄位型別, COLUMN_COMMENT 欄位註釋 FROM information_schema. COLUMNS WHERE

MyBatis的問題:There is no getter for property named '資料中的' in '實體類'!

在MyBaits中的配置檔案中:mybaits-config.xml中有這樣一句話:在程式碼中用紅色標註:<?xml version="1.0" encoding="UTF-8"?> <

java 資料庫資料大小寫問題

postgreSQL 中資料庫名、 資料表名和欄位名大小寫問題,這個問題很常見。 1 、資料庫名中的每個字母區分大小寫,這裡就要求 SQL 語句中的連線語句中的資料庫名中的每個字母和 postgreSQL 軟體的資料庫名 中的每個字母的 大小寫要嚴格一致。 2 、 下面是

vb獲取建立資料庫及包含

Option Explicit Dim isConnect As Boolean '判斷資料庫是否連線成功 Dim ConADODB As New ADODB.Connection '用於連線MASTER系統資料庫 Dim ResADODB As New ADODB.Rec

C#獲取MySQL資料庫中的所有的資料型別

   獲取表名         public bool GetTableName()         {             string sql = "show tables;";             MySqlCommand cmd = new MySqlCom

postgresql資料的獲取

pg庫表名獲取 select * from pg_tables where tablename=‘’ pg庫列名和型別註釋等獲取 –獲取欄位名、型別、註釋、是否為空: SELECT col_description(a.attrelid,a.attnum) as comment,a

java學習筆記】MyBatis中當實體類中的屬性中的不一樣時的解決方法

在使用MyBatis開發DAO層時,當實體類中的屬性名和表中的欄位名不一樣時,查詢出來的值為null,此時有3種解決方法 解決方法1                在Mapper.xml對映檔案中,寫SQL語句時起別名 解決

ORACLE——在所有中查詢某個字串並輸出

什麼都不想說,直接上乾貨 declare v_Sql varchar2(2000); v_count number; begin for xx in (select t.OWNER, t.TABLE_NAME, t.COLUMN_NAME from

SQLSERVER查詢所有資料庫,,

 1.獲取所有資料庫名: SELECT Name FROM Master..SysDatabases ORDER BY Name 2.獲取所有表名: SELECT Name FROM DatabaseName..SysObjects Where XType='U' O

navicat mysql查資料庫中表數量,數量(持續更新中)

1.查資料庫中表數量 (紅色標記的是常用到的重要的表結構資訊表) mysql> use information_schema;Database changedmysql> show tables;+-------------------------------

C#獲取SQLServer資料庫

SQLServer資料庫每個資料庫都有INFORMATION_SCHEMA檢視,資料庫的結構資訊Schema都在這裡儲存。 select TABLE_NAME,TABLE_TYPE,TABLE_CAT

Mysql資料庫亂碼問題(資料庫連結資料庫格式資料列的字符集都是UTF8,但還是會報錯的解決方法)

在做專案的時候遇到一個問題。插入資料的時候中文出現亂碼問題。檢視程式碼中與資料庫的連結,已經設定了UTF-8的編碼,檢視資料庫,資料庫格式也是UTF-8格式,檢視資料表的列,屬性也是UTF-8,檢視程式碼的編碼格式也是UTF-8,但是在插入資料的時候中文還是會出現亂碼問題。 最

MSSQL注入利用Group by&having猜

轉自靈魂BLOG!! lcx和劍心等大牛在06年的時候就已經在用這種語法了,而我等小輩到最近才領略到,慚愧慚愧...... 手頭暫時沒有注入點測試,就先以我機器上的MSSQL做實驗吧。 下面的語句我

Hibernate使用原生SQL多查詢時相同導致查詢資料覆蓋問題解決辦法

系統測試環境: MySQL 5.0 Hibernate 3.3 由於使用了hibernate,雖然使用原生SQL繞過了hibernate自己的封裝,但是還是有些影響,比如欄位別名問題;相同的欄位名經過hibernate查詢會出現前一列覆蓋後一列的情況,這時可以用 方法來

oracle 將變為大寫

begin for t in (select table_name tn from user_tables where table_name <> upper(table_name)) loop begin for c in (select column_

MySql 的一個關鍵字重

查詢:insert into t_employee(name,describe,create_time) values('13','13',now()) 錯誤程式碼: 1064 You have an error in your SQL syntax; check the manual that corres

PreparedStatement預編譯無法用?佔位符替換

PreparedStatement是Statement的改良版,具有預編譯功能,方便使用,執行速度快。 可以通過?佔位符把欄位值替換,之後通過setXXX方法,注入欄位值。 但是?佔位符只能替換欄位值

Mysql資料庫-----記錄管理

表記錄管理 1.插入記錄(insert)        1)insert into 表名 values(值1),(值2)...;        2)insert into 表名(欄位,欄位2) values(

mybatis學習總結---屬性不一致問題

1. 查詢時使用別名,別名和屬性名保持一致 <select id="getUser" parameterType="int" resultType="com.skd.mybits.domain.User"> select id_dif id, name_dif n