2016-03-20 17 views
0

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException CREATE: Eğer SQL sözdizimicom.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException TABLO

bir hata var ben bir create_table(String table_name) işlevi var. Anlayamadığım bir SQL sözdizimi hatası var gibi görünüyor. Benzer soruları olan birçok konu buldum ve çoğu cevapsız bırakıldı. Her türlü önerinize açığız.

tam bir yığın iz:

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 '1006 (Date VARCHAR(10) NOT NULL, Weight FLOAT NOT NULL, Amount FLOAT NOT NULL, P' at line 1 
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
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:939) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3878) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625) 
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2547) 
at com.mysql.jdbc.StatementImpl.executeUpdateInternal(StatementImpl.java:1541) 
at com.mysql.jdbc.StatementImpl.executeLargeUpdate(StatementImpl.java:2605) 
at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1469) 
at com.appsmith.card_io.IOstream.create_table(IOstream.java:249) 
at com.appsmith.card_io.IOstream$1.actionPerformed(IOstream.java:110) 
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018) 
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341) 
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402) 
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259) 
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252) 
at java.awt.Component.processMouseEvent(Component.java:6505) 
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321) 
at java.awt.Component.processEvent(Component.java:6270) 
at java.awt.Container.processEvent(Container.java:2229) 
at java.awt.Component.dispatchEventImpl(Component.java:4861) 
at java.awt.Container.dispatchEventImpl(Container.java:2287) 
at java.awt.Component.dispatchEvent(Component.java:4687) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832) 
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492) 
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422) 
at java.awt.Container.dispatchEventImpl(Container.java:2273) 
at java.awt.Window.dispatchEventImpl(Window.java:2719) 
at java.awt.Component.dispatchEvent(Component.java:4687) 
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:703) 
at java.awt.EventQueue.access$000(EventQueue.java:102) 
at java.awt.EventQueue$3.run(EventQueue.java:662) 
at java.awt.EventQueue$3.run(EventQueue.java:660) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87) 
at java.awt.EventQueue$4.run(EventQueue.java:676) 
at java.awt.EventQueue$4.run(EventQueue.java:674) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76) 
at java.awt.EventQueue.dispatchEvent(EventQueue.java:673) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244) 
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147) 
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139) 
at java.awt.EventDispatchThread.run(EventDispatchThread.java:97) 

oluşturmak tablo işlevi: kaynaktan

public void create_table(String table_name) { 
    StringBuilder sql = new StringBuilder(); 
    sql.append(String.format("CREATE TABLE %s ", table_name)); 
    sql.append("(Date VARCHAR(10) NOT NULL, "); 
    sql.append("Weight FLOAT NOT NULL, "); 
    sql.append("Amount FLOAT NOT NULL, "); 
    sql.append("PRIMARY KEY (Date))"); 
    Statement stmt = null; 
    try { 
     stmt = conn.createStatement(); 
     stmt.executeUpdate(sql.toString()); //IOstream.java:249 
    } catch (SQLException e) {   
     e.printStackTrace(); 
    } 
} 
+0

'Date' .. android anahtar kelime, Date_'' değiştirmeyi deneyin ve bir kez kontrol saklıdır edilebilir – ELITE

+0

@ELITE Hala içerecek şekilde yeniden adlandırın – Jimmy

+0

hata mesajını almak ne oluyor? Cevabı kontrol et. – ELITE

cevap

3

docs

bir rakam ile başlar, ancak olabilir

Tanımlayıcılar ibarettir olmayabilir belirtilmediği takdirde basamakların Bu nedenle

ya tablo adını alıntı veya bir mektubu

sql.append(String.format("CREATE TABLE `%s` ", table_name)); 
+0

Hızlı yanıt @Reimeus için teşekkürler. Bu benim için çalıştı. Masamı ID olarak adlandırdım. "T" + ID ile değiştirilmesi, bunu çözdü. – Jimmy

+2

Evet, yalnızca rakamlar kullanmaktan kaçınmak ve anlaşılır tablo adlarını kullanmak için daha iyi (harfler/sözcükler .....) :) – Reimeus

+0

İçinde bir kimlik bulunan bir tablo adının olması, "üst kayıt" başına bir tabloya sahip olduğunuz için tabloları kötüye kullandığınız gibi geliyor "yabancı anahtar kısıtlamaları veya bunun gibi bir şey kullanmak yerine. –