Ⅰ 利用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本身故障下仍然能夠完整復制。
可靠數據傳輸:需要保證數據傳輸的完整性,請求和應答,同時提供數據加密和傳輸過程中的壓縮。