【问题标题】:Prompting user to enter details for table creation提示用户输入创建表的详细信息
【发布时间】:2015-01-04 12:01:37
【问题描述】:
import java.sql.*;
import java.util.Scanner;

public class DynamicTableCreate {

    static String url, user, password;
    static {
        url="jdbc:mysql://localhost/testing";
        user="root";
        password="root";
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Connection con=null;
        Statement stmt=null;

        Scanner scan=new Scanner(System.in);
        System.out.println("Enter table name");
        String tname=scan.next();
        System.out.println("Enter number of columns");
        int cols=scan.nextInt();
        System.out.println("Enter column names and data types ");
        String [] colnames=new String[5];
        String [] datatype=new String[5];
        int i=0;
        while(i<cols)
        {
            colnames[i]=scan.next();
            datatype[i]=scan.next();
            i++;
        }

        // Create table Trainers (T_Id int primary key, Trainer_name varchar(20), Stream varchar(20));
        try {
            Class.forName("com.mysql.jdbc.Driver");
            con=DriverManager.getConnection(url,user,password);
            stmt=con.createStatement();

            String sql1 = "create table " + tname + "(" + colnames[0] + " " + datatype[0] + " primary key, ";
            for(i=1;i<cols;i++)
            {
                sql1 += colnames[i] + " " + datatype[i] + ", ";
            }
            sql1+=");";
            stmt.executeUpdate(sql1);
        }

        catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        finally
        {
            try
            {
                if (stmt!=null)
                    stmt.close();
                if(con!=null)
                    con.close();
            }
            catch(Exception e)
            {

            }
        }
    }
}

我想创建用户提供表名、列数、列名及其数据类型的表,但我的代码抛出以下错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 你有 SQL 语法错误;检查与您对应的手册 MySQL 服务器版本,用于在第 1 行的 ')' 附近使用正确的语法

解决办法是什么?

【问题讨论】:

  • 您是否进行了任何研究或调试以查看 SQL 查询的结果(例如,将字符串打印到控制台或其他日志)?我知道 MySQL 返回的错误消息不是很好,但它正在解释问题。

标签: java jdbc


【解决方案1】:

问题解决了……

唯一要做的改变就是替换

sql1 += colnames[i] + " " + datatype[i] + ", ";

通过

sql1 += ", " + colnames[i] + " " + datatype[i];

【讨论】:

    猜你喜欢
    • 2020-09-26
    • 2014-01-17
    • 2016-12-14
    • 2019-09-23
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 2020-05-01
    相关资源
    最近更新 更多