为什么显式映射java类和oracle的type,但是在插入新记录时,可以添加数值型的数据,而String类型的总是为空,我试了Struct也是这样,请大家帮我找找错在哪里,谢谢
import java.sql.*;
import oracle.sql.*;
import oracle.jdbc.driver.*;
public class OracleData implements java.sql.SQLData{
private String sqlType;
private String param1;
private long param2;
private String param3;
public OracleData(){
}
public OracleData( String typeName, String param1, long param2, String param3){
sqlType = typeName;
this.param1 = param1;
this.param2 = param2;
this.param3 = param3;
}
public String getSQLTypeName() throws SQLException{
return sqlType;
}
public void readSQL(SQLInput stream, String sqlType) throws SQLException{
this.sqlType = sqlType;
param1 = stream.readString();
param2 = stream.readLong();
param3 = stream.readString();
}
public void writeSQL(SQLOutput stream) throws SQLException {
stream.writeString(param1);
stream.writeLong(param2);
stream.writeString(param3);
}
public static void main(String args[]){
try{
Class.forName(DatabaseInfo.getDriver());
}catch(ClassNotFoundException e){
System.err.println(e.getMessage());
}
String param1 = "Param1_Is_me";
long param2 = 12345L;
String param3 = "Param3_Is_me";
OracleData data = new OracleData("MRSDBA.TEST_T", param1, param2, param3);
Connection conn = null;
try{
conn=DriverManager.getConnection(DatabaseInfo.getURL());
java.util.Map map = conn.getTypeMap();
map.put("MRSDBA.TEST_T", Class.forName("OracleData"));
OracleCallableStatement pCall = (OracleCallableStatement)conn.prepareCall(
"{call test_package.test_proc(?)}");
pCall.setObject(1, data, OracleTypes.STRUCT);
pCall.execute();
pCall.close();
conn.close();
}catch(Exception e){
System.err.println(e.getMessage());
}
}
}
import java.sql.*;
import oracle.sql.*;
import oracle.jdbc.driver.*;
public class OracleData implements java.sql.SQLData{
private String sqlType;
private String param1;
private long param2;
private String param3;
public OracleData(){
}
public OracleData( String typeName, String param1, long param2, String param3){
sqlType = typeName;
this.param1 = param1;
this.param2 = param2;
this.param3 = param3;
}
public String getSQLTypeName() throws SQLException{
return sqlType;
}
public void readSQL(SQLInput stream, String sqlType) throws SQLException{
this.sqlType = sqlType;
param1 = stream.readString();
param2 = stream.readLong();
param3 = stream.readString();
}
public void writeSQL(SQLOutput stream) throws SQLException {
stream.writeString(param1);
stream.writeLong(param2);
stream.writeString(param3);
}
public static void main(String args[]){
try{
Class.forName(DatabaseInfo.getDriver());
}catch(ClassNotFoundException e){
System.err.println(e.getMessage());
}
String param1 = "Param1_Is_me";
long param2 = 12345L;
String param3 = "Param3_Is_me";
OracleData data = new OracleData("MRSDBA.TEST_T", param1, param2, param3);
Connection conn = null;
try{
conn=DriverManager.getConnection(DatabaseInfo.getURL());
java.util.Map map = conn.getTypeMap();
map.put("MRSDBA.TEST_T", Class.forName("OracleData"));
OracleCallableStatement pCall = (OracleCallableStatement)conn.prepareCall(
"{call test_package.test_proc(?)}");
pCall.setObject(1, data, OracleTypes.STRUCT);
pCall.execute();
pCall.close();
conn.close();
}catch(Exception e){
System.err.println(e.getMessage());
}
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货