Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java实现ms-access数据库_Java_Sql_Ms Access - Fatal编程技术网

用java实现ms-access数据库

用java实现ms-access数据库,java,sql,ms-access,Java,Sql,Ms Access,我正在创建一个java程序,用它编辑Microsoft Access数据库。我有一个特定的例子,在这个例子中,我需要搜索我的表中是否已经存在某个记录,如果存在,我想更新它,如果不存在,我想从头开始创建它 我发现了这段代码: IF EXISTS (SELECT * FROM USERS WHERE USERID=@UID) select 1 else select 这段代码给了我一个错误,表示需要SELECT、UPDATE或DELETE语句 在我自己尝试过的代码中,我做了以下工作: try{

我正在创建一个java程序,用它编辑Microsoft Access数据库。我有一个特定的例子,在这个例子中,我需要搜索我的表中是否已经存在某个记录,如果存在,我想更新它,如果不存在,我想从头开始创建它

我发现了这段代码:

IF EXISTS (SELECT * FROM USERS WHERE USERID=@UID) select 1 else select 
这段代码给了我一个错误,表示需要SELECT、UPDATE或DELETE语句

在我自己尝试过的代码中,我做了以下工作:

try{
            s = con.createStatement();
            s.executeQuery("SELECT * FROM table WHERE date='" + today + "'");
            rset = s.getResultSet();    

            if (rset.getString("date") == null){

                s = con.createStatement();     
                s.executeUpdate("INSERT INTO table VALUES ('" + today + "','" + cflow + "','" + vat + "','" + cnn + "')");

            }
        }

        catch (SQLException exp)
        {
            System.err.println(exp);
        }
但是使用此代码,当记录还不存在时,用户输入不会在数据库中更新


谢谢你的时间:)

第一:如果我没记错的话,那就是

IF EXISTS (SELECT * FROM USERS WHERE USERID=@UID) select 1 else select 
不完整的transact-sql语句-由数据库系统中的sql引擎使用

第二:

您应该避免这种情况,因为很有可能会出现Nullpointer异常

在我看来,更好的方法是测试resultset的大小是否为零,或者测试resultset本身的值是否为NULL


如果不执行UPDATE语句,请直接使用数据库引擎Ms Access、SQL Server等检查SELECT语句。优点是您可以排除SELECT查询中的错误。

1st:如果我没记错,那就是

IF EXISTS (SELECT * FROM USERS WHERE USERID=@UID) select 1 else select 
(rset.getString("date") == null)
不完整的transact-sql语句-由数据库系统中的sql引擎使用

第二:

您应该避免这种情况,因为很有可能会出现Nullpointer异常

在我看来,更好的方法是测试resultset的大小是否为零,或者测试resultset本身的值是否为NULL

如果不执行UPDATE语句,请直接使用数据库引擎Ms Access、SQL Server等检查SELECT语句。优点是可以排除SELECT查询中的错误

(rset.getString("date") == null)
应该是

(!rset.next())
rset位于返回的第一个结果之前。如果要获取“下一个”结果,则next()返回true

另外,“日期”变量是什么数据类型?对于MS Access版本的SQL,无法保证date.toString()能够正确格式化日期

相反,准备一份声明

PreparedStatement ps = connetion.prepareStatement("SELECT * from table where date=?");
把日期定在

ps.setDate(1, date);
然后使用准备好的语句发出查询

这样可以避免任何toString()问题。(我还没有编译这个,几乎可以肯定它不会按原样工作,但想法就在那里)

应该是

(!rset.next())
rset位于返回的第一个结果之前。如果要获取“下一个”结果,则next()返回true

另外,“日期”变量是什么数据类型?对于MS Access版本的SQL,无法保证date.toString()能够正确格式化日期

相反,准备一份声明

PreparedStatement ps = connetion.prepareStatement("SELECT * from table where date=?");
把日期定在

ps.setDate(1, date);
然后使用准备好的语句发出查询

这样可以避免任何toString()问题。(我还没有编译这个,几乎可以肯定它不会按原样工作,但想法就在那里)。

这个呢

SELECT IF EXISTS (SELECT * FROM USERS WHERE USERID=@UID) THEN 1 ELSE 0 END

(我不确定这里的真正语法。)

这个呢

SELECT IF EXISTS (SELECT * FROM USERS WHERE USERID=@UID) THEN 1 ELSE 0 END


(我不确定这里的真正语法。)

这里是我用来查找表中最后一个ID的内容。如果表为空,将返回no ID。如果表已填充,则我需要新记录的下一个ID


下面是我用来查找表中最后一个ID的内容。如果表为空,将返回no ID。如果表已填充,则我需要新记录的下一个ID


感谢您的快速回复:)我已经尝试过为null测试resultset,事实上这是它最初的方式,但没有工作。现在我试着将它测试为0,java给了我一个错误,说“java.sql.ResultSet and int”。@Brian Zammit你不应该测试rset是否等于0,你应该测试size/count/他们称之为0或更大,如果size>0,那么数据库中有一行或多行。你为什么不做一个选择计数(…),然后检查你是否从中得到0或其他什么?哦,是的。。我将进一步了解这方面的细节。。谢谢因为我从来没有使用过选择计数,我也不知道如何使用它…我只是找到了一些关于选择计数的更多信息。。实际上,这似乎很容易。。我将尝试一下..我尝试了一下,但是在某些情况下,记录不存在,当我尝试rs.next()时,它会给我一个空指针异常…感谢您的快速回复:)我已经尝试过测试resultset for null,事实上这是它最初的方式,但不起作用。现在我试着将它测试为0,java给了我一个错误,说“java.sql.ResultSet and int”。@Brian Zammit你不应该测试rset是否等于0,你应该测试size/count/他们称之为0或更大,如果size>0,那么数据库中有一行或多行。你为什么不做一个选择计数(…),然后检查你是否从中得到0或其他什么?哦,是的。。我将进一步了解这方面的细节。。谢谢因为我从来没有使用过选择计数,我也不知道如何使用它…我只是找到了一些关于选择计数的更多信息。。实际上,这似乎很容易。。我将尝试一下..我尝试了一下,但是在某些情况下,记录不存在,当我尝试rs.next()时,它会给我一个空指针异常..是的,很好。。我觉得自己像个白痴,以前没有想到这一点。。但是它仍然不起作用-谢谢你的回复是的,很好的观点。。我觉得自己像个白痴,以前没有想到这一点。。但是它仍然不起作用-谢谢你的回复