2017-04-05 103 views
1

我想使一些Ucanaccess实践来管理一些数据库与Java。而且我收到了一个我不知道如何解决的错误。UCanAccess:用户缺少特权或对象未找到

我有这样的表称为用户访问:

enter image description here

自动编号,短文本,短文本,数字。

所以我想要做的是检查给定的用户和密码是否正确,如果他们是,然后更改“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); 

代码继续,但目前只有一些条件和查询。

回答

1

您的动态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(); 
相关问题