2016-10-15 35 views
0

我有一個簡單的項目,在用戶註冊結束時,它通過mySql數據庫中該用戶的名稱創建特定的表。在mysql中使用java創建表

連接到DB後。對於ExecutingUpdate功能:

public String UpdateDBQuery(String query) throws IOException{ 
    try { 
     int ursa = st.executeUpdate(query); 
     if (ursa == 0) { 
      throw new SQLException("Creating user failed, no rows affected."); 
     } else { 
      return "succeed"; 
     } 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

調用函數:

String DBOutput = connect.UpdateDBQuery("CREATE TABLE '"+UserName+"' (ID INT(20) AUTO_INCREMENT PRIMARY KEY, PROFILEIMAGES VARCHAR(100), REG_DATE timestamp)"); 

但我上面的代碼通過一個異常說:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''jasdfhkjhasdkfj' (ID INT(20) AUTO_INCREMENT PRIMARY KEY, PROFILEIMAGES VARCHAR(' at line 1 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
at com.mysql.jdbc.Util.handleNewInstance(Util.java:404) 
at com.mysql.jdbc.Util.getInstance(Util.java:387) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:942) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3966) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3902) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2526) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2673) 

雖然我尋遍網絡,但無法發現問題。

所有答覆都非常感激:)

+1

這些類型的查詢更傾向於Sql注入,在這種情況下,您的字符串'UserName'的值是''jasdfhkjhasdkfj' – Noushad

+0

您可以在控制檯上成功執行查詢嗎? –

+0

非常感謝您通知我有關此漏洞的信息我可能會以某個名稱保存用戶名,但您能否告訴我顯示該異常的問題是什麼? – jack

回答

0

我認爲你需要看看MYSQL和數據庫一般。您正試圖爲單個用戶創建一個表。

我建議你事先查看數據庫和sql的一些教程。您希望有一個用戶表,您可以爲每個用戶添加行,而不是爲每個用戶創建一個新表。

+0

感謝您提出這一點,在我的項目中看到用戶可以上傳他們的文件,我所做的就是保存這些文件並將文件的位置保存在我的數據庫中,請參閱我認爲我可能無法創建1000個文件1000列可以嗎? – jack

+0

而且我可能無法在單個表中創建10000列,因此認爲爲每個用戶創建特定表可能更好 – jack

+0

如果要將某些數據關聯到用戶,實際上將用戶主鍵用作另一個表中的外鍵(您要將文件存儲在該表中)。 –