运行环境:
ubuntu 7.04
jdk 6
netbeans 5.5代码:
//连接字符串
Class.forName("com.mysql.jdbc.Driver");
Connection cnn=
    DriverManager.getConnection ("jdbc:mysql://localhost/ph?useUnicode=true&characterEncoding=gb2312", "root", "");    //生成插入的Statement
    protected PreparedStatement getInsertCommand(Object[] args) throws SQLException {
        CallabledStatement cmd=cnn.prepareCall("CALL SP_TYPES_INSERT(?, ?)");
        //PreparedStatement cmd=cnn.prepareStatement("Insert into types (id, name) values (?, ?)");
        cmd.setInt(1, (Integer)args[0]);
        cmd.setString(2, (String)args[1]);
        return cmd;
    }    //执行SQL语句
    PreparedStatement cmdInsert=getInsertCommand(args);
    cmdInsert.execute();问题 :getInsertCommand中,如果使用储存过程,参数中如果带有中文,会提示一下错误:
java.sql.SQLException: Incorrect string value: '\xCB\xD5\xBF\xCB' for column 'P_NAME' at row 1如果直接使用SQL语句,就没有问题。
附上MYSQL的储存过程:
DELIMITER $$DROP PROCEDURE IF EXISTS `SP_TYPES_INSERT$$
CREATE PROCEDURE `SP_TYPES_INSERT` (
P_ID INT,
P_NAME VARCHAR(80)
)
BEGIN
INSERT INTO types (`ID`, NAME) VALUES (P_ID, P_NAME);
END$$DELIMITER ;

解决方案 »

  1.   

    to:wangtiecheng(不知不为过,不学就是错!) 
    已经试过直接执行储存过程,但是问题依旧:
                Class.forName("com.mysql.jdbc.Driver");
                Connection cnn=DriverManager.getConnection ("jdbc:mysql://localhost/ph?useUnicode=true&characterEncoding=gb2312", "root", "");            CallableStatement cmd=cnn.prepareCall("CALL SP_TYPES_INSERT(?, ?)");
                cmd.setInt(1, 11);
                cmd.setString(2, "中文");
                cmd.execute();
                
                cmd.close();
                cnn.close();
      

  2.   

    CREATE PROCEDURE `SP_TYPES_INSERT` (
    P_IDINT,
    P_NAME VARCHAR(80) character set gb2312 
    )
    BEGIN
    INSERT INTO types (`ID`, NAME) VALUES (P_ID, P_NAME);
    END$$