2014-05-11 71 views
-1

我一直在使用MySQL一段時間,並且出於某種奇怪的原因,無論是在我的代碼中是否有一些我沒有看到的NPE,或者只是我忘了,我得到的錯誤是我之前沒有的MySQL在創建表時引發異常,但僅在Java中引發異常?

static MySQL sql = Essentials.getinstance().sql; 
    public static String TABLE_MAIN = "`PlayerStats`"; 
    public static String TABLE_GROUP = "`Groups`"; 
    public static String TABLE_BUILDNG = "`Build`"; 
    public static String TABLE_ARCHERY = "`Archer`"; 
    public static String TABLE_DIGGING = "`Dig`"; 
    public static String TABLE_MINING = "`Mine`"; 
    public static String TABLE_FARMING = "`Farm`"; 
    public static String TABLE_WOODCUTTIN = "`Wood`"; 
    public static String TABLE_FIGHTING = "`Combat`"; 
    public static String KEY = "`Player`"; 
    public static String LEVEL = "`Level`"; 
    public static String XP = "`XP`"; 
    public static String[] tables = new String[] { TABLE_MAIN, TABLE_ARCHERY, TABLE_BUILDNG, TABLE_DIGGING, TABLE_FARMING, TABLE_FIGHTING, TABLE_MINING, TABLE_WOODCUTTIN }; 

public PlayerStats() { 
this.start(); 
this.setName("RPG-Setup"); 
} 

@Override 
public void run() { 
for(String table : tables){ 
    sql.updateSQL("CREATE TABLE IF NOT EXISTS " + table + "(" + KEY + " varchar(128), " + LEVEL + " bigint, " + XP + " bigint, PRIMARY KEY(" + KEY + "))"); 
} 
sql.updateSQL("CREATE TABLE IF NOT EXISTS `Groups` (`Player` varchar(128), `Group` varchar(64), PRIMARY KEY(`Player`))"); 
} 

整個類是更長的時間,但是這是什麼引發錯誤:

sql.updateSQL("CREATE TABLE IF NOT EXISTS `Groups` (`Player` varchar(128), `Group` varchar(64), PRIMARY KEY(`Player`))"); 

什麼是沒有意義就是爲什麼。它不是拋NPE,而是拋出:

 
[19:55:42 WARN]: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You 
have an error in your SQL syntax; check the manual that corresponds to your MySQ 
L server version for the right syntax to use near '' at line 1 

任何想法?

+1

對這個問題沒有任何評論,但是命名一個「Group」列是一個糟糕的壞主意。這是所有數據庫中的保留字。使用你的想象力,並提出一個更好的名字。 –

+0

這不是「壞,壞,壞主意」。這只是「壞主意」。你需要明白你在做什麼,因爲你可以有名爲'group'的列沒有很多問題。 –

回答

0

這是因爲您使用Group作爲列名,這是一個保留關鍵字。

+0

我把它放到MySQL編輯器中,它沒有問題。如果記憶爲我服務,只要你用「''」表示一個值,你應該沒問題。無論如何,我會進行測試。 – calebbfmv

+0

對不起,我錯過了這個部分,不知怎的,你實際上在''中引用了它們。 – PDani

+0

它似乎已修復創建表,奇怪..... – calebbfmv

0

這裏的SQL語法似乎都是正確的。但是在你的代碼中聲明表的字符串可能是一個問題不確定。

代替下面的代碼

字符串[]表=新的String [] {TABLE_MAIN,TABLE_ARCHERY,TABLE_BUILDNG,TABLE_DIGGING,TABLE_FARMING,TABLE_FIGHTING,TABLE_MINING,TABLE_WOODCUTTIN};

可以嘗試這..

字符串[]表= {TABLE_MAIN,TABLE_ARCHERY,TABLE_BUILDNG,TABLE_DIGGING,TABLE_FARMING,TABLE_FIGHTING,TABLE_MINING,TABLE_WOODCUTTIN};

或使用List來定義表格。它可以確保您的問題不在SQL中。