当前位置: 首页 > news >正文

淄博网站制作公司深圳企业网站建设服务公司

淄博网站制作公司,深圳企业网站建设服务公司,电商设计师联盟网站,贵州网站制作设计公司jdbc查询序列也许我们每个人在程序员的生活中至少遇到过一次这个问题- 如何模拟数据库序列#xff1f; 在下面#xff0c;您可能会发现我对该问题解决方案的各种了解。 假设我们有一个接口定义了所需的API#xff0c;用于返回整数序列#xff1a; public interface Sequen… jdbc查询序列 也许我们每个人在程序员的生活中至少遇到过一次这个问题- 如何模拟数据库序列 在下面您可能会发现我对该问题解决方案的各种了解。 假设我们有一个接口定义了所需的API用于返回整数序列 public interface Sequences { int nextValue(String sequenceName) throws SQLException; } 并以以下形式实现此API class SequencesService implements Sequences { private static final String SQL_QUERY SELECT SEQ_NAME, SEQ_VALUE FROM SEQUENCE WHERE SEQ_NAME ? FOR UPDATE ; private final DataSource dataSource; SequencesService( final DataSource dataSource) { this .dataSource dataSource; } Override public int nextValue( final String sequenceName) throws SQLException { final long threadId Thread.currentThread().getId(); try ( final Connection connection dataSource.getConnection()) { connection.setAutoCommit( false ); try ( final PreparedStatement statement connection.prepareStatement( SQL_QUERY, TYPE_SCROLL_SENSITIVE, CONCUR_UPDATABLE)) { statement.setString( 1 , sequenceName); try ( final ResultSet resultSet statement.executeQuery()) { System.out.println( String.format( [%d] - select for update , threadId)); int nextValue 1 ; if (resultSet.next()) { nextValue 1 resultSet.getInt( 2 ); resultSet.updateInt( 2 , nextValue); resultSet.updateRow(); } else { resultSet.moveToInsertRow(); resultSet.updateString( 1 , sequenceName); resultSet.updateInt( 2 , nextValue); resultSet.insertRow(); } System.out.println( String.format( [%d] - next val: %d , threadId, nextValue)); return nextValue; } } finally { System.out.println(String.format( [%d] - commit , threadId)); [%d] - commit , threadId)); connection.commit(); } } } } 您必须原谅我两件事 –我添加println的用法是为了生成一些视觉反馈并且缺少详细的解释说明此解决方案的工作原理我只想提一下线索是准备好的语句的处理方式创建并处理结果集updateRow / moveToInsertRow / insertRow用法有关详细信息请参见本文底部的链接。 我编写了简单的测试用例来观察和验证此代码例如 Autowired private Sequences sequences; private CallableInteger callable() { return () - { System.out.println(String.format( [%d] - starting , Thread.currentThread().getId())); [%d] - starting , Thread.currentThread().getId())); return sequences.nextValue( My Sequence ); }; } Test public void test() throws Exception { final ExecutorService executor Executors.newFixedThreadPool( 3 ); final CompletionServiceInteger completion new ExecutorCompletionService(executor); for ( int i 0 ; i 3 ; i) { completion.submit(callable()); }     for ( int completed 1 ; completed 3 ; completed) { final FutureInteger result completion.take(); System.out.println(String.format( Result %d - %d , completed, result.get())); assertEquals(Integer.valueOf(completed), result.get()); } } 运行上述代码时输​​出将如下所示括号中为线程的ID [16] –开始 [18] –开始 [17] –开始 [17] –选择要更新 [17] –下一个值1 [17] –提交 [18] –选择要更新 结果1-1 [18] –下一个值2 [18] –提交 [16] –选择要更新 [16] –下一个值3 [16] –提交 结果2 – 2 结果3 – 3 这段代码仅用于演示目的) –如果您想在项目中做类似的事情则可能更愿意将其用于ex。 Spring Framework的Transactional批注而不是手动的事务处理甚至JPA都将这项工作委托给JDBC。 例如在Hibernate中您可以这样进行操作 import org.hibernate.Session; ... entityManager.unwrap(Session. class ) .doReturningWork(connection - { ... code derived from my example ... }); 甜点的几个链接 更新ResultSet对象JDBC中的行 在ResultSet对象JDBC中插入行 声明式事务管理和使用Transactional Spring Framework ReturningWorkJPAHibernate …我差点忘了;– GitHub存储库保存了我所有的这篇文章的代码经验 翻译自: https://www.javacodegeeks.com/2019/08/jdbc-emulating-sequence.htmljdbc查询序列
http://wiki.neutronadmin.com/news/298765/

相关文章:

  • 网站建设需要学习哪些wordpress主题汉化版
  • 公司多个门户是做二级域名还是做多个网站百度站长官网
  • 长沙网站制作平台公司网站建设存在问题
  • 站长工具传媒手机公众平台网站开发
  • 昌平区手机网站制作服务深圳盐田建设交易中心网站
  • 做网站的服务器多少钱北京西站列车时刻表最新
  • 广西麒铭建设有限公司网站教做美食的网站
  • 网站管理助手4.0html音乐网页完整代码
  • 邢台网站制作的地方连云港seo优化
  • 西宁市网站设计企业西安网站制作服务商
  • 如何创建免费网站做谷歌seo要发大量文章吗
  • 建一个下载网站要什么cms系统怎么用.net做网站
  • 招聘网站建设人员用wordpress招商
  • 二手汽车手机网站模板网站建设商城模板下载
  • 让别人做网站多久开始注册域名万网张向东有多少资产
  • 视频手机网站开发黄石建网站
  • 网页和网站有什么区别做网站导航按钮怎么做
  • 东营做网站哪里好大连网站排名系统
  • vue 做的网站系统开发软件
  • 越秀微网站建设光棍天堂手机2019版免费观看
  • 公司网站建设素材中细软做的网站
  • 怎样在手机上做自己的网站网店美工课程
  • wordpress 空间商seo是什么职业合法吗
  • 做网站购买备案域名网站 建设运行情况报告
  • 找人做海报在什么网站找免费的ui设计的网站
  • 做网站免费搭建温州网站建设制作
  • 如何规划设计一个网站ueditor编辑器wordpress
  • 网站开发小图标怎么设置seo优化中商品权重主要由什么决定
  • 网站建设柒首先金手指1有经验的常州网站建设
  • 查网站的建站系统商家管理系统