无法将BinaryData转换为java.lang.Integer

无法将BinaryData转换为java.lang.Integer,java,mysql,sql-server,database,Java,Mysql,Sql Server,Database,我正试图从教科书中重新创建这个程序。这本教科书使用jdbc::odbc桥,所以我将它改为ucanaccess。它还使用longbinary作为密码类型,我把它改成了binary。这是我收到的输出: 正在删除索引和表 无法删除UserStocks表上的主键:UCAExc::4.0.2意外令牌:on 创建表 正在使用主键索引创建股票表 正在使用主键索引创建用户表 正在创建UserStocks表 正在创建UserStocks表主键索引 异常插入用户:ucaecc:::4.0.2 net.ucanacc

我正试图从教科书中重新创建这个程序。这本教科书使用jdbc::odbc桥,所以我将它改为ucanaccess。它还使用longbinary作为密码类型,我把它改成了binary。这是我收到的输出:

正在删除索引和表

无法删除UserStocks表上的主键:UCAExc::4.0.2意外令牌:on

创建表

正在使用主键索引创建股票表

正在使用主键索引创建用户表

正在创建UserStocks表

正在创建UserStocks表主键索引

异常插入用户:ucaecc:::4.0.2 net.ucanaccess.triggers.TriggerException:org.hsqldb.types.BinaryData不能转换为java.lang.Integer net.ucanaccess.triggers.TriggerException:org.hsqldb.types.BinaryData不能转换为java.lang.Integer

数据库已创建

正在显示数据库中的数据

用户表包含:

Stocks表不包含任何记录

UserStocks表不包含任何记录

代码如下:

 import java.sql.*;
import java.io.*;

