运行Java登录界面时出现UCAExc:::5.0.1 EXT_DATE_TIME权限/类型错误
登录界面Java代码运行抛出UCAExc:::5.0.1 type not found or user lacks privilege: EXT_DATE_TIME异常排查
我按照教程编写Java登录界面代码,运行时抛出UCAExc:::5.0.1 type not found or user lacks privilege: EXT_DATE_TIME异常,教程中的代码可正常运行,但我的代码出现该问题。
我的代码
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { Connection con = null; PreparedStatement pst = null ; ResultSet rs = null; try{ Class.forName("net.ucanaccess.jdbc.UcanaccessDriver"); con = DriverManager.getConnection("jdbc:ucanaccess://C:\\Users\\Morgan\\Documents\\Database1.accdb"); String sq1 = "select * from user_account where username = '"+ tfusr.getText() +"' and password = '"+ tfpwsd.getText() +"' "; pst = con.prepareStatement(sq1); rs = pst.executeQuery(); if(rs.next()) { JOptionPane.showMessageDialog(null,"Login successfull"); } else { JOptionPane.showMessageDialog(null , "Login Failed"); } } catch(Exception e){ System.out.println(e); } }
项目依赖
我的项目依赖包含ucanaccess-5.0.1.jar、jackcess-3.0.1.jar及相关辅助包(截图显示完整依赖列表)
问题排查与解决办法
- 依赖版本不兼容/缺失:UCanAccess 5.0.1对依赖包版本有严格要求,单独引入零散jar包容易出现版本不匹配。建议直接下载UCanAccess官方提供的完整依赖包(包含所有必需的jackcess、commons系列等jar),替换现有项目中的零散依赖,确保所有组件版本适配。
- 数据库字段类型问题:检查目标Access数据库
Database1.accdb的user_account表中是否存在EXT_DATE_TIME类型的字段。UCanAccess对该扩展类型的支持需要完整依赖包支持,若不需要该类型,可将字段改为普通DateTime类型。 - 修复SQL注入漏洞:当前代码直接拼接用户输入到SQL语句中,存在严重安全风险,同时也可能引发语法异常。改用PreparedStatement参数绑定写法:
String sql = "select * from user_account where username = ? and password = ?"; pst = con.prepareStatement(sql); pst.setString(1, tfusr.getText()); pst.setString(2, tfpwsd.getText()); rs = pst.executeQuery(); - 驱动加载优化:Java 6及以上版本无需手动调用
Class.forName加载驱动,可移除该语句,确保依赖包已正确添加到项目类路径中。
内容的提问来源于stack exchange,提问作者Morgan Joffe
相关产品推荐
相关产品推荐

