UCanAccess 读取 a table 的最后一列作为第一列
UCanAccess reads the last column of a table as the first column
我的程序总是将 Access 数据库中的第一列读取为第二列,将第二列读取为第三列,依此类推,但最后一列读取为第一列。
public void actionPerformed(ActionEvent e) {
try{
String query = "insert into Staff values ('2', 'w', 'w', 'w', 'e', 'w', 'd','d','end')";
stmt.executeUpdate(query);
status.setText("1 row of record have been inserted");
}catch(Exception ex){
ex.printStackTrace();
}
}
但是当我指定列名时,它读取正常
public void actionPerformed(ActionEvent e) {
try{
String query = "insert into Staff (id, lastName, firstName, mi, address, city, state, telephone, email) "
+ "values ('2', 'w', 'w', 'w', 'e', 'w', 'd','d','end')";
stmt.executeUpdate(query);
status.setText("1 row of record have been inserted");
}catch(Exception ex){
ex.printStackTrace();
}
}
默认情况下,UCanAccess 以 "DATA" 顺序处理 table 的列。这是列在 Access 元数据中内部定义的顺序,可能与 "DISPLAY" 顺序不同。
如果您希望 UCanAccess 按 "DISPLAY" 顺序处理列,请添加参数
;columnOrder=DISPLAY
连接结束 URL,例如,
jdbc:ucanaccess://c:/db/cico.mdb;columnOrder=DISPLAY
但是,您现在还应该意识到,如果 不是 在 INSERT 语句中指定实际的列名,您的代码很容易因 假设而损坏 列的名称(和顺序)。
正如 SELECT * FROM
不受欢迎一样,INSERT INTO tablename VALUES ( ...
也是如此。您已经为每一列指定了 values,因此您确实应该也指定列的 names。
我的程序总是将 Access 数据库中的第一列读取为第二列,将第二列读取为第三列,依此类推,但最后一列读取为第一列。
public void actionPerformed(ActionEvent e) {
try{
String query = "insert into Staff values ('2', 'w', 'w', 'w', 'e', 'w', 'd','d','end')";
stmt.executeUpdate(query);
status.setText("1 row of record have been inserted");
}catch(Exception ex){
ex.printStackTrace();
}
}
但是当我指定列名时,它读取正常
public void actionPerformed(ActionEvent e) {
try{
String query = "insert into Staff (id, lastName, firstName, mi, address, city, state, telephone, email) "
+ "values ('2', 'w', 'w', 'w', 'e', 'w', 'd','d','end')";
stmt.executeUpdate(query);
status.setText("1 row of record have been inserted");
}catch(Exception ex){
ex.printStackTrace();
}
}
默认情况下,UCanAccess 以 "DATA" 顺序处理 table 的列。这是列在 Access 元数据中内部定义的顺序,可能与 "DISPLAY" 顺序不同。
如果您希望 UCanAccess 按 "DISPLAY" 顺序处理列,请添加参数
;columnOrder=DISPLAY
连接结束 URL,例如,
jdbc:ucanaccess://c:/db/cico.mdb;columnOrder=DISPLAY
但是,您现在还应该意识到,如果 不是 在 INSERT 语句中指定实际的列名,您的代码很容易因 假设而损坏 列的名称(和顺序)。
正如 SELECT * FROM
不受欢迎一样,INSERT INTO tablename VALUES ( ...
也是如此。您已经为每一列指定了 values,因此您确实应该也指定列的 names。