public class MakeDB
{
public static void main(String[] args) throws Exception
{
    Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");

    String url = "jdbc:ucanaccess://C:/Users/Sarah/workspace/StockTracker/StockTracker.mdb";

    Connection con = DriverManager.getConnection(url);
    Statement stmt = con.createStatement();

    // The following code deletes each index and table, if they exist.
    // If they do not exist, a message is displayed and execution continues.
    System.out.println("Dropping indexes & tables ...");

    try
    {
        stmt.executeUpdate("DROP INDEX PK_UserStocks ON UserStocks");

    }
    catch (Exception e)
    {
        System.out.println("Could not drop primary key on UserStocks table: "
                          + e.getMessage());
    }

    try
    {
        stmt.executeUpdate("DROP TABLE UserStocks");
    }
    catch (Exception e)
    {
        System.out.println("Could not drop UserStocks table: "
                          + e.getMessage());
    }

    try
    {
        stmt.executeUpdate("DROP TABLE Users");
    }
    catch (Exception e)
    {
        System.out.println("Could not drop Users table: "
                          + e.getMessage());
    }

    try
    {
        stmt.executeUpdate("DROP TABLE Stocks");
    }
    catch (Exception e)
    {
        System.out.println("Could not drop Stocks table: "
                          + e.getMessage());
    }

    ///////// Create the database tables /////////////
    System.out.println("\nCreating tables ............");

    // Create Stocks table with primary key index
    try
    {
        System.out.println("Creating Stocks table with primary key index...");
        stmt.executeUpdate("CREATE TABLE Stocks ("
                          +"symbol TEXT(8) NOT NULL "
                          +"CONSTRAINT PK_Stocks PRIMARY KEY, "
                          +"name TEXT(50)"
                          +")");
    }
    catch (Exception e)
    {
        System.out.println("Exception creating Stocks table: "
                          + e.getMessage());
    }

    // Create Users table with primary key index
    try
    {
        System.out.println("Creating Users table with primary key index...");
        stmt.executeUpdate("CREATE TABLE Users ("
                          +"userID TEXT(20) NOT NULL "
                          +"CONSTRAINT PK_Users PRIMARY KEY, "
                          +"lastName TEXT(30) NOT NULL, "
                          +"firstName TEXT(30) NOT NULL, "
                          +"pswd BINARY(254), "
                          +"admin BIT"
                          +")");
    }
    catch (Exception e)
    {
        System.out.println("Exception creating Users table: "
                          + e.getMessage());
    }

    // Create UserStocks table with foreign keys to Users and Stocks tables
    try
    {
        System.out.println("Creating UserStocks table ...");
        stmt.executeUpdate("CREATE TABLE UserStocks ("
                          +"userID TEXT(20) "
                          +"CONSTRAINT FK1_UserStocks REFERENCES Users (userID), "
                          +"symbol TEXT(8), "
                          +"CONSTRAINT FK2_UserStocks FOREIGN KEY (symbol) "
                          +"REFERENCES Stocks (symbol))");
    }
    catch (Exception e)
    {
        System.out.println("Exception creating UserStocks table: "
                          + e.getMessage());
    }

    // Create UserStocks table primary key index
    try
    {
        System.out.println("Creating UserStocks table primary key index...");
        stmt.executeUpdate("CREATE UNIQUE INDEX PK_UserStocks "
                          +"ON UserStocks (userID, symbol) "
                          );
    }
    catch (Exception e)
    {
        System.out.println("Exception creating UserStocks index: "
                          + e.getMessage());
    }


    // Create one administrative user with password as initial data
    String userID = "admin01";
    String firstName = "Default";
    String lastName = "Admin";
    String initialPswd = "admin01";
    Password pswd = new Password(initialPswd);
    boolean admin = true;

    PreparedStatement pStmt =
               con.prepareStatement("INSERT INTO Users VALUES (?,?,?,?,?)");
    try
    {
        pStmt.setString(1, userID);
        pStmt.setString(2, lastName);
        pStmt.setString(3, firstName);
        pStmt.setBytes(4, serializeObj(pswd));
        pStmt.setBoolean(5, admin);
        pStmt.executeUpdate();
    }
    catch (Exception e)
    {
        System.out.println("Exception inserting user: "
                          + e.getMessage());
    }

    pStmt.close();

    // Read and display all User data in the database.
    ResultSet rs = stmt.executeQuery("SELECT * FROM Users");

    System.out.println("Database created.\n");
    System.out.println("Displaying data from database...\n");
    System.out.println("Users table contains:");

    Password pswdFromDB;
    byte[] buf = null;

    while(rs.next())
    {
        System.out.println("Logon ID         = "
                          + rs.getString("userID"));
        System.out.println("First name       = "
                          + rs.getString("firstName"));
        System.out.println("Last name        = "+rs.getString("lastName"));
        System.out.println("Administrative   = "+rs.getBoolean("admin"));
        System.out.println("Initial password = "+initialPswd);


        buf = rs.getBytes("pswd");
        if (buf != null)
        {
            System.out.println("Password Object  = "
                              + (pswdFromDB=(Password)deserializeObj(buf)));
            System.out.println("  AutoExpires    = "+ pswdFromDB.getAutoExpires());
            System.out.println("  Expiring now   = "+ pswdFromDB.isExpiring());
            System.out.println("  Remaining uses = "
                              + pswdFromDB.getRemainingUses()+"\n");
        }
        else
            System.out.println("Password Object  = NULL!");
    }

    rs = stmt.executeQuery("SELECT * FROM Stocks");
    if(!rs.next())
        System.out.println("Stocks table contains no records.");
    else
        System.out.println("Stocks table still contains records!");

    rs = stmt.executeQuery("SELECT * FROM UserStocks");
    if(!rs.next())
        System.out.println("UserStocks table contains no records.");
    else
        System.out.println("UserStocks table still contains records!");

    stmt.close(); // closing Statement also closes ResultSet

} // end of main()

// Method to write object to byte array and then insert into prepared statement
public static byte[] serializeObj(Object obj)
                          throws IOException
{
    ByteArrayOutputStream baOStream = new ByteArrayOutputStream();
    ObjectOutputStream objOStream = new ObjectOutputStream(baOStream);

    objOStream.writeObject(obj); // object must be Serializable
    objOStream.flush();
    objOStream.close();
    return baOStream.toByteArray(); // returns stream as byte array
}

// Method to read bytes from result set into a byte array and then
// create an input stream and read the data into an object
public static Object deserializeObj(byte[] buf)
                        throws IOException, ClassNotFoundException
{
    Object obj = null;

    if (buf != null)
    {
      ObjectInputStream objIStream =
        new ObjectInputStream(new ByteArrayInputStream(buf));

      obj = objIStream.readObject(); // throws IOException, ClassNotFoundException
    }
    return obj;
}
}


在此方面的任何帮助都将不胜感激

您的程序中有一些错误的逻辑:

第1步。删除索引
第2步。放下桌子
步骤3。创建表格

步骤1中,逻辑是您的表不存在,因此索引也不会退出,因此您会得到此异常


与表或数据库不同,您可以检查索引是否存在,为避免此问题,您不需要删除索引,因为删除表时,索引也会检查此()


注意:为了避免在创建和删除数据库、表时出现问题,必须使用
(如果不存在)
,例如:

DROP TABLE Stocks IF EXISTS
CREATE TABLE Stocks IF NOT EXISTS (...)