无法使用java在ms access中创建自动增量主键字段
我需要创建一个带有autoincrement主键列的表>,我尝试了以下代码,但它抛出了错误 我的代码:无法使用java在ms access中创建自动增量主键字段,java,ms-access-2007,ucanaccess,Java,Ms Access 2007,Ucanaccess,我需要创建一个带有autoincrement主键列的表>,我尝试了以下代码,但它抛出了错误 我的代码: CreateTableAccess.CreateAccessTable("CREATE TABLE D_Centre\n" + "(\n" + " SlNo AUTOINCREMENT,\n" + " CentreID VARCHAR,\n" + " CentreName
CreateTableAccess.CreateAccessTable("CREATE TABLE D_Centre\n"
+ "(\n"
+ " SlNo AUTOINCREMENT,\n"
+ " CentreID VARCHAR,\n"
+ " CentreName VARCHAR,\n"
+ " [Createddate] DateTime, \n"
+ " CreatedBy VARCHAR, \n"
+ " [Updateddate] DateTime\n"
+ ")", "D_Centre");
public static void CreateAccessTable(String sqlscript, String tablename )
{
String dbFileSpec = DataEntryScreen.homedirectory+"/"+"Dataentry.accdb";
Connection conn = null ;
try {
conn = DriverManager.getConnection("jdbc:ucanaccess://" + dbFileSpec);
} catch (SQLException ex) {
Logger.getLogger(CreateTableAccess.class.getName()).log(Level.SEVERE, null, ex);
}
DatabaseMetaData dmd = null;
try {
dmd = conn.getMetaData();
} catch (SQLException ex) {
Logger.getLogger(CreateTableAccess.class.getName()).log(Level.SEVERE, null, ex);
}
ResultSet rs = null;
try {
rs = dmd.getTables(null, null, tablename , new String[]{"TABLE"});
} catch (SQLException ex) {
Logger.getLogger(CreateTableAccess.class.getName()).log(Level.SEVERE, null, ex);
}
// }
{
try {
if (rs.next()) {
System.out.println("Table ["+tablename+"] already exists.");
} else {
System.out.println("Table ["+tablename+"] does not exist.");
Statement s = conn.createStatement();
s.executeUpdate(sqlscript);
System.out.println("Table ["+tablename+"] created.");
}
} catch (SQLException ex) {
Logger.getLogger(CreateTableAccess.class.getName()).log(Level.SEVERE, null, ex);
System.err.println("Error in table creation --> "+ex.toString());
}
try {
conn.commit();
} catch (SQLException ex) {
Logger.getLogger(CreateTableAccess.class.getName()).log(Level.SEVERE, null, ex);
}
try {
conn.close();
} catch (SQLException ex) {
Logger.getLogger(CreateTableAccess.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
错误:
2014年11月4日下午3:39:28 org.DataEntryApplication.view.CreateTableAccess CreateAccessTable
严重:空
net.ucanaccess.jdbc.UcanaccessSQLException:找不到类型或用户缺少权限:自动增量
位于net.ucanaccess.jdbc.UcanaccessStatement.executeUpdate(UcanaccessStatement.java:164)
位于org.DataEntryApplication.view.CreateTableAccess.CreateAccessTable(CreateTableAccess.java:53)
在org.DataEntryApplication.view.AccessProcess.AccessProcess(AccessProcess.java:40)上
位于org.DataEntryApplication.view.DataEntryScreen.addComponentsToPane(DataEntryScreen.java:188)
位于org.DataEntryApplication.view.DataEntryScreen.createAndShowGUI(DataEntryScreen.java:1092)
在org.DataEntryApplication.view.Login$7.actionPerformed(Login.java:277)
在javax.swing.AbstractButton.fireActionPerformed上(AbstractButton.java:2018)
位于javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
在javax.swing.DefaultButtonModel.fireActionPerformed上(DefaultButtonModel.java:402)
在javax.swing.DefaultButtonModel.setPressed中(DefaultButtonModel.java:259)
在javax.swing.plaf.basic.BasicButtonListener.MouseRelease(BasicButtonListener.java:252)
位于java.awt.Component.ProcessMouseeEvent(Component.java:6505)
位于javax.swing.JComponent.ProcessMouseeEvent(JComponent.java:3320)
位于java.awt.Component.processEvent(Component.java:6270)
位于java.awt.Container.processEvent(Container.java:2229)
位于java.awt.Component.dispatchEventImpl(Component.java:4861)
位于java.awt.Container.dispatchEventImpl(Container.java:2287)
位于java.awt.Component.dispatchEvent(Component.java:4687)
位于java.awt.LightweightDispatcher.RetargetMouseeEvent(Container.java:4832)
位于java.awt.LightweightDispatcher.ProcessMouseeEvent(Container.java:4492)
位于java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
位于java.awt.Container.dispatchEventImpl(Container.java:2273)
位于java.awt.Window.dispatchEventImpl(Window.java:2719)
位于java.awt.Component.dispatchEvent(Component.java:4687)
位于java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
在java.awt.EventQueue.access$200(EventQueue.java:103)
位于java.awt.EventQueue$3.run(EventQueue.java:694)
在java.awt.EventQueue$3.run(EventQueue.java:692)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
在java.awt.EventQueue$4.run(EventQueue.java:708)
在java.awt.EventQueue$4.run(EventQueue.java:706)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
位于java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
在java.awt.EventDispatchThread.PumpeEventsforFilter(EventDispatchThread.java:161)
位于java.awt.EventDispatchThread.PumpeEventsforHierarchy(EventDispatchThread.java:150)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
位于java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
在java.awt.EventDispatchThread.run(EventDispatchThread.java:91)
原因:java.sql.SQLException:找不到类型或用户缺少权限:AUTOINCREMENT
位于net.ucanaccess.jdbc.AbstractExecute.addDDLCommand(AbstractExecute.java:105)
位于net.ucanaccess.jdbc.AbstractExecute.executeBase(AbstractExecute.java:127)
在net.ucanaccess.jdbc.ExecuteUpdate.execute(ExecuteUpdate.java:56)
位于net.ucanaccess.jdbc.UcanaccessStatement.executeUpdate(UcanaccessStatement.java:162)
... 41多
创建表时出错-->net.ucanaccess.jdbc.UcanaccessSQLException:找不到类型或用户缺乏权限:AUTOINCREMENT确保您使用的是可用的最新版本的ucanaccess 我刚刚用UCanAccess 2.0.9.1尝试了以下内容,效果很好
s.executeUpdate(
“创建表格D_中心(”+
slNo自动递增主键+
“中心ID VARCHAR(100)”+
")");
编辑回复:评论
UCanAccess 2.0.9.1(及更高版本)也支持列的默认值。我刚刚测试了这个,它成功了:
s.executeUpdate(
"CREATE TABLE D_Centre (" +
"slNo AUTOINCREMENT PRIMARY KEY, " +
"Centre VARCHAR(100) DEFAULT 'foo' " +
")");
类似地,当我向列添加默认值作为s.executeUpdate(“创建表D_center(slNo自动递增主键,center VARCHAR(100)默认'Chennai')”)时;。它不是在创建表,而是抛出与above@Dhinakar我不知道,它对我有效(见我更新的答案)。您有最新版本的UCanAccess(目前为2.0.9.2),对吗?