事务未回滚Java Android Sql
*我正在尝试一个接一个地运行三个异步任务。 彼此依赖。 如果任务中的任何一个出现异常,则应回滚所有三个任务。 这是以前的职位。 但是只有得到异常的任务才被回滚,而不是其他任务 我的代码在下面事务未回滚Java Android Sql,java,android,sql,Java,Android,Sql,*我正在尝试一个接一个地运行三个异步任务。 彼此依赖。 如果任务中的任何一个出现异常,则应回滚所有三个任务。 这是以前的职位。 但是只有得到异常的任务才被回滚,而不是其他任务 我的代码在下面 public static int executeOrder() { int mOrderId=-1; Connection conn = null; JtdsCallableStatement jtdsproc = null; ResultSe
public static int executeOrder() {
int mOrderId=-1;
Connection conn = null;
JtdsCallableStatement jtdsproc = null;
ResultSet orderResult = null;
try {
conn = ConnectionProvider.getConnection();
jtdsproc = (JtdsCallableStatement) conn
.prepareCall("{call SaveOrder(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)}");
jtdsproc.setInt(1, SqlOrderQueries.getORDERID());
jtdsproc.setInt(2, SqlOrderQueries.getPOSID());
jtdsproc.setInt(3, SqlOrderQueries.getEMP_CASH_ID());
jtdsproc.setInt(4, SqlOrderQueries.getCUST_ID());
jtdsproc.setInt(5, SqlOrderQueries.getTRANSTYPE());
jtdsproc.setString(6, ""+SqlOrderQueries.getMDEBIT());
jtdsproc.setString(7, ""+SqlOrderQueries.getADEBIT());
jtdsproc.setString(8, ""+SqlOrderQueries.getMCREDIT());
jtdsproc.setString(9, ""+SqlOrderQueries.getACREDIT());
jtdsproc.setString(10, ""+SqlOrderQueries.getBCREDIT());
jtdsproc.setInt(11, SqlOrderQueries.getMEALPLANID());
jtdsproc.setInt(12, SqlOrderQueries.getCASHRESULTID());
jtdsproc.setInt(13, SqlOrderQueries.getLUNCHTYPE());
jtdsproc.setInt(14, SqlOrderQueries.getSCHOOL_ID());
jtdsproc.setString(15, SqlOrderQueries.getORDERDATE());
jtdsproc.setInt(16, SqlOrderQueries.getCREDITAUTH());
if(SqlOrderQueries.getCHECKNUM()== -1)
{
jtdsproc.setNull(17, Types.INTEGER);
}else{
jtdsproc.setInt(17, SqlOrderQueries.getCHECKNUM());
}
jtdsproc.setInt(18, SqlOrderQueries.getOVERRIDE());
jtdsproc.setInt(19, SqlOrderQueries.getVOID());
jtdsproc.setInt(20, SqlOrderQueries.getORDLOG_ID());
jtdsproc.setString(21, SqlOrderQueries.getORDLOGNOTE());
orderResult = jtdsproc.executeQuery();
while (orderResult.next()) {
mOrderId=orderResult.getInt(1);
Log.w("Data For Sales Handler: OrderId",
"$--" + orderResult.getInt(1));
Log.w("Data For Sales Handler OrderIdLog:",
"$--" + orderResult.getInt(2));
Log.w("Data For Sales Handler Customerid:",
"$--" + orderResult.getInt(3));
Log.w("Data For Sales Handler Abalance:",
"$--" + orderResult.getFloat(4));
Log.w("Data For Sales Handler Mbalance:",
"$--" + orderResult.getFloat(5));
Log.w("Data For Sales Handler Bonacebalance:", "$--"
+ orderResult.getFloat(6));
Log.w("Data For Sales Handler Error:",
"$--" + orderResult.getString(7));
}
} catch (Exception ee) {
try {
conn.rollback();
} catch (SQLException e) {
e.printStackTrace();
}
ee.printStackTrace();
return mOrderId = Utilities.NETWORK_ERROR;
}
return mOrderId;
}
public static boolean insertItem(int mOrderid, ArrayList<Integer> itemsIds,
ArrayList<Integer> menuItemIds, ArrayList<Integer> itemsQuantity,
ArrayList<Integer> itemsSoldType, ArrayList<Float> itemsPrice) {
boolean insertStatus = false;
Connection conn = ConnectionProvider.getConnection();
PreparedStatement pStmt = null;
String insertString = "insert into items values (?,?,?,?,?,?,?,?,?,?)";
try {
conn.setAutoCommit(false);
pStmt = conn.prepareStatement(insertString);
for(int i=0;i<itemsIds.size();)
{
pStmt.setInt(1, itemsIds.get(i));
pStmt.setInt(2, mOrderid);
pStmt.setInt(3, menuItemIds.get(i));
pStmt.setInt(4, itemsQuantity.get(i));
pStmt.setString(5, ""+itemsPrice.get(i));
pStmt.setString(6, ""+itemsPrice.get(i));
pStmt.setString(7, ""+1.00);
pStmt.setInt(8, 0);
pStmt.setInt(9, itemsSoldType.get(i));
pStmt.setNull(10, Types.NULL);
int a = pStmt.executeUpdate();
Log.d("no of row affected for insert", "" + a);
i++;
}
insertStatus = true;
} catch (Exception ee) {
ee.printStackTrace();
if (conn != null) {
try {
System.err.print("Transaction is being rolled back");
conn.rollback();
} catch (SQLException excep) {
excep.printStackTrace();
}
}
insertStatus=false;
} finally {
try {
pStmt.close();
conn.setAutoCommit(true);
} catch (SQLException eee) {
eee.printStackTrace();
}
}
return insertStatus;
}
public static ArrayList<Integer> getNewItemId(int totalItems) {
Connection conn = ConnectionProvider.getConnection();
JtdsCallableStatement jtdsproc = null;
ArrayList<Integer> itemsIds = new ArrayList<Integer>();
for (int i = 0; i < totalItems; i++) {
try {
jtdsproc = (JtdsCallableStatement) conn
.prepareCall("{call FASTINDEXGEN(1,1,0)}");
ResultSet rs = jtdsproc.executeQuery();
while (rs.next()) {
Log.d("Value", "" + rs.getInt(1));
itemsIds.add(rs.getInt(1));
}
} catch (Exception ee) {
ee.printStackTrace();
if (conn != null) {
try {
System.err.print("Transaction is being rolled back");
conn.rollback();
} catch (SQLException excep) {
excep.printStackTrace();
}
}
itemsIds=null;
}
}
return itemsIds;
}*
public void completeOrder(InputBean input){
setNO_PaYMENT(false);
SqlOrderQueries.setPOSID(((HomeActivity)mActivity).mSessionManager.getPosId());
SqlOrderQueries.setEMP_CASH_ID(((HomeActivity)mActivity).mSessionManager.getCustomerId());
/*Customer id will be different for student and guest cash sale*/
SqlOrderQueries.setCUST_ID(input.getCustomer_id());
SqlOrderQueries.setTRANSTYPE(getTransType());
SqlOrderQueries.setMDEBIT(input.getmDebit());
SqlOrderQueries.setADEBIT(input.getaDebit());
SqlOrderQueries.setMCREDIT(input.getmCredit());
SqlOrderQueries.setACREDIT(input.getaCredit());
SqlOrderQueries.setBCREDIT(""+0.00);
/*Do not need to change the meal plan id ,it is default by default*/
SqlOrderQueries.setCASHRESULTID(((HomeActivity)mActivity).mSessionManager.getCashColumnId());
SqlOrderQueries.setLUNCHTYPE(DetailsFragment.getLUNCH_TYPE());
SqlOrderQueries.setSCHOOL_ID(((HomeActivity)mActivity).mSessionManager.getSchoolId());
SqlOrderQueries.setORDERDATE(getDate());
/*Credit auth is passed default for the time being*/
SqlOrderQueries.setCHECKNUM(input.getCheckNumber());
/*override is passed 0 for the time being*/
/*void ordlog_id ordlognote are 0 ,default ,default respectfully*/
new AsyncTask<Void, Void, Integer>() {
@Override
protected Integer doInBackground(Void... params) {
if(ConnectionProvider.checkConnection()==false){
return null;
}
return OrderSalesHandler.executeOrder();
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
if(result == Utilities.NETWORK_ERROR)
{
AlertDialog.Builder mEAlert = new AlertDialog.Builder(mActivity);
mEAlert.setMessage("Network Problem");
mEAlert.create().show();
}
if(result>0){
mItemshandler.onSucessOrder(result);
}
}
}.execute();
}
@Override
public void onSucessOrder(int orderId) {
mOrderid=orderId;
new AsyncTask<Void, Void, ArrayList<Integer>>(){
@Override
protected ArrayList<Integer> doInBackground(Void... params) {
if(ConnectionProvider.checkConnection()==false){
return null;
}
return OrderSalesHandler.getNewItemId(mTotalItems);
}
@Override
protected void onPostExecute(ArrayList<Integer> result) {
super.onPostExecute(result);
if(result==null)
{
AlertDialog.Builder mEAlert = new AlertDialog.Builder(mActivity);
mEAlert.setMessage("Network Problem and Order not Completed");
mEAlert.create().show();
}else{
mItemshandler.onSucessItemId(result);
}
}
}.execute();
}
@Override
public void onSucessItemId(ArrayList<Integer> itemIds) {
itemsIds=itemIds;
new AsyncTask<Void, Void, Boolean>(){
@Override
protected Boolean doInBackground(Void... params) {
if(ConnectionProvider.checkConnection()==false)
{
return false;
}
return OrderSalesHandler.insertItem(mOrderid,itemsIds,menuItemIds,itemsQuantity,itemsSoldType,itemsPrice);
}
@Override
protected void onPostExecute(Boolean result) {
super.onPostExecute(result);
if(result==true){
if(isNO_PaYMENT()==false){
((HomeActivity)mActivity).mSalesFragment.mPaymentDialog.dismiss();
}
((HomeActivity)mActivity).mSalesFragment.onClick(((HomeActivity)mActivity).mSalesFragment.mCancelButton);
}
if(result==false){
AlertDialog.Builder mEAlert = new AlertDialog.Builder(mActivity);
mEAlert.setMessage("Network Problem and Order Not Completed");
mEAlert.create().show();
}
}
}.execute();
}
public static boolean isNO_PaYMENT() {
return NO_PaYMENT;
}
public static void setNO_PaYMENT(boolean nO_PaYMENT) {
NO_PaYMENT = nO_PaYMENT;
}
public static int executeOrder(){
int-mOrderId=-1;
连接conn=null;
JtdsCallableStatement jtdsproc=null;
ResultSet orderResult=null;
试一试{
conn=ConnectionProvider.getConnection();
jtdsproc=(JtdsCallableStatement)连接
.prepareCall({调用存储顺序(?,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,)});
jtdsproc.setInt(1,sqlorderquerys.getORDERID());
setInt(2,sqlorderquerys.getPOSID());
jtdsproc.setInt(3,sqlorderquerys.getEMP_CASH_ID());
jtdsproc.setInt(4,sqlorderquerys.getCUST_ID());
jtdsproc.setInt(5,sqlorderquerys.getTRANSTYPE());
jtdsproc.setString(6,“+sqlorderquerys.getMDEBIT());
jtdsproc.setString(7,“+sqlorderquerys.getADEBIT());
jtdsproc.setString(8,“+sqlorderquerys.getMCREDIT());
jtdsproc.setString(9,“+sqlorderquerys.getACREDIT());
jtdsproc.setString(10,“+sqlorderquerys.getBCREDIT());
jtdsproc.setInt(11,sqlorderquerys.getMEALPLANID());
jtdsproc.setInt(12,sqlorderquerys.getcashfresultid());
jtdsproc.setInt(13,sqlorderquerys.get午餐类型());
jtdsproc.setInt(14,sqlorderquerys.getSCHOOL_ID());
jtdsproc.setString(15,SqlOrderQueries.getORDERDATE());
jtdsproc.setInt(16,sqlorderquerys.getCREDITAUTH());
if(sqlorderquerys.getCHECKNUM()=-1)
{
jtdsproc.setNull(17,Types.INTEGER);
}否则{
jtdsproc.setInt(17,sqlorderquerys.getCHECKNUM());
}
setInt(18,sqlorderquerys.getOVERRIDE());
jtdsproc.setInt(19,sqlorderquerys.getVOID());
jtdsproc.setInt(20,sqlorderquerys.getORDLOG_ID());
jtdsproc.setString(21,sqlorderquerys.getORDLOGNOTE());
orderResult=jtdsproc.executeQuery();
while(orderResult.next()){
mOrderId=orderResult.getInt(1);
Log.w(“销售处理程序的数据:OrderId”,
“$--”+orderResult.getInt(1));
Log.w(“销售处理程序OrderIdLog的数据:”,
“$--”+orderResult.getInt(2));
Log.w(“销售处理程序客户ID的数据:”,
“$--”+orderResult.getInt(3));
Log.w(“销售处理程序平衡数据:”,
“$--”+orderResult.getFloat(4));
Log.w(“销售人员的数据:”,
“$--”+orderResult.getFloat(5));
Log.w(“销售处理程序Bonacebalance的数据:,”$--”
+getFloat(6));
Log.w(“销售处理程序数据错误:”,
“$--”+orderResult.getString(7));
}
}捕获(异常ee){
试一试{
连接回滚();
}捕获(SQLE异常){
e、 printStackTrace();
}
ee.printStackTrace();
return mOrderId=Utilities.NETWORK\u错误;
}
返回莫德里德;
}
公共静态布尔插入项(int-mOrderid,ArrayList-itemsid,
ArrayList MenuItemId、ArrayList itemsQuantity、,
ArrayList itemsSoldType,ArrayList itemsPrice){
布尔insertStatus=false;
Connection conn=ConnectionProvider.getConnection();
PreparedStatement pStmt=null;
String insertString=“插入项目值(?,,,,,,,,,,,,,,?)”;
试一试{
连接设置自动提交(错误);
pStmt=连接准备状态(插入字符串);
对于(int i=0;i0){
mItemshandler.onSucessOrder(结果);
}
}
}.execute();
}
@凌驾
用户订单上的公共无效(int orderId){
mOrderid=orderId;
新建异步任务(){
@凌驾
受保护的ArrayList doInBackground(无效…参数){
if(ConnectionProvider.checkConnection()==false){
返回null;
}
returnOrderSalesHandler.getNewItemId(mTotalItems);
}
@凌驾
受保护的void onPostExecute(ArrayList结果){
super.onPostExecute(结果);
如果(结果==null)
{
AlertDialog.Builder mEAlert=新建AlertDialog.Builder(MacActivity);
mEAlert.setMessage(“网络问题和订单未完成”);
mEAlert.create().show();
}否则{
onSuccessItemId(结果);
}
}
}.execute();
}
@凌驾
公共void onSucesItemId(ArrayList ItemId){
itemsIds=itemIds;
新建异步任务(){
@凌驾
受保护的布尔doInBackground(Void…params){
if(ConnectionProvider.checkConnection()==false)
{
返回false;
}
return OrderSalesHandler.insertItem(mOrderid、ItemsId、MenuItemId、itemsQuantity、itemsSoldType、itemsPrice);
}
@凌驾
受保护的void onPostExecute(布尔结果){
super.onPostExecute(结果);
如果(结果==真){
如果(isNO_PaYMENT()==false){
((HomeActivity)mActivity.mSalesFragment.mPaymentDialog.Disclease();
}
((HomeActivity)mActivity.mSalesFragment.onClick(((HomeActivity)mActivity.mSalesFragment.McCancelButton);
}
如果(结果==false){
AlertDialog.Builder mEAlert=新建AlertDialog.Builder(MacActivity);
mEAlert.setMessage(“网络问题和订单未完成”);
mEAlert.create().show();
}
}
}.execute();
}
公共静态布尔值isNO_PaYMENT(){
不退还任何款项;
}
公共静态无效设置无付款(布尔无付款){
不付款=不付款
public void onSucessOrder(int result);
public void onSucessItemId(ArrayList<Integer> itemsIds);