我有的是下面的表格。
+----+--------+--------+--------+--------+
| id | val1 | val2 | val3 | val4 |
+====+========+========+========+========+
| 1 | data1 | data2 | data3 | data4 |
+----+--------+--------+--------+--------+
现在我用下面的细节触发一个查询,比如说
UPDATE tableName
SET val1='newVal1', val2='data2', val3='data3', val4='data4'
WHERE id=1
注意:这只是同一个查询。实际上,我正在实现来自四个文本字段的编辑。因此,我将使用 JSF 和 Java bean 进行如下操作。
PreparedStatement psmt = conn.prepareStatement("
UPDATE tableName
SET val1=?, val2=?, val3=?, val4=?
WHERE id=1
");
psmt.setString(1, myValue1);
psmt.setString(2, myValue2);
psmt.setString(3, myValue3);
psmt.setString(4, myValue4);
psmt.execute();
我想要的是使用上面的查询,更新哪些列。在上述情况下,val1 列已更新。
基本上我想要这个用于日志目的,我会知道谁做了编辑以及完成了什么编辑。任何想法/建议如何完成这项工作?
注意: 我不想创建任何其他表,如 meewoK 的回答所述。只是使用查询,我想知道更新的列名。
我会用例子来解释我想要什么。
假设 userA 登录到系统中。现在他可以访问用户列表。现在假设他确实为用户 B 进行了编辑。他更改的是用户 B、电子邮件 ID 和全名。 现在在日志中我想要的是两个条目。
=================================================================
whoDid whatDid forWhom whichField whichSection whatTime
=================================================================
userA edit userB emailId User time_whenDid
userA edit userB fullName User time_whenDid
=================================================================
最佳答案
如何运行类似以下查询的内容来创建更新之前的日志条目:
PreparedStatement psmt = conn.prepareStatement("
SELECT CASE WHEN val1 = ?
THEN ''
ELSE 'val1 changed from ' + val1 + ' to ' + ? + '\n'
END CASE +
CASE WHEN val2 = ?
THEN ''
ELSE 'val2 changed from ' + val2 + ' to ' + ? + '\n'
END CASE +
CASE WHEN val3 = ?
THEN ''
ELSE 'val3 changed from ' + val3 + ' to ' + ? + '\n'
END CASE +
CASE WHEN val4 = ?
THEN ''
ELSE 'val4 changed from ' + val4 + ' to ' + ? + '\n'
END CASE AS logentry
FROM tableName
WHERE id=1
");
psmt.setString(1, myValue1);
psmt.setString(2, myValue1);
psmt.setString(3, myValue2);
psmt.setString(4, myValue2);
psmt.setString(5, myValue3);
psmt.setString(6, myValue3);
psmt.setString(7, myValue4);
psmt.setString(8, myValue4);
ResultSet rs = psmt.executeQuery();
String logentry = rs.getString("logentry");
免责声明:这是我的头脑,完全未经测试,因此可能需要一些调整 - 应该足以让你继续。
可能的问题:即使您在更新之前执行查询,两者之间的数据也有可能发生变化。取决于各种因素,这在实践中可能是也可能不是问题,但值得一提。
关于java - 列出所有更新的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16262166/
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru
我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123
我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested
我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog
我想获取模块中定义的所有常量的值:moduleLettersA='apple'.freezeB='boy'.freezeendconstants给了我常量的名字:Letters.constants(false)#=>[:A,:B]如何获取它们的值的数组,即["apple","boy"]? 最佳答案 为了做到这一点,请使用mapLetters.constants(false).map&Letters.method(:const_get)这将返回["a","b"]第二种方式:Letters.constants(false).map{|c
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www
我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht