2010-06-09 64 views
0

我想創建一個表,並且此表的名稱將從文本字段插入。但是,當我運行查詢時,它給了我一個錯誤,對此有幫助嗎?我會在這裏粘貼代碼:嘗試從Java創建sql表的語法錯誤

public boolean CreateTable() { 
    TableNumber = jTextField4.getText(); 

    try {    
    String password = null; 
    String s = "CREATE TABLE '"+TableNumber+ "' (Item char(50),Price char(50))"; 

    ConnectionForOrders(); 
    stmt = conn.createStatement(); 
    stmt.executeUpdate(s); 

    boolean f = false; 
    ConnectionForOrdersclose(); 
+7

什麼是錯誤? – Flynn1179 2010-06-09 21:30:49

+1

請修復您的代碼格式。另外,請提供更多關於您遇到的錯誤的詳細信息。 – VeeArr 2010-06-09 21:31:47

+5

只有你可以防止SQL注入!直接從文本字段獲取變量時要小心 – colinmarc 2010-06-09 21:34:05

回答

1

TableNumber那麼......一個數字?如果是這樣,可能會導致語法錯誤。

1

看起來像撇號和引號是倒過來的TableNumber(右側),這會產生編譯器錯誤。

3

我會先假設你的'" gaff是一個拼寫錯誤,因爲它甚至不應該以這種方式進行編譯(我編輯了問題以解決它後面的問題)。

除此之外,您不用單引號括起表名。這不是:

CREATE TABLE '表名'(......)

你只寫:

CREATE TABLE表名(...)

但你甚至不應該那麼做,因爲你從文本字段獲取表名。什麼是防止有人在文本字段中輸入這樣的:

A(B INT); DROP TABLE用戶; -

(假設,當然,你有一個用戶表某處) 。請務必記住,攻擊者可以在第一個;之後輸入任意任意sql,並且數據庫將盲目運行它。