2016-10-17 12 views
0

JDBCを使用して作成クエリを実行しようとしています。私は、クエリを作成し、それを実行するが、私の構文エラーを表示するメソッドがあります。以下は、スタックトレースです:JDBC:テーブルクエリ構文エラーを作成する

com.mysql.jdbc.exceptions.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 'supplierId varchar,supplierUrl varchar,totalActivities varchar,activityName varc' at line 1 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:936) 
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2941) 
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1623) 
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1715) 
at com.mysql.jdbc.Connection.execSQL(Connection.java:3243) 
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1343) 
at com.mysql.jdbc.Statement.executeUpdate(Statement.java:1260) 

は今、生成されたクエリはこれです:

create table demo (ID INTEGER PRIMARY KEY AUTO_INCREMENT,supplierName varchar,supplierId varchar,supplierUrl varchar,totalActivities varchar,activityName varchar,activityPrice varchar,tourCode varchar,starRating varchar,totalReviews varchar,geography varchar,duration varchar,category varchar,subCategory varchar); 

そして以下は、このクエリを生成している方法です。

private static String getCreateTableQuery(String tableName, String columnData) { 
    StringBuilder sqlStatement = new StringBuilder(""); 

    sqlStatement.append("create table " + tableName + " (ID INTEGER PRIMARY KEY AUTO_INCREMENT,"); 

    String[] columns = columnData.split(">"); // columns are separated by > 
    for (int i = 0; i < columns.length; i++) { 
     sqlStatement.append(columns[i] + " varchar"); 
     if (i != columns.length - 1) { // no commas after last column 
      sqlStatement.append(","); 
     } 
    } 
    sqlStatement.append(");"); 
    return sqlStatement.toString(); 
} 

そして、これはどのように午前ですクエリを実行します。

SessionImpl sessionImpl = (SessionImpl) getSessionFactory().openSession(); 
    Connection conn = (Connection) sessionImpl.connection(); 

    Statement statement = (Statement) conn.createStatement(); 
    statement.executeUpdate(query); 
    sessionImpl.close(); 
    conn.close(); 

構文エラーを理解できません。誰かが説明できますか?

+1

私はほぼ肯定的ですvarcharには引数fが必要ですまたはその最大長さ: 'varchar(20)'などです。 – yshavit

+0

ええ。出来た。 –

答えて

0

私はあなたがvarchar型フィールドのパスの最大長にしていると思う:

これを確認してくださいあなたのクエリがそのようになります。ここでは

create table demo (ID INTEGER PRIMARY KEY AUTO_INCREMENT,supplierName varchar(255),supplierId varchar(255),supplierUrl varchar(255),totalActivities varchar(255),activityName varchar(255),activityPrice varchar(255),tourCode varchar(255),starRating varchar(255),totalReviews varchar(255),geography varchar(255),duration varchar(255),category varchar(255),subCategory varchar(255)); 

は、挿入クエリです:

insert into demo 
    (supplierName, supplierId, supplierUrl, totalActivities, activityName, 
    activityPrice, tourCode, starRating, totalReviews, geography, duration, 
    category, subCategory) 
    values 
    (supplierName, supplierId, supplierUrl, totalActivities, activityName, 
    activityPrice, tourCode, starRating, totalReviews, geography, duration, 
    category, subCategory) 
+0

うん。出来た。このテーブルのINSERTクエリはどのようになりますか? –

+0

@roger_thatそれは働いている場合この答えを受け入れる –

+0

@roger_that編集された答えを参照してください –

0

Mysqlでは、varcharに長さを定義する必要があります。ここを見てみましょう:

Why does VARCHAR need length specification?

私はあなたのJavaコードに問題が表示されません。 create table文を修正すると、おそらく問題ありません。

+0

はい。それが問題を解決しました。 –

関連する問題