Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

146
Vistas
Insertar cadena en HSQLDB

Intento insertar una cadena en un hsqldb y me da este error:

 > java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: S 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.executeUpdate(Unknown Source)

la columna se establece en VARCHAR(50) y el sqlstring se construye así:

 String sql = "INSERT INTO Emergency Values(" + Counter.emergencyID + ","+ emergency.status +"," + "\""+ emergency.typeD +"\"" + "," + "\""+ emergency.typeB +"\"" + ","+ emergency.floorID + ")";

así es como ejecuto la consulta:

 Statement st = null; st = con.createStatement(); // statements int i = st.executeUpdate(sql); // run the query

PD: sé que estoy abierto a una inyección SQL como esta.

EDITAR: los valores son

 sql = "INSERT INTO Emergency Values(0,1,"S","IB",1)"

Si cambio la cadena a;

 String sql = "INSERT INTO Emergency Values(" + Counter.emergencyID + ","+ emergency.status +","+ emergency.typeD +","+ emergency.typeB +","+ emergency.floorID +")";

ocurre el mismo error

over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

Use un PreparedStatement y no tendrá problemas:

 String sql = "INSERT INTO Emergency (emergency_id, status, type_d, type_b, floor_id) " + " Values (?, ?, ?, ?, ?)";

Tenga en cuenta que enumeré explícitamente los nombres de las columnas en la declaración de insert . No hacer eso se considera un mal estilo de codificación.

Tuve que adivinar esos nombres porque no nos mostraste la definición de tu tabla. Debe reemplazar con los nombres de columna correctos de su tabla.

 PreparedStatement pstmt = connection.prepareStatement(sql); pstmt.setInt(1, Counter.emergencyID); pstmt.setInt(2, emergency.status); pstmt.setString(3, emergency.typeD); pstmt.setInt(4, emergency.typeB); pstmt.setInt(5, emergency.floorID); int i = pstmt.executeUpdate(sql); // run the query

La causa raíz de su problema fue el uso incorrecto de comillas dobles: " . Las constantes de cadena deben ponerse entre comillas simples en SQL. 'foobar' es un valor de cadena. Las comillas dobles se usan para identificadores "foobar" es, por ejemplo, un nombre de columna .


Sin relación, pero: el uso de Counter.emergencyID me permite pensar que está generando (o intentando) identificaciones únicas en su aplicación. No hagas eso. Utilice una columna de secuencia o identidad en la base de datos. Hazlo correctamente desde el principio. Para una aplicación de un solo usuario, esto podría no marcar la diferencia, pero no hay forma de que pueda implementarlo correctamente y escalable en una aplicación que utilizan varios usuarios al mismo tiempo, con transacciones simultáneas insertadas en la misma tabla.

over 4 years ago · Santiago Trujillo Denunciar

0

encontré el error en el código de @a_horse_with_no_name

 PreparedStatement pstmt = connection.prepareStatement(sql); pstmt.setInt(1, Counter.emergencyID); pstmt.setInt(2, emergency.status); pstmt.setString(3, emergency.typeD); pstmt.setInt(4, emergency.typeB); pstmt.setInt(5, emergency.floorID); int i = pstmt.executeUpdate(sql); // run the query

tenga en cuenta la última línea, debe ser

 int i = pstmt.executeUpdate(); // run the query

consulte el mensaje de excepción críptica de HSQLDB: "característica no admitida"

over 4 years ago · Santiago Trujillo Denunciar

0

Sé que la pregunta es antigua, pero me encontré con el mismo problema y encontré una solución sin usar PreparedStatements.

 INSERT INTO TypeA (id) VALUES ("Hello");

falló ( el usuario carece de privilegios o el objeto no se encuentra: Hola ), pero

 INSERT INTO TYPEA (id) VALUES ('Hello');

trabajó. Entonces parece que no se aceptan comillas dobles (ver también http://www.hsqldb.org/doc/1.8/guide/ch09.html#expression-section )

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda