如果不声明主键,为什么它不在数据库中创建表?

时间:2014-02-02 15:40:21

标签: java mysql sql oracle jdbc

使用JDBC,

当我声明“id”字段是主键时,此代码有效。

String sql = "CREATE TABLE REGISTRATION1 " +
             "(id INTEGER not NULL, " +
             " first VARCHAR(255), " + 
             " last VARCHAR(255), " + 
             " age INTEGER, " + 
             " PRIMARY KEY (id))";
stmt.executeUpdate (sql);

但是当我删除声明PRIMARY KEY (id)not NULL标记时。

String sql = "CREATE TABLE REGISTRATION2 " +
             "(id INTEGER, " +
             " first VARCHAR(255), " + 
             " last VARCHAR(255), " + 
             " age INTEGER");
stmt.executeUpdate (sql);

2 个答案:

答案 0 :(得分:3)

它没有编译,因为你有一个不应该在那里的尾随括号:

" age INTEGER");

应该是

" age INTEGER)";

它与SQL编译器不关心的SQL字符串的内容无关。

请注意,从编译器读取错误消息有助于识别错误的内容和位置。您应该阅读该消息,如果您无法理解它,请将其发布,而不是错误地猜测问题可能是什么。

答案 1 :(得分:0)

您的括号位于字符串查询之外。构造并传递错误的字符串进行处理。

String sql = "CREATE TABLE REGISTRATION2 " +
             "(id INTEGER, " +
             " first VARCHAR(255), " + 
             " last VARCHAR(255), " + 
             " age INTEGER)";


   System.out.println("Sql Query is ="+sql);
    //Now Execute you query here

如果在执行之前打印sql查询,也可以找到确切的错误/异常。此print语句将显示您要执行的确切查询。

希望它会对你有所帮助。