简体   繁体   English

将Java中的字符串转换为SQL中的VARCHAR

[英]Convert a String in Java to a VARCHAR IN SQL

I am trying to write PL/SQL in Java. 我正在尝试用Java编写PL / SQL。 I want to pass an argument as String, but in the SQL Procedure it is a VARCHAR(140). 我想将参数传递为String,但是在SQL过程中,它是VARCHAR(140)。 However it is giving me an error when I run the program and I don't understand why? 但是,当我运行程序时,这给了我一个错误,我不明白为什么?

This is my SQL PROCEDURE: 这是我的SQL过程:

CREATE OR REPLACE PROCEDURE task1
 (input_tweet_id IN integer, input_user_id IN integer, input_time IN timestamp, input_tweet IN varchar(140))
is
begin
    INSERT INTO tweet(tweetid, userid, publishtime, tweet)
    VALUES (input_tweet_id,input_user_id,input_time,input_tweet);
END;

The Java call: Java调用:

    int in_tweet_id = 0;
    int in_user_id = 0;
    Timestamp in_time =null;
    String in_tweet ="";

 Connection conn = DriverManager.getConnection (connStr, uname, passwd);
 CallableStatement cstmt = conn.prepareCall("{? = call task1(?, ?)}");
       // cstmt.registerOutParameter (1, oracle.jdbc.OracleTypes.CURSOR);
        cstmt.setInt(1, in_tweet_id);
        cstmt.setInt(2, in_user_id);
        cstmt.setTimestamp(3,in_time);
        cstmt.setString(4,in_tweet);

The error: 错误:

 at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)
        at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:131)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:197)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:261)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:269)
        at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:490)
        at oracle.jdbc.driver.OraclePreparedStatement.setStringInternal(OraclePreparedStatement.java:5013)
        at oracle.jdbc.driver.OracleCallableStatement.setString(OracleCallableStatement.java:4094)
        at oracle.jdbc.driver.OraclePreparedStatementWrapper.setString(OraclePreparedStatementWrapper.java:246)
        at hw4.execute_task1(hw4.java:247)
        at hw4.main(hw4.java:101)

您尝试设置仅定义2个的第3个和第4个CallableStatement参数

CallableStatement cstmt = conn.prepareCall("{call task1(?, ?, ?, ?)}");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM