在Mysql中 使用事務處理,出現以下錯誤,請高手幫忙。100相謝 使用 show table status 顯示:Name Type Row_format c_test MyISAM Dynamic 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用 show variables like 'have_%' 時顯示Variable_name Value have_bdb YES have_gemini NO have_innodb NO have_isam YES have_raid NO have_ssl NO 好象mysql4.0才支持事务处理吧 跟你的sql没关系,Some non-transactional changed tables couldn't be rolled back这句话是说非事务的代码修改了表数据,所以无法回滚 代碼很簡單的。 ------------------------------------------------- con.setAutoCommit(false); String strSql="INSERT INTO c_test (group_code, group_name) VALUES (?, ?)"; PreparedStatement stmt=con.prepareStatement(strSql); stmt.setString(1,"8"); stmt.setString(2,"8"); stmt.executeUpdate(); con.rollback(); con.setAutoCommit(true); ---------------------------------------------- 不用再试了,3.23的MySQL是不支持事务的,据说4.0.13还是什么版本才支持,结帖吧.顺便一句,con.rollback();应该放在try{..}catch里,你的代码本身也就有问题.找点JDBC的资料看看吧. 纠正,con.rollback();放在catch的{}里,用于失败时回滚而setAutoCommit应该放在finally里,这样才是标准的用法. 不管是3.23还是4.0必须是MAX版的才能支持回滚,而且安装了max版后必须按照下面修改my.cnf文件才能是innodb生效,IP地址目录名照着自己的配置改---------文件开始------------This File was made using the WinMySQLAdmin 1.3 Tool #2002-6-11 23:15:49 #Uncomment or Add only the keys that you know how works. #Read the MySQL Manual for instructions [mysqld] #bind-address=218.242.22.100 #language=C:/mysql/share/your language directory #slow query log#= #tmpdir#= #port=3306 #set-variable=key_buffer=16M basedir=C:/mysql datadir=D:/mysql/data default-character-set=gbk innodb_data_file_path = ibdata1:10M:autoextend innodb_data_home_dir = c:/mysql/ibdata set-variable = innodb_mirrored_log_groups=1 innodb_log_group_home_dir = c:/mysql/iblogs innodb_flush_log_at_trx_commit=1 innodb_log_arch_dir = c:/mysql/iblogs innodb_log_archive=0 set-variable = innodb_buffer_pool_size=80M set-variable = innodb_additional_mem_pool_size=10M set-variable = innodb_file_io_threads=4 set-variable = innodb_lock_wait_timeout=50 set-variable = innodb_log_files_in_group=3 set-variable = innodb_log_file_size=30M set-variable = innodb_log_buffer_size=8M #set-variable = key_buffer=16M [WinMySQLadmin] Server=C:/mysql/bin/mysqld-max-nt.exe user=admin password=admin QueryInterval=10 多謝大家的指教,經過艱苦的努力,終于找到了解決之法:--------------------------------------------------CREATE TABLE c_test( id char(1) NOT NULL default '', name varchar(16) NOT NULL default '', PRIMARY KEY (id), KEY id (id)) TYPE=BerkeleyDB;--------------------------------------------------關鍵在於最後一行。 TYPE=BerkeleyDB;如果是4.0之後則使用 TYPE=InnoDB;大家可以試試. 求个算法 htmlparser工具可以添加和修改节点吗 semaphore的理解问题 GUI画图问题 s.o.s 关于文字编码的的问题(泰文) 关于剪贴板的小问题 高分在线等结帐 Java Applet编制的股票交易软件 送份题,请问那里有JAVA核心类库详解下载 推荐java书 请问开发移动通讯软件应该掌握什么知识,请大家赐教!!!!!!! java与C++在面向对象方面有哪些不同?
Variable_name Value
have_bdb YES
have_gemini NO
have_innodb NO
have_isam YES
have_raid NO
have_ssl NO
-------------------------------------------------
con.setAutoCommit(false);
String strSql="INSERT INTO c_test (group_code, group_name) VALUES (?, ?)";
PreparedStatement stmt=con.prepareStatement(strSql);
stmt.setString(1,"8");
stmt.setString(2,"8");
stmt.executeUpdate();
con.rollback();
con.setAutoCommit(true);
----------------------------------------------
顺便一句,con.rollback();应该放在try{..}catch里,你的代码本身也就有问题.找点JDBC的资料看看吧.
---------文件开始------------This File was made using the WinMySQLAdmin 1.3 Tool
#2002-6-11 23:15:49 #Uncomment or Add only the keys that you know how works.
#Read the MySQL Manual for instructions [mysqld]
#bind-address=218.242.22.100
#language=C:/mysql/share/your language directory
#slow query log#=
#tmpdir#=
#port=3306
#set-variable=key_buffer=16M
basedir=C:/mysql
datadir=D:/mysql/data
default-character-set=gbk innodb_data_file_path = ibdata1:10M:autoextend
innodb_data_home_dir = c:/mysql/ibdata
set-variable = innodb_mirrored_log_groups=1
innodb_log_group_home_dir = c:/mysql/iblogs
innodb_flush_log_at_trx_commit=1
innodb_log_arch_dir = c:/mysql/iblogs
innodb_log_archive=0
set-variable = innodb_buffer_pool_size=80M
set-variable = innodb_additional_mem_pool_size=10M
set-variable = innodb_file_io_threads=4
set-variable = innodb_lock_wait_timeout=50
set-variable = innodb_log_files_in_group=3
set-variable = innodb_log_file_size=30M
set-variable = innodb_log_buffer_size=8M
#set-variable = key_buffer=16M [WinMySQLadmin] Server=C:/mysql/bin/mysqld-max-nt.exe
user=admin
password=admin
QueryInterval=10
--------------------------------------------------
CREATE TABLE c_test(
id char(1) NOT NULL default '',
name varchar(16) NOT NULL default '',
PRIMARY KEY (id),
KEY id (id)
) TYPE=BerkeleyDB;
--------------------------------------------------
關鍵在於最後一行。 TYPE=BerkeleyDB;如果是4.0之後則使用 TYPE=InnoDB;大家可以試試.