UCanAccess:用户缺少权限或找不到对象
UCanAccess: user lacks privilege or object not found
我正在尝试进行一些 Ucanaccess 实践,以使用 java 管理一些数据库。我收到一个我不知道如何解决的错误。
我有一个名为 USERS 的 table 访问权限:
自动编号,短文本,短文本,数字。
所以我要做的是检查给定的用户和密码是否正确,如果正确,则更改“CONEXIONES”。但我收到此错误:
Exception in thread "main" net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::4.0.1 usuario no tiene privilegios suficientes o objeto no encontrado: Z_19MIKE95
at net.ucanaccess.jdbc.UcanaccessStatement.executeUpdate(UcanaccessStatement.java:221)
at Ej4.Ej4.main(Ej4.java:32)
英文的意思是:
UCAExc:::4.0.1 user lacks of privileges or object not found Z_19MIKE95
所以我的代码是这样的:
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
String url="jdbc:ucanaccess://C:/Users/PC-Mikel/Desktop/Uni/Distribuidos/P4Ejer4.accdb";
Connection connection = DriverManager.getConnection(url);
Statement statement = connection.createStatement();
String sql,user,pass;
System.out.println("Introduzca Usuario");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
user = br.readLine();
System.out.println("Introduzca Contraseña");
BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
pass = br2.readLine();
sql= "UPDATE USERS SET CONEXIONES = 1 WHERE USUARIO = "+user+" AND CONTRASENA = " +pass;
System.out.println(sql);
int nrows = statement.executeUpdate(sql);
代码继续,但只有一些条件和查询。
您的动态 SQL 正在创建一个将数据值与列名混淆的查询。您应该使用 PreparedStatement
和 参数化查询 ,例如
sql= "UPDATE USERS SET CONEXIONES = 1 WHERE USUARIO = ? AND CONTRASENA = ?";
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setString(1) = user;
pstmt.setString(2) = pass;
int nrows = pstmt.executeUpdate();
在我的案例中,Connection 的 keepMirror=C:/db/mirrorName
选项是罪魁祸首。我删除了它并且它起作用了...
我正在尝试进行一些 Ucanaccess 实践,以使用 java 管理一些数据库。我收到一个我不知道如何解决的错误。
我有一个名为 USERS 的 table 访问权限:
自动编号,短文本,短文本,数字。
所以我要做的是检查给定的用户和密码是否正确,如果正确,则更改“CONEXIONES”。但我收到此错误:
Exception in thread "main" net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::4.0.1 usuario no tiene privilegios suficientes o objeto no encontrado: Z_19MIKE95
at net.ucanaccess.jdbc.UcanaccessStatement.executeUpdate(UcanaccessStatement.java:221)
at Ej4.Ej4.main(Ej4.java:32)
英文的意思是:
UCAExc:::4.0.1 user lacks of privileges or object not found Z_19MIKE95
所以我的代码是这样的:
Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");
String url="jdbc:ucanaccess://C:/Users/PC-Mikel/Desktop/Uni/Distribuidos/P4Ejer4.accdb";
Connection connection = DriverManager.getConnection(url);
Statement statement = connection.createStatement();
String sql,user,pass;
System.out.println("Introduzca Usuario");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
user = br.readLine();
System.out.println("Introduzca Contraseña");
BufferedReader br2 = new BufferedReader(new InputStreamReader(System.in));
pass = br2.readLine();
sql= "UPDATE USERS SET CONEXIONES = 1 WHERE USUARIO = "+user+" AND CONTRASENA = " +pass;
System.out.println(sql);
int nrows = statement.executeUpdate(sql);
代码继续,但只有一些条件和查询。
您的动态 SQL 正在创建一个将数据值与列名混淆的查询。您应该使用 PreparedStatement
和 参数化查询 ,例如
sql= "UPDATE USERS SET CONEXIONES = 1 WHERE USUARIO = ? AND CONTRASENA = ?";
PreparedStatement pstmt = connection.prepareStatement(sql);
pstmt.setString(1) = user;
pstmt.setString(2) = pass;
int nrows = pstmt.executeUpdate();
在我的案例中,Connection 的 keepMirror=C:/db/mirrorName
选项是罪魁祸首。我删除了它并且它起作用了...