Error "User does not have sufficient privileges or object not found"

1

I have a problem with UcanAccess, which is when using the WHERE clause, it throws me an error.

ConnectAccess.java

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class ConnectAccess {

static String rutaDB;
static String user;
static String pass;
static String sql;

public static String getRutaDB() {
    return rutaDB;
}
public void setRutaDB(String rutaDB) {
    ConnectAccess.rutaDB = rutaDB;
}

public static String getUser() {
    return user;
}
public void setUser(String user) {
    ConnectAccess.user = user;
}

public static String getPass() {
    return pass;
}
public void setPass(String pass) {
    ConnectAccess.pass = pass;
}

public static String getSql() {
    return sql;
}
public void setSql(String sql) {
    ConnectAccess.sql = sql;
}




public void conectar(){
    try{
        Class.forName("net.ucanaccess.jdbc.UcanaccessDriver");

        Connection con = DriverManager.getConnection("jdbc:ucanaccess://"+rutaDB,user,pass);
        Statement st = con.createStatement();
        ResultSet rs = st.executeQuery(sql);

        while(rs.next()){
            System.out.println(rs.getString("Usuario"));
            System.out.println(rs.getString("Contraseña"));
            System.out.println(rs.getString("Permiso"));
        }

    }catch(Exception e){
        e.printStackTrace();
    }
}

}

Main.java

public class Main {

public static void main(String args[]){

    ConnectAccess ca = new ConnectAccess();

    ca.setRutaDB("C:/Users/USUARIO/Desktop/usuarios.accdb");
    ca.setUser(null);
    ca.setPass(null);
    ca.setSql("SELECT * FROM usuarios WHERE Usuario=admin");
    ca.conectar();
}

}

If I remove "WHERE User = admin" if it works, but when I remove it I get the following error:

net.ucanaccess.jdbc.UcanaccessSQLException: UCAExc:::3.0.6 usuario no tiene privilegios suficientes o objeto no encontrado: ADMIN
    at net.ucanaccess.jdbc.UcanaccessStatement.executeQuery(UcanaccessStatement.java:211)
    at ConnectAccess.conectar(ConnectAccess.java:50)
    at Main.main(Main.java:12)
Caused by: java.sql.SQLSyntaxErrorException: usuario no tiene privilegios suficientes o objeto no encontrado: ADMIN
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
    at org.hsqldb.jdbc.JDBCStatement.fetchResult(Unknown Source)
    at org.hsqldb.jdbc.JDBCStatement.executeQuery(Unknown Source)
    at net.ucanaccess.jdbc.UcanaccessStatement.executeQuery(UcanaccessStatement.java:208)
    ... 2 more
Caused by: org.hsqldb.HsqlException: usuario no tiene privilegios suficientes o objeto no encontrado: ADMIN
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.error.Error.error(Unknown Source)
    at org.hsqldb.ExpressionColumn.checkColumnsResolved(Unknown Source)
    at org.hsqldb.QueryExpression.resolve(Unknown Source)
    at org.hsqldb.ParserDQL.compileCursorSpecification(Unknown Source)
    at org.hsqldb.ParserCommand.compilePart(Unknown Source)
    at org.hsqldb.ParserCommand.compileStatements(Unknown Source)
    at org.hsqldb.Session.executeDirectStatement(Unknown Source)
    at org.hsqldb.Session.execute(Unknown Source)
    ... 5 more
    
asked by bruno Diaz martin 21.08.2016 в 21:42
source

3 answers

2

Assuming column usuario is a character string ( char , varchar or the like), deguramente admin is a character string also, so that the correct way to write the code would be:

public class Main {

public static void main(String args[]){

    ConnectAccess ca = new ConnectAccess();

    ca.setRutaDB("C:/Users/USUARIO/Desktop/usuarios.accdb");
    ca.setUser(null);
    ca.setPass(null);
    ca.setSql("SELECT * FROM usuarios WHERE Usuario='admin' ");
    ca.conectar();
}

}

Remember that you must enclose all character strings in quotes. This is true for almost any language, including SQL.

    
answered by 22.08.2016 / 07:54
source
0
public class Main {

public static void main(String args[]){

   ConnectAccess ca = new ConnectAccess();

   ca.setRutaDB("C:/Users/USUARIO/Desktop/usuarios.accdb");
   ca.setUser(null);
   ca.setPass(null);
   ca.setSql("SELECT * FROM usuarios WHERE Usuario=admin");
   ca.conectar();
   }

}  

I think the error is in that code can be like no.

I tell you xq generally when we show a code that contains users and passwords we do not hide it with "null" but with "user" and "password" respectively in Spanish or English.

I venture on that side, so it may be that in setUser and setPass you are not sending authentication data to the database correctly.

It may be that the getString is not working quite well, try sending the data directly in the code

    
answered by 22.08.2016 в 21:51
0

look at the file:

  

C: /Users/USUARIO/Desktop/usuarios.accdb

If you have a table with the name ADMIN. in case you have it fix the schema put.

    
answered by 11.10.2018 в 18:30