这样用PreparedStatement 是否是线程安全的?

问题描述

private int insertOrUpdate(String sql, Object[] params) {Connection conn = getConection();PreparedStatement pstmt = null;int i = 0;try {boolean ac = conn.getAutoCommit();if (ac) {conn.setAutoCommit(false);}pstmt = conn.prepareStatement(sql);for (int j = 0; j < params.length; j++) {pstmt.setObject(j + 1, params[j]);}i = pstmt.executeUpdate();if (null == tb.get() || !tb.get()) {conn.commit();}} catch (SQLException e) {try {conn.rollback();} catch (SQLException e1) {e.printStackTrace();}e.printStackTrace();} finally {close(pstmt);if (null == tb.get() || !tb.get()) {close(conn);//System.out.println("close connection!");}}return i;}此方法是一个单例类的方法 这个方法中Connection 已经用ThreadLocal改造成安全的了,想问一下这个方法中PreparedStatement pstmt 是否是安全的?

解决方案

是安全的

时间: 2024-08-06 02:36:26

这样用PreparedStatement 是否是线程安全的?的相关文章

Statement和PreparedStatement的区别; 什么是SQL注入,怎么防止SQL注入? (转)

  问题一:Statement和PreparedStatement的区别 先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.具体步骤: 1.首先导入java.sql.*:这个包. 2.然后加载驱动,创建连接,得到Connection接口的的实现对象,比如对象名叫做conn. 3.然后再用conn对象去创建Statement的实例,方法是:Statement stmt = co

java-生产环境线程阻塞dump

问题描述 生产环境线程阻塞dump 各位大神,帮忙分析一下异常dump,生产环境用户量增多的时候就会出现线程阻塞,导致服务器性能变慢,测试环境做压力测试没有重现,让DBA看了一下DB也没有发现异常会话.高频sql或者是性能较差的sql.数据等待等 DUMP如下: "[STUCK] ExecuteThread: '40' for queue: 'weblogic.kernel.Default (self-tuning)'" id=54 idx=0xf0 tid=160959 prio=1

JDBC一个connection下多线程查询表数据会产生线程等待

问题描述 JDBC一个connection下多线程查询表数据会产生线程等待 案例: 从Oracle数据库将表及数据通过JDBC的方式采集到另一Oracle数据库,数据量均为千万级,从源数据库读取的时候采用ORACLE的ROWNUM分页方式,JDBC每次读取1000条,批量插入目标库,测试发现ORACLE的ROWNUM分页效率很是问题,越到后面越慢,WEBLOGIC后台甚至出现线程请求超时. 后来采用多线程的方式,创建一个连接,后台起100个线程,测试发现跟单线程的效率差不了多少,分析代码后,线程

请教:java 线程中队数据库进行操作,程序返回值显示成功,单实际未成功

问题描述 问题描述:近些天公司要让我完成一个导数的模块.我写了一个导数的类AssetImpThread 实现了 Runnable接口.类有一个 初始化方法 init() 调用了 一个利用 jndi连接对数据进行操作的类.我已经 对 进行数据库操作的类进行了测试(main方法中 建立一个jndi的连接),数据库操作类正常运行.然后我对线程进行测试,奇怪的事情发生了,测试类的main() 方法中建立数据库连接, 启动线程,调用线程的init()方法,对数据进行操作.利用 PreparedStatem

连接池里缓存PreparedStatement有什么用???

问题描述 一个sql会在db端解析成(sql,parseTree)这种hash结构,然后下次该sql就可以从db端的缓存中取得parseTree,从而省去了查错,解析等过程.但问题是为什么要在server端缓存这个PreparedStatement对象呢.有几个问题不解:1.PreparedStatement属于Connection,如果线程A归还Connection后,线程B拿到该Connection,PreparedStatement缓存是否被清空??2.如果db端(sql,parseTre

新人一枚,请问怎样从B线程调用A线程的内容?

问题描述 新人一枚,请问怎样从B线程调用A线程的内容? 具体要求:写一个线程A,得到0-10的随机数,再写一个线程B来了调用线程A!!!!! 解决方案 int a;//全局变量,如果多个线程同步访问需要加锁 A...//线程A B...//线程B 代码结构大致如上,访问的时候,因为变量a是全局数据,所以在线程A和B中都可以直接访问,就好像C中的任何函数都可以访问和使用全局变量一样 解决方案二: 放是全局变量来交换数据

并发集合(三)使用阻塞线程安全的列表

使用阻塞线程安全的列表 列表(list)是最基本的集合.一个列表中的元素数量是不确定的,并且你可以添加.读取和删除任意位置上的元素.并发列表允许不同的线程在同一时刻对列表里的元素进行添加或删除,而不会产生任何数据不一致的问题. 在这个指南中,你将学习如何在你的并发应用程序中使用阻塞的列表.阻塞列表与非阻塞列表的主要区别是,阻塞列表有添加和删除元素的方法,如果由于列表已满或为空而导致这些操作不能立即进行,它们将阻塞调用的线程,直到这些操作可以进行.Java包含实现阻塞列表的LinkedBlocki

[转载]Linux 线程实现机制分析

  自从多线程编程的概念出现在 Linux 中以来,Linux 多线应用的发展总是与两个问题脱不开干系:兼容性.效率.本文从线程模型入手,通过分析目前 Linux 平台上最流行的 LinuxThreads 线程库的实现及其不足,描述了 Linux 社区是如何看待和解决兼容性和效率这两个问题的.   一.基础知识:线程和进程 按照教科书上的定义,进程是资源管理的最小单位,线程是程序执行的最小单位.在操作系统设计上,从进程演化出线程,最主要的目的就是更好的支持SMP以及减小(进程/线程)上下文切换开

你真的了解:IIS连接数、IIS并发连接数、IIS最大并发工作线程数、应用程序池的队列长度、应用程序池的最大工作进程数 吗?

原文:你真的了解:IIS连接数.IIS并发连接数.IIS最大并发工作线程数.应用程序池的队列长度.应用程序池的最大工作进程数 吗? IIS连接数   一般购买过虚拟主机的朋友都熟悉购买时,会限制IIS连接数,这边先从普通不懂代码用户角度理解IIS连接数 顾名思义即为IIS服务器可以同时容纳客户请求的最高连接数,准确的说应该叫"IIS限制连接数" 这边客户请求的连接内容包括: 1.网站html请求,html中的图片资源,html中的脚本资源,其他需要连接下载的资源等等,任何一个资源的请求