【问题标题】:java.sql.SQLSyntaxErrorException: TYPE 'BOOL' does not existjava.sql.SQLSyntaxErrorException:类型'BOOL'不存在
【发布时间】:2012-10-30 04:46:11
【问题描述】:

所以我正在尝试使用以下代码创建这个 Table usr:

psCreateTable = con.prepareStatement("CREATE TABLE usr (pk_ID Integer NOT NULL, username VARCHAR(20) NOT NULL, lastname VARCHAR(20) NOT NULL, firstname VARCHAR(20) NOT NULL, password VARCHAR(20) NOT NULL, admin BOOL DEFAULT FALSE, PRIMARY KEY(pk_ID))");
psCreateTable.execute();

当我执行代码时,我得到了这个异常:

java.sql.SQLSyntaxErrorException: TYPE 'BOOL' does not exist

这绝对可以正常工作,因为它是从另一个表复制粘贴的。那么为什么不工作呢?

有什么建议吗?

谢谢。

【问题讨论】:

  • 你试过用TINYINT(1)代替BOOL吗?
  • 不,我特别不想这样做。太麻烦了,我只知道 BOOL 应该可以工作。
  • 你确定你的目标是相同的数据库版本吗?
  • @ArunManivannan 是的,100% 确定
  • 我刚刚检查了我的 SQL Server 管理,但没有看到 Bool 数据类型。可能是 tinyint(1) :) 1 = true, 0 = false

标签: java mysql prepared-statement


【解决方案1】:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.print.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.*;

public class Test {
public static void main(String args[]) throws SQLException {
String url = "jdbc:mysql://localhost:3306/rms";
String driver = "com.mysql.jdbc.Driver";
Connection conn = null;
try {
    conn = DriverManager.getConnection(url,"username","password");
} catch (SQLException e2) {
    e2.printStackTrace();
}

PreparedStatement pstmt = conn.prepareStatement("CREATE TABLE usr (pk_ID Integer NOT NULL, username VARCHAR(20) NOT NULL, lastname VARCHAR(20) NOT NULL, firstname VARCHAR(20) NOT NULL, password VARCHAR(20) NOT NULL, admin BOOL DEFAULT FALSE, PRIMARY KEY(pk_ID))");

        pstmt.executeUpdate();

        conn.close();
      }
 }

此代码在我的系统中运行良好并创建了表。你能再检查一下吗?

【讨论】:

    【解决方案2】:

    您的查询看起来一切正常。我认为您必须使用psCreateTable.executeUpdate(); 而不是psCreateTable.execute();。试试这个,让我知道。

    另外,@all http://dev.mysql.com/doc/refman/5.0/en/numeric-type-overview.html Bool 和 tinyint(1) 是同义词。

    【讨论】:

    • 似乎不起作用。从BOOL 更改为TINYINT(1),之后我现在收到以下错误:java.sql.SQLSyntaxErrorException: Syntax error: Encountered "(" at line 1, column 181.
    • 您不必将 bool 更改为 tinyint,因为两者都是相同且有效的。你可以复制粘贴整个堆栈跟踪吗?你试过psCreateTable.executeUpdate();吗?
    • 另外,如何添加堆栈跟踪?字数好像太多了,这里就不贴了。
    • 写另一个答案。因为我不能在这里复制粘贴。
    • 正如我之前所说的,它应该与 executeUpdate() 一起工作。我已经给出了我的程序的代码,它工作得很好。检查。
    【解决方案3】:

    您好,我编辑了试试这段代码,

    try
                {
                Statement stmt;
                stmt=con.createStatement();
                stmt.executeUpdate("CREATE TABLE usr (pk_ID Integer NOT NULL, username VARCHAR(20) NOT NULL, lastname VARCHAR(20) NOT NULL, firstname VARCHAR(20) NOT NULL, password VARCHAR(20) NOT NULL, admin BOOL DEFAULT FALSE, PRIMARY KEY(pk_ID))");
                }catch(Exception ex)
                {
                    System.out.println(""+ex);
                }
    

    谢谢

    【讨论】:

    • 您好,尝试使用 executeUpdate(query),,, mysql 中的另一个更改我发现,bool 更改为 tinyint(1),,, 所以我的事情都 r simlear 使用 true 1 false 0。 ...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 1970-01-01
    • 2015-05-24
    • 2020-01-05
    • 2023-04-04
    • 1970-01-01
    • 2020-12-14
    相关资源
    最近更新 更多