⑴ java代碼調用存儲過程,有5個參數,最後一個參數是輸出結果,可是怎麼寫都不對,單獨跑存儲過程有結果
CallableStatementproc=null;
con=connectionPool.getConnection();
proc=con.prepareCall("{callset_death_age(?,?)}");
proc.setString(1,XXX);
proc.setInt(2,XXx);
...
proc.execute();
給你找了個示例代碼
⑵ JAVA JPA entitymanager 事物怎麼控制的
你似乎是你的存儲過程配置有問題吧,我們一般是要求在J2EE 中事務應該由應用伺服器中運行的程序或應用伺服器容器來管理而不是資料庫自己,像資料庫中的存儲過程自己可能明確地開啟、提交或回滾事務,那麼這就跟 J2EE 協作產生了沖突,因此我們應該讓存儲過程不要自己管理事務,不能出現明確地開啟事務、提交或回滾事務的操作。
一般池化連接也是默認地 read-committed 事務隔離級別,只看到提交的數據或因為表被鎖定而阻塞,現在你的程序看上去是否執行存儲過程時你確定它的事務已經完成了?你的程序也都正確地處理了異常?要知道在 J2EE 中像 EJB 或 Spring 事務管理之類的對異常有些約定,系統異常將會自動的回滾事務。另外要說的是J2EE 中是不支持嵌套事務的。
⑶ entitymanager怎麼防止sql注入
種JPA部署方式最為簡單,但卻最受限制。例如,不能連接到現有的JDBCDataSource, 並且不支持全局事務。甚至,持久化類的織入(位元組碼轉換)也是特定於提供者的,經常需要在啟動時指定一個特定的JVM代理。
⑷ 怎樣用JPA的EntityManager執行原生sql返回ResultSet-CSDN論壇
試:
[java] view plain
package com.cndatacom.jpa.test;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.Query;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.cndatacom.jpa.entity.User;
/**
* 測試JPA原生SQL查詢
* @author Luxh
*/
public class TestNativeQuery {
EntityManagerFactory emf = null;
@Before
public void before() {
//根據在persistence.xml中配置的persistence-unit name 創建EntityManagerFactory
emf = Persistence.createEntityManagerFactory("myJPA");
}
@After
public void after() {
//關閉EntityManagerFactory
if(null != emf) {
emf.close();
}
}
/**
* 查詢的結果是對象數組的集合
*/
@Test
public void testNativeQuery1() {
EntityManager em = emf.createEntityManager();
//定義SQL
String sql = "SELECT * FROM t_user";
⑸ 關於EntityManager的createNativeQuery,該怎麼處理
Session bean or MD bean對Entity bean的操作(包括所有的query, insert, update, delete操作)都是通過EntityManager實例來完成的。EntityManager是由EJB 容器自動地管理和配置的,不需要用戶自己創建。
那麼Session bean or MD bean如何獲得EntityManager實例呢??
非常簡單,就是通過下列代碼進行依賴注入:
Public class sessionbean1{
@PersistenceContext
EntityManager em;
。。。
}
注意:如果persistence.xml文件中配置了多個。那麼在注入EntityManager對 象時必須指定持久化名稱,通過@PersistenceContext注釋的unitName屬性進行指定,例:
@PersistenceContext(unitName="foshanshop")
EntityManager em;
如果只有一個,不需要明確指定。
請注意:Entity Bean被EntityManager管理時,EntityManager會跟蹤他的狀態改變,在任何決定更新實體Bean的時候便會把發生改變的值同步 到資料庫中(跟hibernate一樣)。但是如果entity Bean從EntityManager分離後,他是不受管理的,EntityManager無法跟蹤他的任何狀態改變。
EntityManager一些常用的API(包含query, insert, update, delete操作)
1)get entity —— find() or getReference()
Person person = em.find(Person.class,1);
當在資料庫中沒有找到記錄時,getReference()和find()是有區別的,find()方法會返回null,而getReference() 方法會拋出javax.persistence.EntityNotFoundException例外,另外getReference()方法不保證 entity Bean已被初始化。如果傳遞進getReference()或find()方法的參數不是實體Bean,都會引發 IllegalArgumentException例外