當前位置:首頁 » 數據倉庫 » 非同步資料庫提交
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

非同步資料庫提交

發布時間: 2022-05-07 11:30:42

Ⅰ 利用Ajax發送非同步請求訪問sql資料庫如何實現,請高手指點,跪求幫助。

分兩步:現在後台寫資料庫訪問,然後再在JSP中寫Ajax調用
$.ajax({url: '<s:url action="#" namespace="/#"/>?param=#',
type: 'GET',
dataType: 'json',
timeout: 10000,
error: function(){

},
success: function(val){
if (val.success){

}else
alert(val.reason);
}
});

Ⅱ JQuery 非同步提交表單 數據插入資料庫出錯 拋出異常後用alert彈出出友好提示怎麼做

在後台捕獲異常,如果你是用的MVC的話,然後再返回一個json錯誤頁面,錯誤頁面的內容是
{success:false;message:"後台出錯!"}

對應的前台就可以這樣寫
success: function(data){
if(data.success){
alert(「成功!");
}else{
alert(data.message);
}
關鍵是你通過ajax調用的頁面最終返回json,而且該json內容包含可判斷的信息。

Ⅲ 什麼是Jquery+Ajax的非同步提交

什麼是AJAX非同步提交

傳統的web中,用戶觸發一個事件(比如點擊一個按鈕),伺服器做出回應,返回一個HTML頁面給用戶。

好比當當(其實現在當當的搜索也已經實現了AJAX非同步提交),你在輸入一本書的名字,點擊搜索按鈕後,伺服器返回一個該書名的頁面給用戶

最先實現AJAX非同步提交的當屬各種搜索引擎,當你在搜索輸入框中輸入某個關鍵字,例如JAVA,還沒有點擊搜索按鈕時,搜索引擎已經就返回給你了許多結果,比如JAVA學習,JAVA論壇等等

同樣的例子還體現在一些注冊頁面上,輸入某個用戶名之後,不用點擊該用戶名是否被使用按鈕(這個按鈕根本就不會出現),頁面在你輸入完成後(我猜是在切換到下一個輸入框後),就會提示該用戶名能不能被使用

Ⅳ 如何用js向資料庫提交數據

JS只能控制提交到伺服器,寫入資料庫是伺服器端代碼乾的事,具體怎麼寫入資料庫要看你伺服器端運行的是.net還是j2ee或asp或php了

Ⅳ 如何判斷資料庫事務成功提交

實現方案
使用在事務提交之後操作
public void insert(TechBook techBook){
bookMapper.insert(techBook);
// send after tx commit but is async
.registerSynchronization(new () {
@Override
public void afterCommit() {
System.out.println("send email after transaction commit...");
}
}
);
ThreadLocalRandom random = ThreadLocalRandom.current();
if(random.nextInt() % 2 ==0){
throw new RuntimeException("test email transaction");
}
System.out.println("service end");
}

該方法就可以實現在事務提交之後進行操作
操作非同步化
使用mq或線程池來進行非同步,比如使用線程池:
private final ExecutorService executorService = Executors.newFixedThreadPool(5);
public void insert(TechBook techBook){
bookMapper.insert(techBook);

// send after tx commit but is async
.registerSynchronization(new () {
@Override
public void afterCommit() {
executorService.submit(new Runnable() {
@Override
public void run() {
System.out.println("send email after transaction commit...");
try {
Thread.sleep(10*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("complete send email after transaction commit...");
}
});
}
}
);

// async work but tx not work, execute even when tx is rollback
// asyncService.executeAfterTxComplete();

ThreadLocalRandom random = ThreadLocalRandom.current();
if(random.nextInt() % 2 ==0){
throw new RuntimeException("test email transaction");
}
System.out.println("service end");
}

封裝以上兩步
對於第二步來說,如果這類方法比較多的話,則寫起來重復性太多,因而,抽象出來如下:
這里改造了 azagorneanu 的代碼:
public interface AfterCommitExecutor extends Executor {
}

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.transaction.support.;
import org.springframework.transaction.support.;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

@Component
public class AfterCommitExecutorImpl extends implements AfterCommitExecutor {
private static final Logger LOGGER = LoggerFactory.getLogger(AfterCommitExecutorImpl.class);
private static final ThreadLocal<List<Runnable>> RUNNABLES = new ThreadLocal<List<Runnable>>();
private ExecutorService threadPool = Executors.newFixedThreadPool(5);

@Override
public void execute(Runnable runnable) {
LOGGER.info("Submitting new runnable {} to run after commit", runnable);
if (!.isSynchronizationActive()) {
LOGGER.info("Transaction synchronization is NOT ACTIVE. Executing right now runnable {}", runnable);
runnable.run();
return;
}
List<Runnable> threadRunnables = RUNNABLES.get();
if (threadRunnables == null) {
threadRunnables = new ArrayList<Runnable>();
RUNNABLES.set(threadRunnables);
.registerSynchronization(this);
}
threadRunnables.add(runnable);
}

@Override
public void afterCommit() {
List<Runnable> threadRunnables = RUNNABLES.get();
LOGGER.info("Transaction successfully committed, executing {} runnables", threadRunnables.size());
for (int i = 0; i < threadRunnables.size(); i++) {
Runnable runnable = threadRunnables.get(i);
LOGGER.info("Executing runnable {}", runnable);
try {
threadPool.execute(runnable);
} catch (RuntimeException e) {
LOGGER.error("Failed to execute runnable " + runnable, e);
}
}
}

@Override
public void afterCompletion(int status) {
LOGGER.info("Transaction completed with status {}", status == STATUS_COMMITTED ? "COMMITTED" : "ROLLED_BACK");
RUNNABLES.remove();
}

}
public void insert(TechBook techBook){
bookMapper.insert(techBook);

// send after tx commit but is async
// .registerSynchronization(new () {
// @Override
// public void afterCommit() {
// executorService.submit(new Runnable() {
// @Override
// public void run() {
// System.out.println("send email after transaction commit...");
// try {
// Thread.sleep(10*1000);
// } catch (InterruptedException e) {
// e.printStackTrace();
// }
// System.out.println("complete send email after transaction commit...");
// }
// });
// }
// }
// );

//send after tx commit and is async
afterCommitExecutor.execute(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(5*1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("send email after transactioin commit");
}
});

// async work but tx not work, execute even when tx is rollback
// asyncService.executeAfterTxComplete();

ThreadLocalRandom random = ThreadLocalRandom.current();
if(random.nextInt() % 2 ==0){
throw new RuntimeException("test email transaction");
}
System.out.println("service end");
}

關於Spring的Async
spring為了方便應用使用線程池進行非同步化,默認提供了@Async註解,可以整個app使用該線程池,而且只要一個@Async註解在方法上面即可,省去重復的submit操作。關於async要注意的幾點:
1、async的配置
<context:component-scan base-package="com.yami" />
<!--配置@Async註解使用的線程池,這里的id隨便命名,最後在task:annotation-driven executor= 指定上就可以-->
<task:executor id="myExecutor" pool-size="5"/>
<task:annotation-driven executor="myExecutor" />

這個必須配置在root context里頭,而且web context不能掃描controller層外的註解,否則會覆蓋掉。
<context:component-scan base-package="com.yami.web.controller"/>
<mvc:annotation-driven/>

2、async的調用問題
async方法的調用,不能由同類方法內部調用,否則攔截不生效,這是spring默認的攔截問題,必須在其他類里頭調用另一個類中帶有async的註解方法,才能起到非同步效果。

Ⅵ SQL資料庫中的commit是同步還是非同步

commit是提交的意思(oracle),當你寫完一條sql語句後,點擊執行,看到數據變化,或者修改,但是在數據中這些數據是沒有變化的,如果你要修改資料庫中的數據,必須在sql語句會面加一條語句commit。

1、sql 語句:是對資料庫進行操作的一種語言。結構化查詢語言(Structured Query Language)簡稱SQL,結構化查詢語言是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統。

2、 簡單基本的sql語句

  • 更新:update table1 set field1=value1 where 范圍

  • 查找:select * from table1 where field1 like 』%value1%』 (所有包含『value1』這個模式的字元串)

  • 排序:select * from table1 order by field1,field2 [desc]

  • 求和:select sum(field1) as sumvalue from table1

  • 平均:select avg(field1) as avgvalue from table1

  • 最大:select max(field1) as maxvalue from table1

Ⅶ petshop4.0非同步提交定單,在資料庫里沒有顯示。

你的系統開啟MSMQ服務了嗎,也就是消息隊列服務,如果沒開,從客戶端發來的信息就沒法接收啦.

Ⅷ 如何在資料庫事務提交成功後進行非同步操作

實現方案
使用在事務提交之後操作
public void insert(TechBook techBook){
bookMapper.insert(techBook);
// send after tx commit but is async
.registerSynchronization(new ()
{

Ⅸ 非同步寫資料庫是怎麼個非同步法

緩存 資料庫應該不致一台,還有個情況,聽說有的是採用非同步寫入,先接收相應的事務,然後再訪問資料庫寫入,具體搶購這個問題每個公司可能處理不一樣,

Ⅹ 關於 ORACLE 資料庫 數據同步(實時同步和非同步同步)

做個資料庫鏈接,A表插入數據以後就往B表插入,用觸發器實現
在任何實時數據同步和復制中,需要考慮如下幾個關鍵問題:
事務一致性:在復制目標端需要按照源端相同的事務環境進行提交,確保目標上數據一致性。
檢查點機制:在抽取和負責時都需要記錄檢查點位置,確保網路故障或GG本身故障下仍然能夠完整復制。
可靠數據傳輸:需要保證數據傳輸的完整性,請求和應答,同時提供數據加密和傳輸過程中的壓縮。