UPDATE:issue này đã được cố định trong JTOpen 7.6
nhớ và Ante làm việc cùng nhau ... vấn đề này không có gì để làm với mùa xuân, đó là chắc chắn, bởi vì tôi đã thiết lập một dự án sử dụng JDBC và PreparedStatements đơn giản.
Vì vậy, tôi sẽ thêm một số thông tin hơn làm thế nào để mô phỏng các vấn đề:
DDL:
CREATE TABLE TEST_V6R1 (
ID INTEGER NOT NULL DEFAULT,
VALUE VARCHAR(50)
);
ALTER TABLE TEST_V6R1 ADD CONSTRAINT TEST_V6R1_PK PRIMARY KEY
(ID);
SQL:
insert into test_v6r1 (id, value) values (?, ?)
Java mã:
public class TestV6R1 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement ps1 = null;
PreparedStatement ps2 = null;
try {
conn = getNewConnection();
conn.setAutoCommit(false);
String value = "Test: " + new Timestamp(System.currentTimeMillis());
// First statement which uses RETURN_GENERATED_KEYS
ps1 = conn.prepareStatement("insert into test_v6r1 (id, value) values (?, ?)", Statement.RETURN_GENERATED_KEYS);
ps1.setInt(1, 1);
ps1.setString(2, value);
int ps1Rows = ps1.executeUpdate();
// in case of V5R4
// ps1Rows is 1
// in case of V6R1
// ps1Rows is 0
ResultSet ps1keys = ps1.getGeneratedKeys();
int ps1KeySize = 0;
if (ps1keys != null) {
ps1keys.last();
ps1KeySize = ps1keys.getRow();
}
System.out.println("PS1 - SQL insert affected " + ps1Rows + " rows and returned " + ps1KeySize + " keys");
System.out.println("PS1 - getUpdateCount()="+ ps1.getUpdateCount());
// Second statement which uses NO_GENERATED_KEYS
ps2 = conn.prepareStatement("insert into test_v6r1 (id, value) values (?, ?)", Statement.NO_GENERATED_KEYS);
ps2.setInt(1, 2);
ps2.setString(2, value);
int ps2Rows = ps2.executeUpdate();
// in case of V5R4
// ps2Rows is 1
// in case of V6R1
// ps2Rows is 1
ResultSet ps2Keys = ps2.getGeneratedKeys();
int ps2KeySize = 0;
if (ps2Keys != null) {
ps2Keys.last();
ps2KeySize = ps2Keys.getRow();
}
System.out.println("PS2 - SQL insert affected " + ps2Rows + " rows and returned " + ps2KeySize + " keys");
System.out.println("PS2 - getUpdateCount()="+ ps2.getUpdateCount());
conn.commit();
}
catch (Throwable e) {
e.printStackTrace();
try {
conn.rollback();
}
catch (SQLException e1) {
e1.printStackTrace();
}
}
finally {
try {
if (ps1!=null) ps1.close();
if (ps2!=null) ps2.close();
if (conn!=null) conn.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
}
public static Connection getNewConnection() {
try {
Class.forName("com.ibm.as400.access.AS400JDBCDriver"); // Or any other driver
}
catch (Exception x) {
System.out.println("Unable to load the driver class!");
}
Connection dbConnection = null;
try {
// TEST - V6R1
dbConnection = DriverManager
.getConnection("jdbc:as400://testServer;libraries=*libl;naming=system;sort=language;sort language=HRV;sort weight=shared;prompt=false;trace=true",
"username",
"password");
// PRODUCTION - V5R4
// dbConnection = DriverManager
// .getConnection("jdbc:as400://productionServer;libraries=*libl;naming=system;sort=language;sort language=HRV;sort weight=shared;prompt=false;trace=true",
// "username",
// "password");
}
catch (SQLException x) {
System.out.println("Couldn’t get connection!");
}
return dbConnection;
}
}
Đầu ra bàn điều khiển V5R4:
Toolbox for Java - Open Source Software, JTOpen 7.3, codebase 5770-SS1 V7R1M0.03 2011/01/14 @B5
as400: Properties (12122347) : access = "all".
as400: Properties (12122347) : block size = "32".
as400: Properties (12122347) : block criteria = "2".
as400: Properties (12122347) : date format = "".
as400: Properties (12122347) : date separator = "".
as400: Properties (12122347) : decimal separator = "".
as400: Properties (12122347) : errors = "basic".
as400: Properties (12122347) : extended dynamic = "false".
as400: Properties (12122347) : libraries = "*libl".
as400: Properties (12122347) : naming = "system".
as400: Properties (12122347) : package = "".
as400: Properties (12122347) : package add = "true".
as400: Properties (12122347) : package cache = "false".
as400: Properties (12122347) : package clear = "false".
as400: Properties (12122347) : package error = "warning".
as400: Properties (12122347) : package library = "".
as400: Properties (12122347) : password = "".
as400: Properties (12122347) : prefetch = "true".
as400: Properties (12122347) : prompt = "false".
as400: Properties (12122347) : remarks = "system".
as400: Properties (12122347) : sort = "language".
as400: Properties (12122347) : sort language = "HRV".
as400: Properties (12122347) : sort table = "".
as400: Properties (12122347) : sort weight = "shared".
as400: Properties (12122347) : time format = "".
as400: Properties (12122347) : time separator = "".
as400: Properties (12122347) : trace = "true".
as400: Properties (12122347) : transaction isolation = "read uncommitted".
as400: Properties (12122347) : translate binary = "false".
as400: Properties (12122347) : user = "username".
as400: Properties (12122347) : package criteria = "default".
as400: Properties (12122347) : lob threshold = "32768".
as400: Properties (12122347) : secure = "false".
as400: Properties (12122347) : data truncation = "true".
as400: Properties (12122347) : proxy server = "".
as400: Properties (12122347) : secondary URL = "".
as400: Properties (12122347) : data compression = "true".
as400: Properties (12122347) : big decimal = "true".
as400: Properties (12122347) : thread used = "true".
as400: Properties (12122347) : cursor hold = "true".
as400: Properties (12122347) : lazy close = "false".
as400: Properties (12122347) : driver = "toolbox".
as400: Properties (12122347) : bidi string type = "5".
as400: Properties (12122347) : key ring name = "".
as400: Properties (12122347) : key ring password = "".
as400: Properties (12122347) : full open = "false".
as400: Properties (12122347) : server trace = "0".
as400: Properties (12122347) : database name = "".
as400: Properties (12122347) : extended metadata = "false".
as400: Properties (12122347) : cursor sensitivity = "asensitive".
as400: Properties (12122347) : behavior override = "0".
as400: Properties (12122347) : package ccsid = "13488".
as400: Properties (12122347) : minimum divide scale = "0".
as400: Properties (12122347) : maximum precision = "31".
as400: Properties (12122347) : maximum scale = "31".
as400: Properties (12122347) : translate hex = "character".
as400: Properties (12122347) : toolbox trace = "".
as400: Properties (12122347) : qaqqinilib = "".
as400: Properties (12122347) : login timeout = "".
as400: Properties (12122347) : true autocommit = "false".
as400: Properties (12122347) : bidi implicit reordering = "true".
as400: Properties (12122347) : bidi numeric ordering = "false".
as400: Properties (12122347) : hold input locators = "true".
as400: Properties (12122347) : hold statements = "false".
as400: Properties (12122347) : rollback cursor hold = "false".
as400: Properties (12122347) : variable field compression = "true".
as400: Properties (12122347) : query optimize goal = "0".
as400: Properties (12122347) : keep alive = "".
as400: Properties (12122347) : receive buffer size = "".
as400: Properties (12122347) : send buffer size = "".
as400: Properties (12122347) : XA loosely coupled support = "0".
as400: Properties (12122347) : translate boolean = "true".
as400: Properties (12122347) : metadata source = "-1".
as400: Properties (12122347) : query storage limit = "-1".
as400: Properties (12122347) : decfloat rounding mode = "half even".
as400: Properties (12122347) : autocommit exception = "false".
as400: Properties (12122347) : auto commit = "true".
as400: Properties (12122347) : ignore warnings = "".
as400: Properties (12122347) : secure current user = "true".
as400: Properties (12122347) : concurrent access resolution = "0".
as400: Properties (12122347) : jvm16 synchronize = "true".
as400: Properties (12122347) : socket timeout = "".
as400: Properties (12122347) : use block update = "false".
as400: Properties (12122347) : maximum blocked input rows = "32000".
as400: Driver AS/400 Toolbox for Java JDBC Driver (15779934) : Using IBM Toolbox for Java JDBC driver implementation.
as400: Properties (12122347) : metadata source = "0".
as400: Toolbox for Java - Open Source Software, JTOpen 7.3, codebase 5770-SS1 V7R1M0.03 2011/01/14 @B5
as400: JDBC Level: 40
as400: Properties (12122347) : package ccsid = "13488".
as400: Connection productionServer (367156) : Client CCSID = 13488.
as400: Connection productionServer (367156) : Setting server NLV = 2912.
as400: Connection productionServer (367156) : Client functional level = V7R1M01 .
as400: Connection productionServer (367156) : Data compression = RLE.
as400: Connection productionServer (367156) : ROWID supported = true.
as400: Connection productionServer (367156) : True auto-commit supported = true.
as400: Connection productionServer (367156) : 128 byte column names supported = true.
as400: Connection productionServer (367156) : Maximum decimal precision = 31.
as400: Connection productionServer (367156) : Maximum decimal scale = 31.
as400: Connection productionServer (367156) : Minimum divide scale = 0.
as400: Connection productionServer (367156) : Translate hex = character.
as400: Connection productionServer (367156) : query optimize goal = 0.
as400: Connection productionServer (367156) : Using extended datastreams.
as400: Connection productionServer (367156) : JDBC driver major version = 9.
as400: Connection productionServer (367156) : IBM i VRM = V5R4M0.
as400: Connection productionServer (367156) : Server CCSID = 870.
as400: Connection productionServer (367156) : Server functional level = V5R4M00014 (14).
as400: Connection productionServer (367156) : Server job identifier = 692621/QUSER/QZDASOINIT.
as400: Properties (12122347) : decimal separator = ".".
as400: Properties (12122347) : date format = "dmy".
as400: Properties (12122347) : date separator = "/".
as400: Properties (12122347) : time format = "hms".
as400: Properties (12122347) : time separator = ":".
as400: Connection productionServer (367156) open.
as400: Connection productionServer (367156) : Auto commit = "true".
as400: Connection productionServer (367156) : Read only = "false".
as400: Connection productionServer (367156) : Transaction isolation = "1".
as400: Connection productionServer (367156) : Auto commit = "false".
as400: PreparedStatement STMT0001 (24864323) open. Parent: Connection productionServer (367156) .
as400: PreparedStatement STMT0001 (24864323) : Escape processing = "true".
as400: PreparedStatement STMT0001 (24864323) : Fetch direction = "1000".
as400: PreparedStatement STMT0001 (24864323) : Fetch size = "0".
as400: PreparedStatement STMT0001 (24864323) : Max field size = "0".
as400: PreparedStatement STMT0001 (24864323) : Max rows = "0".
as400: PreparedStatement STMT0001 (24864323) : Query timeout = "0".
as400: PreparedStatement STMT0001 (24864323) : Result set concurrency = "1007".
as400: PreparedStatement STMT0001 (24864323) : Result set holdability = "1".
as400: PreparedStatement STMT0001 (24864323) : Result set type = "1003".
as400: PreparedStatement STMT0001 (24864323) : Behavior Override = "0".
as400: PreparedStatement STMT0001 (24864323) : Data to correlate statement with cursor Cursor CRSR0001 (7792807) .
as400: PreparedStatement STMT0001 (24864323) : Preparing [insert into test_v6r1 (id, value) values (?, ?)].
as400: PreparedStatement STMT0001 (24864323) : Prepared STMT0001*, SQL Statement -->[insert into test_v6r1 (id, value) values (?, ?)].
as400: PreparedStatement STMT0001 (24864323) : setInt().
as400: PreparedStatement STMT0001 (24864323) : parameter index: 1 value: 1.
as400: PreparedStatement STMT0001 (24864323) : setString().
as400: PreparedStatement STMT0001 (24864323) : parameter index: 2 value: Test: 2011-04-27 16:34:30.981.
as400: PreparedStatement STMT0001 (24864323) : Descriptor 1 created or changed.
as400: PreparedStatement STMT0001 (24864323) : returnCode is: 0.
as400: PreparedStatement STMT0001 (24864323) : generated key from system is: null.
as400: ResultSet (2850225) open.
as400: ResultSet (2850225) : Conncurrency = "1007".
as400: ResultSet (2850225) : Fetch direction = "1000".
as400: ResultSet (2850225) : Fetch size = "0".
as400: ResultSet (2850225) : Max rows = "0".
as400: ResultSet (2850225) : Type = "1004".
as400: PreparedStatement STMT0001 (24864323) : Executed STMT0001*, SQL Statement --> [insert into test_v6r1 (id, value) values (?, ?)].
as400: PreparedStatement STMT0001 (24864323) : Update count = 1.
as400: PreparedStatement STMT0001 (24864323) : Result set = false.
as400: PreparedStatement STMT0001 (24864323) : Number of result sets = 0.
as400: PreparedStatement STMT0001 (24864323) : Row count estimate = -1.
PS1 - SQL insert affected 1 rows and returned 0 keys
PS1 - getUpdateCount()=1
as400: PreparedStatement STMT0002 (19098837) open. Parent: Connection productionServer (367156) .
as400: PreparedStatement STMT0002 (19098837) : Escape processing = "true".
as400: PreparedStatement STMT0002 (19098837) : Fetch direction = "1000".
as400: PreparedStatement STMT0002 (19098837) : Fetch size = "0".
as400: PreparedStatement STMT0002 (19098837) : Max field size = "0".
as400: PreparedStatement STMT0002 (19098837) : Max rows = "0".
as400: PreparedStatement STMT0002 (19098837) : Query timeout = "0".
as400: PreparedStatement STMT0002 (19098837) : Result set concurrency = "1007".
as400: PreparedStatement STMT0002 (19098837) : Result set holdability = "1".
as400: PreparedStatement STMT0002 (19098837) : Result set type = "1003".
as400: PreparedStatement STMT0002 (19098837) : Behavior Override = "0".
as400: PreparedStatement STMT0002 (19098837) : Data to correlate statement with cursor Cursor CRSR0002 (12470752) .
as400: PreparedStatement STMT0002 (19098837) : Preparing [insert into test_v6r1 (id, value) values (?, ?)].
as400: PreparedStatement STMT0002 (19098837) : Prepared STMT0002*, SQL Statement -->[insert into test_v6r1 (id, value) values (?, ?)].
as400: PreparedStatement STMT0002 (19098837) : setInt().
as400: PreparedStatement STMT0002 (19098837) : parameter index: 1 value: 2.
as400: PreparedStatement STMT0002 (19098837) : setString().
as400: PreparedStatement STMT0002 (19098837) : parameter index: 2 value: Test: 2011-04-27 16:34:30.981.
as400: PreparedStatement STMT0002 (19098837) : Descriptor 2 created or changed.
as400: PreparedStatement STMT0002 (19098837) : Executed STMT0002*, SQL Statement --> [insert into test_v6r1 (id, value) values (?, ?)].
as400: PreparedStatement STMT0002 (19098837) : Update count = 1.
as400: PreparedStatement STMT0002 (19098837) : Result set = false.
as400: PreparedStatement STMT0002 (19098837) : Number of result sets = 0.
as400: PreparedStatement STMT0002 (19098837) : Row count estimate = -1.
PS2 - SQL insert affected 1 rows and returned 0 keys
PS2 - getUpdateCount()=1
as400: Connection productionServer (367156) : Testing to see if cursors should be held..
as400: Connection productionServer (367156) : Transaction commit.
as400: ResultSet (2850225) closed.
as400: PreparedStatement STMT0001 (24864323) closed.
as400: PreparedStatement STMT0002 (19098837) closed.
as400: Connection productionServer (367156) closed.
V6R1 console đầu ra:
Toolbox for Java - Open Source Software, JTOpen 7.3, codebase 5770-SS1 V7R1M0.03 2011/01/14 @B5
.
.
.
as400: Driver AS/400 Toolbox for Java JDBC Driver (27979955) : Using IBM Toolbox for Java JDBC driver implementation.
as400: Properties (16020374) : metadata source = "0".
as400: Toolbox for Java - Open Source Software, JTOpen 7.3, codebase 5770-SS1 V7R1M0.03 2011/01/14 @B5
as400: JDBC Level: 40
as400: Properties (16020374) : package ccsid = "13488".
as400: Connection testServer (11463270) : Client CCSID = 13488.
as400: Connection testServer (11463270) : Setting server NLV = 2912.
as400: Connection testServer (11463270) : Client functional level = V7R1M01 .
as400: Connection testServer (11463270) : Data compression = RLE.
as400: Connection testServer (11463270) : ROWID supported = true.
as400: Connection testServer (11463270) : True auto-commit supported = true.
as400: Connection testServer (11463270) : 128 byte column names supported = true.
as400: Connection testServer (11463270) : Maximum decimal precision = 31.
as400: Connection testServer (11463270) : Maximum decimal scale = 31.
as400: Connection testServer (11463270) : Minimum divide scale = 0.
as400: Connection testServer (11463270) : Translate hex = character.
as400: Connection testServer (11463270) : query optimize goal = 0.
as400: Connection testServer (11463270) : query storage limit = -1.
as400: Connection testServer (11463270) : Using extended datastreams.
as400: Connection testServer (11463270) : JDBC driver major version = 9.
as400: Connection testServer (11463270) : IBM i VRM = V6R1M0.
as400: Connection testServer (11463270) : Server CCSID = 870.
as400: Connection testServer (11463270) : Server functional level = V6R1M00014 (14).
as400: Connection testServer (11463270) : Server job identifier = 072485/QUSER/QZDASOINIT.
as400: Properties (16020374) : decimal separator = ".".
as400: Properties (16020374) : date format = "dmy".
as400: Properties (16020374) : date separator = "/".
as400: Properties (16020374) : time format = "hms".
as400: Properties (16020374) : time separator = ":".
as400: Connection S65AB7B0 (11463270) open.
as400: Connection S65AB7B0 (11463270) : Auto commit = "true".
as400: Connection S65AB7B0 (11463270) : Read only = "false".
as400: Connection S65AB7B0 (11463270) : Transaction isolation = "1".
as400: Connection S65AB7B0 (11463270) : Auto commit = "false".
as400: PreparedStatement STMT0001 (15696851) open. Parent: Connection S65AB7B0 (11463270) .
as400: PreparedStatement STMT0001 (15696851) : Escape processing = "true".
as400: PreparedStatement STMT0001 (15696851) : Fetch direction = "1000".
as400: PreparedStatement STMT0001 (15696851) : Fetch size = "0".
as400: PreparedStatement STMT0001 (15696851) : Max field size = "0".
as400: PreparedStatement STMT0001 (15696851) : Max rows = "0".
as400: PreparedStatement STMT0001 (15696851) : Query timeout = "0".
as400: PreparedStatement STMT0001 (15696851) : Result set concurrency = "1007".
as400: PreparedStatement STMT0001 (15696851) : Result set holdability = "1".
as400: PreparedStatement STMT0001 (15696851) : Result set type = "1003".
as400: PreparedStatement STMT0001 (15696851) : Behavior Override = "0".
as400: PreparedStatement STMT0001 (15696851) : Data to correlate statement with cursor Cursor CRSR0001 (12039161) .
as400: PreparedStatement STMT0001 (15696851) : Preparing [SELECT *SQLGENCOLUMNS FROM NEW TABLE(insert into test_v6r1 (id, value) values (?, ?))].
as400: PreparedStatement STMT0001 (15696851) : Prepared STMT0001*, SQL Statement -->[SELECT *SQLGENCOLUMNS FROM NEW TABLE(insert into test_v6r1 (id, value) values (?, ?))].
as400: PreparedStatement STMT0001 (15696851) : setInt().
as400: PreparedStatement STMT0001 (15696851) : parameter index: 1 value: 1.
as400: PreparedStatement STMT0001 (15696851) : setString().
as400: PreparedStatement STMT0001 (15696851) : parameter index: 2 value: Test: 2011-04-27 16:39:53.839.
as400: PreparedStatement STMT0001 (15696851) : Descriptor 1 created or changed.
as400: Cursor CRSR0001 (12039161) open.
as400: ResultSet CRSR0001 (13725633) open. Parent: PreparedStatement STMT0001 (15696851) .
as400: ResultSet CRSR0001 (13725633) : Conncurrency = "1007".
as400: ResultSet CRSR0001 (13725633) : Fetch direction = "1000".
as400: ResultSet CRSR0001 (13725633) : Fetch size = "0".
as400: ResultSet CRSR0001 (13725633) : Max rows = "0".
as400: ResultSet CRSR0001 (13725633) : Type = "1004".
as400: PreparedStatement STMT0001 (15696851) : Executed STMT0001*, SQL Statement --> [SELECT *SQLGENCOLUMNS FROM NEW TABLE(insert into test_v6r1 (id, value) values (?, ?))].
as400: PreparedStatement STMT0001 (15696851) : Update count = 0.
as400: PreparedStatement STMT0001 (15696851) : Result set = false.
as400: PreparedStatement STMT0001 (15696851) : Number of result sets = 0.
as400: PreparedStatement STMT0001 (15696851) : Row count estimate = -1.
as400: Connection S65AB7B0 (11463270) : Fetching a block of data from the system.
PS1 - SQL insert affected 0 rows and returned 0 keys
PS1 - getUpdateCount()=0
as400: PreparedStatement STMT0002 (540190) open. Parent: Connection S65AB7B0 (11463270) .
as400: PreparedStatement STMT0002 (540190) : Escape processing = "true".
as400: PreparedStatement STMT0002 (540190) : Fetch direction = "1000".
as400: PreparedStatement STMT0002 (540190) : Fetch size = "0".
as400: PreparedStatement STMT0002 (540190) : Max field size = "0".
as400: PreparedStatement STMT0002 (540190) : Max rows = "0".
as400: PreparedStatement STMT0002 (540190) : Query timeout = "0".
as400: PreparedStatement STMT0002 (540190) : Result set concurrency = "1007".
as400: PreparedStatement STMT0002 (540190) : Result set holdability = "1".
as400: PreparedStatement STMT0002 (540190) : Result set type = "1003".
as400: PreparedStatement STMT0002 (540190) : Behavior Override = "0".
as400: PreparedStatement STMT0002 (540190) : Data to correlate statement with cursor Cursor CRSR0002 (19287723) .
as400: PreparedStatement STMT0002 (540190) : Preparing [insert into test_v6r1 (id, value) values (?, ?)].
as400: PreparedStatement STMT0002 (540190) : Prepared STMT0002*, SQL Statement -->[insert into test_v6r1 (id, value) values (?, ?)].
as400: PreparedStatement STMT0002 (540190) : setInt().
as400: PreparedStatement STMT0002 (540190) : parameter index: 1 value: 2.
as400: PreparedStatement STMT0002 (540190) : setString().
as400: PreparedStatement STMT0002 (540190) : parameter index: 2 value: Test: 2011-04-27 16:39:53.839.
as400: PreparedStatement STMT0002 (540190) : Descriptor 2 created or changed.
as400: PreparedStatement STMT0002 (540190) : Executed STMT0002*, SQL Statement --> [insert into test_v6r1 (id, value) values (?, ?)].
as400: PreparedStatement STMT0002 (540190) : Update count = 1.
as400: PreparedStatement STMT0002 (540190) : Result set = false.
as400: PreparedStatement STMT0002 (540190) : Number of result sets = 0.
as400: PreparedStatement STMT0002 (540190) : Row count estimate = -1.
PS2 - SQL insert affected 1 rows and returned 0 keys
PS2 - getUpdateCount()=1
as400: Connection S65AB7B0 (11463270) : Testing to see if cursors should be held..
as400: Connection S65AB7B0 (11463270) : Transaction commit.
as400: Cursor CRSR0001 (12039161) : Closing with reuse flag = 240.
as400: Cursor CRSR0001 (12039161) closed.
as400: ResultSet CRSR0001 (13725633) closed.
as400: PreparedStatement STMT0001 (15696851) closed.
as400: PreparedStatement STMT0002 (540190) closed.
as400: Connection S65AB7B0 (11463270) closed.
Khi sử dụng lá cờ RETURN_GENERATED_KEYS
điều quan trọng nhất cần được coi là cách chuẩn bị phát biểu được chuẩn bị.
Trong trường hợp V6R1 một tuyên bố như thế này:
insert into test_v6r1 (id, value) values (?, ?)
được chuẩn bị trong nội bộ như:
SELECT *SQLGENCOLUMNS FROM NEW TABLE(insert into test_v6r1 (id, value) values (?, ?))
Trong trường hợp V5R4 nó chuẩn bị thông thường:
insert into test_v6r1 (id, value) values (?, ?)
Javadoc của PreparedStatement.executeUpdate()
nói:
Thực thi các câu lệnh SQL trong đối tượng PreparedStatement này, mà phải là một Manipulation Language dữ liệu SQL (DML) tuyên bố, chẳng hạn như INSERT, UPDATE hay DELETE ; hoặc câu lệnh SQL không trả về gì, chẳng hạn như tuyên bố DDL .
Returns: hoặc (1) hàng đếm cho SQL Data Manipulation Language (DML) tuyên bố hoặc (2) 0 cho câu lệnh SQL mà trở về không có gì
và báo cáo kết quả thực hiện rõ ràng là một tuyên bố DML. Tôi nghi ngờ đó là lỗi trong số JTOpen/JT400. Tôi đã thử với 6.1 và 7.3 và nó giống nhau.
Tôi giả sử bạn đang sử dụng jt400.jar (ví dụ, JTOpen cho iSeries) để truy cập cơ sở dữ liệu? –
có, phiên bản mới nhất có thể tải xuống từ sourceforge: 7.3 –
chúng tôi đã bật gỡ lỗi cho JDBC và nhận SQL có phần khác với phiên bản 5, có tính năng mới nổi bật được kết hợp: Chuẩn bị STMT0001 *, Câu lệnh SQL -> [ SELECT * SQLGENCOLUMNS TỪ FINAL TABLE (chèn vào các giá trị test_v6r1 (id, value) (?,?))]. –