数据库中的HSQLDB INSERT值

时间:2014-07-27 18:10:38

标签: java hsqldb

我在数据库中插入数据时遇到问题...

    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

抱歉,我使用的是不同的数据库...... :(

3 个答案:

答案 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;;

立即使用您的插入查询,它应该可以正常工作。