gpt4 book ai didi

java - 在 HSQLDB 中插入字符串

转载 作者:行者123 更新时间:2023-11-29 07:30:22 28 4
gpt4 key购买 nike

我尝试将一个字符串插入到一个 hsqldb 中,它给了我这个错误:

 > 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)

列设置为 VARCHAR(50) 并且 sqlstring 是这样构建的:

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

这就是我执行查询的方式:

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

PS:我知道我对这样的 sqlInjection 持开放态度。

编辑:值是

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

如果我将字符串更改为 ;

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

出现同样的错误

最佳答案

使用PreparedStatement,你不会有问题:

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

请注意,我在 insert 语句中明确列出了列名。不这样做被认为是糟糕的编码风格。

我不得不猜测那些名字,因为你没有向我们展示你的表的定义。您必须用表格的正确列名替换。

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

问题的根本原因是双引号的使用不正确:"。在 SQL 中,字符串常量必须放在单引号中。'foobar' 是一个字符串值。双引号用于标识符 "foobar" 是例如列名。


不相关,但是:Counter.emergencyID 的使用让我认为您正在您的应用程序中生成(或尝试生成)唯一 ID。不要那样做。使用数据库中的序列或标识列。从一开始就正确地做。对于单个用户应用程序,这可能没有什么不同,但是您无法在多个用户同时使用的应用程序中正确实现可伸缩性,并发事务插入同一张 table 。

关于java - 在 HSQLDB 中插入字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43683747/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com