我在数据库中插入数据时遇到问题...
String query = "INSERT INTO gutscheine (code, Wert) values ("+Code+","+Wert+")";
SQLConnection sql = new SQLConnection("Gutscheine.db");
PreparedStatement ps;
try {
ps = sql.con.prepareStatement(query);
int i = ps.executeUpdate();
if (i == -1) {
System.out.println("db error : " + query);
}
} catch (SQLException e) {
e.printStackTrace();
}
sql.CloseConnection(); // my own funktion
我的错误:
java.sql.SQLSyntaxErrorException: user lacks privilege or object not found: GUTSCHEINE
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCUtil.sqlException(Unknown Source)
at org.hsqldb.jdbc.JDBCPreparedStatement.<init>(Unknown Source)
at org.hsqldb.jdbc.JDBCConnection.prepareStatement(Unknown Source)
at com.daniel.guthaben.Gutschein.<init>(Gutschein.java:33)
at com.daniel.guthaben.Main.main(Main.java:7)
Caused by: org.hsqldb.HsqlException: user lacks privilege or object not found: GUTSCHEINE
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.error.Error.error(Unknown Source)
at org.hsqldb.SchemaManager.getTable(Unknown Source)
at org.hsqldb.ParserDQL.readTableName(Unknown Source)
at org.hsqldb.ParserDQL.readRangeVariableForDataChange(Unknown Source)
at org.hsqldb.ParserDML.compileInsertStatement(Unknown Source)
at org.hsqldb.ParserCommand.compilePart(Unknown Source)
at org.hsqldb.ParserCommand.compileStatement(Unknown Source)
at org.hsqldb.Session.compileStatement(Unknown Source)
at org.hsqldb.StatementManager.compile(Unknown Source)
at org.hsqldb.Session.execute(Unknown Source)
... 4 more
这里我尝试从root用户添加上下文...(在左侧,您可以看到该表存在) http://i.stack.imgur.com/FS5ws.png
抱歉,我使用的是不同的数据库...... :(
答案 0 :(得分:1)
通常不建议您使用字符串构建进行查询。 String query = "INSERT INTO gutscheine (code, Wert) values (?, ?)";
然后通过安全查询准备运行它会更好。
那说,错误听起来很明显? user lacks privilege or object not found: GUTSCHEINE
。看起来您不是从代码中作为特定用户进行连接,因此我怀疑您在设置数据库连接时忘记传递用户名和密码。如果该部分没问题,请验证Gutscheine.db是否存在。
答案 1 :(得分:0)
即使hsql非常宽容且不需要基础设施,您需要预先创建表格 - 例如
CREATE TABLE Gutscheine ( code varchar 20, Wert varchar 20 )
此外,您可能希望阅读有关SQL注入的信息并使用PreparedStatement。当你在它的时候,google为“小小的桌子”
我还没有遇到过hsql的权限问题,但您可能想检查一下如何打开连接,例如如果您提供适当的用户帐户。您可以通过查看hsql存储(实际上是明文)来检查正确的存储。它应包含所需的用户名 - 例如“SA”
此外,在google上出现该错误消息时,会出现几个线程,表明hsql版本升级可能有所帮助,或者您在未执行“SHUTDOWN”后最终导致损坏的数据库在创建数据库之后。另一个是.script文件中的数据库名称“null”。好吧,自己检查它们并尝试哪种解决方案符合您的问题(两个链接的线程指向几种可能的解决方案):
答案 2 :(得分:0)
这里的问题很简单。插入字符串值时,需要将它们用单引号括起来。 例如,&#34;插入表格(col1,col2)值(&#39; ABC&#39;,&#39; xyz&#39;);&#34;
查看此链接中提供的示例:
https://www.tutorialspoint.com/hsqldb/hsqldb_insert_query.htm
在您的情况下,您需要在插入之前或插入时将Code和Wert的值括在单引号中。 以下方法对我有用:
代码=&#34;&#39;&#34; +代码+&#34;&#39;&#34;;
Wert =&#34;&#39;&#34; + Wert +&#34;&#39;&#34;;
立即使用您的插入查询,它应该可以正常工作。