![](/img/trans.png)
[英]java.lang.ClassCastException: cannot be cast to java.lang.Integer
[英]BinaryData cannot be cast to java.lang.Integer
我正在嘗試從教科書中重新創建該程序。 教科書使用了jdbc :: odbc橋,因此我將其更改為ucanaccess。 它還將longbinary用作密碼類型,無法識別,我將其更改為僅二進制。 這是我收到的輸出:
刪除索引和表...
無法在UserStocks表上刪除主鍵:UCAExc ::: 4.0.2意外令牌:開
創建表.........
創建具有主鍵索引的Stocks表...
使用主鍵索引創建Users表...
創建UserStocks表...
正在創建UserStocks表主鍵索引...
異常插入用戶:UCAExc :::: 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
數據庫已創建。
正在顯示數據庫中的數據...
用戶表包含:
庫存表不包含任何記錄。
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中 ,邏輯上是您的表不存在,因此索引也不會退出,因此您將獲得此異常。
與表或數據庫不同,您可以檢查索引是否存在,為避免此問題, 您無需刪除索引 ,因為在刪除表時,索引也會被摻雜( 在MySQL中刪除表)還刪除索引? )。
注意:為避免在創建和刪除數據庫表時出現問題,請使用IF NOT EXISTS
,例如:
DROP TABLE Stocks IF EXISTS
CREATE TABLE Stocks IF NOT EXISTS (...)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.