无法将UUID插入嵌入式数据库[重复]

问题描述 投票:0回答:2

这个问题在这里已有答案:

我一直在尝试将数据从应用程序插入数据库,但总是会得到与UUID号相关的语法错误,该UUID号将是客户的ID,以及表的主键。该列设置为BIGINT,它始终返回。这是代码:

String a = txtNombre.getText();
String b = txtApellido.getText();
String c = txtLetras.getText();
String d = txtFin.getText();
String e = txtMensual.getText();
e = e.replaceAll("[^\\d.]","");
String f = txtfecha.getText(); 
String g = txtdeuda.getText();
g = g.replaceAll("[^\\d.]","");
int c1 = Integer.parseInt(c);
long result = UUID.nameUUIDFromBytes((a+b).getBytes()).getMostSignificantBits();
String x = "" + result + "";
String sbStr = x.substring(0, 6);
sbStr = sbStr.replaceAll("[^\\d.]","");
long csId = Long.parseLong(sbStr);
JOptionPane.showInternalMessageDialog(dskPane, "Cliente Ingresado con id#" + csId, "Cliente a Base de"
            + "Datos", 1, null);
connectMyDB con = new connectMyDB();
Statement state = null;

try {
    Connection charlie = con.connect();
    state = charlie.createStatement();
    String insert = "insert into APP.CLIENTES("+csId+",'"+a+"',"
                     + "'"+b+"',"+c1+","+d+","+e+",'"+f+"',"+g+")";
    state.executeUpdate(insert);
    System.out.println(insert);
    if(state!=null) { 
        state.close();
        charlie.close();
    }
} catch(SQLException ex) { 
    System.out.print(ex);
}

我总是得到sql.SQLSyntaxErrorException: Syntax error: Encountered "61297" at line 1, column 26。有没有办法避免这种情况?

java jdbc
2个回答
0
投票

问题很可能是你的csId,作为一个Long,没有在内部表示,使它与sql的bigInt兼容。即使它们都代表“一个非常大的整数”,但它们并不是“引擎盖下”的同一个东西。

通常的解决方案是将uuid保存为javascript中的字符串,只要它只包含数字且大小正确,它就应该能够插入bigint字段而不会出现问题。


1
投票

插入SQL命令的正确方法之一是:insert into tables values (val1, val2, ...)

此外,您必须使用PreparedStatement来防止SQL注入。

© www.soinside.com 2019 - 2024. All rights reserved.