{"id":458,"date":"2023-03-15T04:34:12","date_gmt":"2023-03-30T04:53:51","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/index.php\/2023\/11\/30\/%e5%9c%a8java%e4%b8%ad%e7%9a%84%e7%a4%ba%e4%be%8b%e4%b8%ad%ef%bc%8c%e5%8f%af%e8%b0%83%e7%94%a8%e8%af%ad%e5%8f%a5\/"},"modified":"2025-08-02T11:07:12","modified_gmt":"2025-08-02T03:07:12","slug":"%e5%9c%a8java%e4%b8%ad%e7%9a%84%e7%a4%ba%e4%be%8b%e4%b8%ad%ef%bc%8c%e5%8f%af%e8%b0%83%e7%94%a8%e8%af%ad%e5%8f%a5","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8java%e4%b8%ad%e7%9a%84%e7%a4%ba%e4%be%8b%e4%b8%ad%ef%bc%8c%e5%8f%af%e8%b0%83%e7%94%a8%e8%af%ad%e5%8f%a5\/","title":{"rendered":"Java Callable\u63a5\u53e3\u8be6\u89e3\uff1a\u4f7f\u7528\u793a\u4f8b\u4e0e\u6700\u4f73\u5b9e\u8df5"},"content":{"rendered":"<p>Java\u4e2d\u7684CallableStatement\u7528\u4e8e\u4eceJava\u7a0b\u5e8f\u4e2d\u8c03\u7528\u5b58\u50a8\u8fc7\u7a0b\u3002\u5b58\u50a8\u8fc7\u7a0b\u662f\u4e00\u7ec4\u5728\u6570\u636e\u5e93\u4e2d\u7f16\u8bd1\u7684\u8bed\u53e5\uff0c\u7528\u4e8e\u6267\u884c\u67d0\u4e9b\u4efb\u52a1\u3002\u5f53\u6211\u4eec\u5904\u7406\u591a\u4e2a\u5305\u542b\u590d\u6742\u60c5\u51b5\u7684\u8868\u65f6\uff0c\u5b58\u50a8\u8fc7\u7a0b\u975e\u5e38\u6709\u7528\u3002\u4e0e\u5411\u6570\u636e\u5e93\u53d1\u9001\u591a\u4e2a\u67e5\u8be2\u4e0d\u540c\uff0c\u6211\u4eec\u53ef\u4ee5\u5c06\u6240\u9700\u6570\u636e\u53d1\u9001\u5230\u5b58\u50a8\u8fc7\u7a0b\uff0c\u5e76\u5728\u6570\u636e\u5e93\u670d\u52a1\u5668\u672c\u8eab\u4e0a\u6267\u884c\u903b\u8f91\u3002<\/p>\n<h2>\u53ef\u8c03\u7528\u8bed\u53e5JDBC API\u901a\u8fc7CallableStatement\u63a5\u53e3\u63d0\u4f9b\u6267\u884c\u5b58\u50a8\u8fc7\u7a0b\u7684\u652f\u6301\u3002\u5b58\u50a8\u8fc7\u7a0b\u5fc5\u987b\u4f7f\u7528\u7279\u5b9a\u4e8e\u6570\u636e\u5e93\u7684\u8bed\u6cd5\u7f16\u5199\uff0c\u5728\u672c\u6559\u7a0b\u4e2d\uff0c\u6211\u5c06\u4f7f\u7528Oracle\u6570\u636e\u5e93\u3002\u6211\u4eec\u5c06\u7814\u7a76CallableStatement\u7684\u6807\u51c6\u7279\u6027\uff0c\u5305\u62ec\u8f93\u5165\u548c\u8f93\u51fa\u53c2\u6570\u3002\u7136\u540e\uff0c\u6211\u4eec\u5c06\u8ba8\u8bbaOracle\u7279\u5b9a\u7684STRUCT\u548cCursor\u793a\u4f8b\u3002\u8ba9\u6211\u4eec\u9996\u5148\u4f7f\u7528\u4e0b\u9762\u7684SQL\u67e5\u8be2\u5728\u6211\u4eec\u7684CallableStatement\u793a\u4f8b\u7a0b\u5e8f\u4e2d\u521b\u5efa\u4e00\u4e2a\u8868create_employee.sql\u3002<\/p>\n<pre class=\"post-pre\"><code>-- For Oracle DB\r\nCREATE TABLE EMPLOYEE\r\n  (\r\n    \"EMPID\"   NUMBER NOT NULL ENABLE,\r\n    \"NAME\"    VARCHAR2(10 BYTE) DEFAULT NULL,\r\n    \"ROLE\"    VARCHAR2(10 BYTE) DEFAULT NULL,\r\n    \"CITY\"    VARCHAR2(10 BYTE) DEFAULT NULL,\r\n    \"COUNTRY\" VARCHAR2(10 BYTE) DEFAULT NULL,\r\n    PRIMARY KEY (\"EMPID\")\r\n  );\r\n<\/code><\/pre>\n<p>\u8ba9\u6211\u4eec\u9996\u5148\u521b\u5efa\u4e00\u4e2a\u5b9e\u7528\u7c7b\u6765\u83b7\u53d6Oracle\u6570\u636e\u5e93\u7684Connection\u5bf9\u8c61\u3002\u786e\u4fddOracle OJDBC jar\u6587\u4ef6\u5728\u9879\u76ee\u7684\u6784\u5efa\u8def\u5f84\u4e2d\u3002DBConnection.java\u3002<\/p>\n<pre class=\"post-pre\"><code>package com.Olivia.jdbc.storedproc;\r\n\r\nimport java.sql.Connection;\r\nimport java.sql.DriverManager;\r\nimport java.sql.SQLException;\r\n\r\npublic class DBConnection {\r\n\r\n\tprivate static final String DB_DRIVER_CLASS = \"oracle.jdbc.driver.OracleDriver\";\r\n\tprivate static final String DB_URL = \"jdbc:oracle:thin:@localhost:1521:orcl\";\r\n\tprivate static final String DB_USERNAME = \"HR\";\r\n\tprivate static final String DB_PASSWORD = \"oracle\";\r\n\t\r\n\tpublic static Connection getConnection() {\r\n\t\tConnection con = null;\r\n\t\ttry {\r\n\t\t\t\/\/ load the Driver Class\r\n\t\t\tClass.forName(DB_DRIVER_CLASS);\r\n\r\n\t\t\t\/\/ create the connection now\r\n\t\t\tcon = DriverManager.getConnection(DB_URL,DB_USERNAME,DB_PASSWORD);\r\n\t\t} catch (ClassNotFoundException e) {\r\n\t\t\te.printStackTrace();\r\n\t\t} catch (SQLException e) {\r\n\t\t\te.printStackTrace();\r\n\t\t}\r\n\t\treturn con;\r\n\t}\r\n}\r\n<\/code><\/pre>\n<h3>\u53ef\u8c03\u7528\u8bed\u53e5\u793a\u4f8b\u6211\u4eec\u6765\u7f16\u5199\u4e00\u4e2a\u7b80\u5355\u7684\u5b58\u50a8\u8fc7\u7a0b\uff0c\u5411Employee\u8868\u4e2d\u63d2\u5165\u6570\u636e\u3002insertEmployee.sql<\/p>\n<pre class=\"post-pre\"><code>CREATE OR REPLACE PROCEDURE insertEmployee\r\n(in_id IN EMPLOYEE.EMPID%TYPE,\r\n in_name IN EMPLOYEE.NAME%TYPE,\r\n in_role IN EMPLOYEE.ROLE%TYPE,\r\n in_city IN EMPLOYEE.CITY%TYPE,\r\n in_country IN EMPLOYEE.COUNTRY%TYPE,\r\n out_result OUT VARCHAR2)\r\nAS\r\nBEGIN\r\n  INSERT INTO EMPLOYEE (EMPID, NAME, ROLE, CITY, COUNTRY) \r\n  values (in_id,in_name,in_role,in_city,in_country);\r\n  commit;\r\n  \r\n  out_result := 'TRUE';\r\n  \r\nEXCEPTION\r\n  WHEN OTHERS THEN \r\n  out_result := 'FALSE';\r\n  ROLLBACK;\r\nEND;\r\n<\/code><\/pre>\n<p>\u5982\u60a8\u6240\u89c1\uff0cinsertEmployee\u8fc7\u7a0b\u9884\u671f\u4ece\u8c03\u7528\u8005\u90a3\u91cc\u63a5\u6536\u8f93\u5165\uff0c\u5e76\u5c06\u5176\u63d2\u5165\u5230Employee\u8868\u4e2d\u3002\u5982\u679c\u63d2\u5165\u8bed\u53e5\u6210\u529f\u6267\u884c\uff0c\u5219\u8fd4\u56deTRUE\uff1b\u800c\u5982\u679c\u51fa\u73b0\u4efb\u4f55\u5f02\u5e38\uff0c\u5219\u8fd4\u56deFALSE\u3002\u8ba9\u6211\u4eec\u770b\u770b\u5982\u4f55\u4f7f\u7528CallableStatement\u6765\u6267\u884cinsertEmployee\u5b58\u50a8\u8fc7\u7a0b\u4ee5\u63d2\u5165\u5458\u5de5\u6570\u636e\u3002JDBCStoredProcedureWrite.java<\/p>\n<pre class=\"post-pre\"><code>package com.Olivia.jdbc.storedproc;\r\n\r\nimport java.sql.CallableStatement;\r\nimport java.sql.Connection;\r\nimport java.sql.SQLException;\r\nimport java.util.Scanner;\r\n\r\npublic class JDBCStoredProcedureWrite {\r\n\r\n\tpublic static void main(String[] args) {\r\n\t\tConnection con = null;\r\n\t\tCallableStatement stmt = null;\r\n\t\t\r\n\t\t\/\/Read User Inputs\r\n\t\tScanner input = new Scanner(System.in);\r\n\t\tSystem.out.println(\"Enter Employee ID (int):\");\r\n\t\tint id = Integer.parseInt(input.nextLine());\r\n\t\tSystem.out.println(\"Enter Employee Name:\");\r\n\t\tString name = input.nextLine();\r\n\t\tSystem.out.println(\"Enter Employee Role:\");\r\n\t\tString role = input.nextLine();\r\n\t\tSystem.out.println(\"Enter Employee City:\");\r\n\t\tString city = input.nextLine();\r\n\t\tSystem.out.println(\"Enter Employee Country:\");\r\n\t\tString country = input.nextLine();\r\n\t\t\r\n\t\ttry{\r\n\t\t\tcon = DBConnection.getConnection();\r\n\t\t\tstmt = con.prepareCall(\"{call insertEmployee(?,?,?,?,?,?)}\");\r\n\t\t\tstmt.setInt(1, id);\r\n\t\t\tstmt.setString(2, name);\r\n\t\t\tstmt.setString(3, role);\r\n\t\t\tstmt.setString(4, city);\r\n\t\t\tstmt.setString(5, country);\r\n\t\t\t\r\n\t\t\t\/\/register the OUT parameter before calling the stored procedure\r\n\t\t\tstmt.registerOutParameter(6, java.sql.Types.VARCHAR);\r\n\t\t\t\r\n\t\t\tstmt.executeUpdate();\r\n\t\t\t\r\n\t\t\t\/\/read the OUT parameter now\r\n\t\t\tString result = stmt.getString(6);\r\n\t\t\t\r\n\t\t\tSystem.out.println(\"Employee Record Save Success::\"+result);\r\n\t\t}catch(Exception e){\r\n\t\t\te.printStackTrace();\r\n\t\t}finally{\r\n\t\t\ttry {\r\n\t\t\t\tstmt.close();\r\n\t\t\t\tcon.close();\r\n\t\t\t\tinput.close();\r\n\t\t\t} catch (SQLException e) {\r\n\t\t\t\te.printStackTrace();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n}\r\n<\/code><\/pre>\n<p>\u6211\u4eec\u6b63\u5728\u8bfb\u53d6\u7528\u6237\u8f93\u5165\u5e76\u5c06\u5176\u5b58\u50a8\u5728\u5458\u5de5\u8868\u4e2d\u3002\u4e0ePreparedStatement\u552f\u4e00\u4e0d\u540c\u7684\u662f\u901a\u8fc7&#8221;{call insertEmployee(?,?,?,?,?,?)}&#8221;\u521b\u5efaCallableStatement\uff0c\u4ee5\u53ca\u4f7f\u7528CallableStatement\u7684registerOutParameter()\u65b9\u6cd5\u8bbe\u7f6eOUT\u53c2\u6570\u3002\u5728\u6267\u884c\u5b58\u50a8\u8fc7\u7a0b\u4e4b\u524d\uff0c\u6211\u4eec\u5fc5\u987b\u6ce8\u518cOUT\u53c2\u6570\u3002\u4e00\u65e6\u6267\u884c\u5b58\u50a8\u8fc7\u7a0b\uff0c\u6211\u4eec\u5c31\u53ef\u4ee5\u4f7f\u7528CallableStatement\u7684getXXX()\u65b9\u6cd5\u83b7\u53d6OUT\u5bf9\u8c61\u6570\u636e\u3002\u8bf7\u6ce8\u610f\uff0c\u5728\u6ce8\u518cOUT\u53c2\u6570\u65f6\uff0c\u6211\u4eec\u9700\u8981\u901a\u8fc7java.sql.Types\u6307\u5b9aOUT\u53c2\u6570\u7684\u7c7b\u578b\u3002\u4ee3\u7801\u7684\u6027\u8d28\u662f\u901a\u7528\u7684\uff0c\u56e0\u6b64\u5982\u679c\u6211\u4eec\u5728\u5176\u4ed6\u5173\u7cfb\u578b\u6570\u636e\u5e93\uff08\u5982MySQL\uff09\u4e2d\u6709\u540c\u6837\u7684\u5b58\u50a8\u8fc7\u7a0b\uff0c\u6211\u4eec\u4e5f\u53ef\u4ee5\u4f7f\u7528\u8fd9\u4e2a\u7a0b\u5e8f\u6765\u6267\u884c\u5b83\u4eec\u3002\u5f53\u6211\u4eec\u591a\u6b21\u6267\u884c\u4e0a\u8ff0CallableStatement\u793a\u4f8b\u7a0b\u5e8f\u65f6\uff0c\u4e0b\u9762\u662f\u8f93\u51fa\u7ed3\u679c\u3002<\/p>\n<pre class=\"post-pre\"><code>Enter Employee ID (int):\r\n1\r\nEnter Employee Name:\r\nPankaj\r\nEnter Employee Role:\r\nDeveloper\r\nEnter Employee City:\r\nBangalore\r\nEnter Employee Country:\r\nIndia\r\nEmployee Record Save Success::TRUE\r\n\r\n-----\r\nEnter Employee ID (int):\r\n2\r\nEnter Employee Name:\r\nPankaj Kumar\r\nEnter Employee Role:\r\nCEO\r\nEnter Employee City:\r\nSan Jose\r\nEnter Employee Country:\r\nUSA\r\nEmployee Record Save Success::FALSE\r\n<\/code><\/pre>\n<p>\u6ce8\u610f\u5230\u7b2c\u4e8c\u6b21\u6267\u884c\u5931\u8d25\u662f\u56e0\u4e3a\u4f20\u9012\u7684\u540d\u79f0\u5927\u4e8e\u5217\u7684\u5927\u5c0f\u3002\u6211\u4eec\u5728\u5b58\u50a8\u8fc7\u7a0b\u4e2d\u6355\u83b7\u4e86\u5f02\u5e38\u5e76\u8fd4\u56defalse\u3002<\/p>\n<h3>\u53ef\u8c03\u7528\u8bed\u53e5\u793a\u4f8b &#8211; \u5b58\u50a8\u8fc7\u7a0b\u7684 OUT \u53c2\u6570<\/p>\n<h2>\u4f7f\u7528CallableStatement\u8c03\u7528\u5b58\u50a8\u8fc7\u7a0b\u83b7\u53d6\u5458\u5de5\u6570\u636e<\/h2>\n<p>\u73b0\u5728\u8ba9\u6211\u4eec\u7f16\u5199\u4e00\u4e2a\u5b58\u50a8\u8fc7\u7a0b\u6765\u901a\u8fc7ID\u83b7\u53d6\u5458\u5de5\u6570\u636e\u3002\u7528\u6237\u5c06\u8f93\u5165\u5458\u5de5ID\uff0c\u7a0b\u5e8f\u5c06\u663e\u793a\u5458\u5de5\u4fe1\u606f\u3002\u4f7f\u7528getEmployee.sql\u3002<\/p>\n<pre class=\"post-pre\"><code>create or replace\r\nPROCEDURE getEmployee\r\n(in_id IN EMPLOYEE.EMPID%TYPE,\r\n out_name OUT EMPLOYEE.NAME%TYPE,\r\n out_role OUT EMPLOYEE.ROLE%TYPE,\r\n out_city OUT EMPLOYEE.CITY%TYPE,\r\n out_country OUT EMPLOYEE.COUNTRY%TYPE\r\n )\r\nAS\r\nBEGIN\r\n  SELECT NAME, ROLE, CITY, COUNTRY \r\n  INTO out_name, out_role, out_city, out_country\r\n  FROM EMPLOYEE\r\n  WHERE EMPID = in_id;\r\n  \r\nEND;\r\n<\/code><\/pre>\n<p>\u4f7f\u7528getEmployee\u5b58\u50a8\u8fc7\u7a0b\u8bfb\u53d6\u5458\u5de5\u6570\u636e\u7684Java CallableStatement\u793a\u4f8b\u7a0b\u5e8f\u662fJDBCStoredProcedureRead.java\u3002<\/p>\n<pre class=\"post-pre\"><code>package com.Olivia.jdbc.storedproc;\r\n\r\nimport java.sql.CallableStatement;\r\nimport java.sql.Connection;\r\nimport java.sql.SQLException;\r\nimport java.util.Scanner;\r\n\r\npublic class JDBCStoredProcedureRead {\r\n\r\n\tpublic static void main(String[] args) {\r\n\t\tConnection con = null;\r\n\t\tCallableStatement stmt = null;\r\n\t\t\r\n\t\t\/\/\u8bfb\u53d6\u7528\u6237\u8f93\u5165\r\n\t\tScanner input = new Scanner(System.in);\r\n\t\tSystem.out.println(\"\u8bf7\u8f93\u5165\u5458\u5de5ID\uff08\u6574\u6570\uff09:\");\r\n\t\tint id = Integer.parseInt(input.nextLine());\r\n\t\t\r\n\t\ttry{\r\n\t\t\tcon = DBConnection.getConnection();\r\n\t\t\tstmt = con.prepareCall(\"{call getEmployee(?,?,?,?,?)}\");\r\n\t\t\tstmt.setInt(1, id);\r\n\t\t\t\r\n\t\t\t\/\/\u5728\u8c03\u7528\u5b58\u50a8\u8fc7\u7a0b\u4e4b\u524d\u6ce8\u518cOUT\u53c2\u6570\r\n\t\t\tstmt.registerOutParameter(2, java.sql.Types.VARCHAR);\r\n\t\t\tstmt.registerOutParameter(3, java.sql.Types.VARCHAR);\r\n\t\t\tstmt.registerOutParameter(4, java.sql.Types.VARCHAR);\r\n\t\t\tstmt.registerOutParameter(5, java.sql.Types.VARCHAR);\r\n\t\t\t\r\n\t\t\tstmt.execute();\r\n\t\t\t\r\n\t\t\t\/\/\u73b0\u5728\u8bfb\u53d6OUT\u53c2\u6570\r\n\t\t\tString name = stmt.getString(2);\r\n\t\t\tString role = stmt.getString(3);\r\n\t\t\tString city = stmt.getString(4);\r\n\t\t\tString country = stmt.getString(5);\r\n\t\t\t\r\n\t\t\tif(name !=null){\r\n\t\t\tSystem.out.println(\"\u5458\u5de5\u59d3\u540d=\"+name+\",\u804c\u4f4d=\"+role+\",\u57ce\u5e02=\"+city+\",\u56fd\u5bb6=\"+country);\r\n\t\t\t}else{\r\n\t\t\t\tSystem.out.println(\"\u672a\u627e\u5230ID\u4e3a\"+id+\"\u7684\u5458\u5de5\");\r\n\t\t\t}\r\n\t\t}catch(Exception e){\r\n\t\t\te.printStackTrace();\r\n\t\t}finally{\r\n\t\t\ttry {\r\n\t\t\t\tstmt.close();\r\n\t\t\t\tcon.close();\r\n\t\t\t\tinput.close();\r\n\t\t\t} catch (SQLException e) {\r\n\t\t\t\te.printStackTrace();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n}\r\n<\/code><\/pre>\n<p>\u518d\u8bf4\u4e00\u6b21\uff0c\u8fd9\u4e2a\u7a0b\u5e8f\u662f\u901a\u7528\u7684\uff0c\u5e76\u4e14\u9002\u7528\u4e8e\u5177\u6709\u76f8\u540c\u5b58\u50a8\u8fc7\u7a0b\u7684\u4efb\u4f55\u6570\u636e\u5e93\u3002\u8ba9\u6211\u4eec\u770b\u770b\u5f53\u6211\u4eec\u6267\u884c\u4e0a\u8ff0CallableStatement\u793a\u4f8b\u7a0b\u5e8f\u65f6\u7684\u8f93\u51fa\u662f\u4ec0\u4e48\u3002<\/p>\n<pre class=\"post-pre\"><code>\u8bf7\u8f93\u5165\u5458\u5de5ID\uff08\u6574\u6570\uff09:\r\n1\r\n\u5458\u5de5\u59d3\u540d=Pankaj,\u804c\u4f4d=Developer,\u57ce\u5e02=Bangalore,\u56fd\u5bb6=India\r\n<\/code><\/pre>\n<h3>CallableStatement\u793a\u4f8b &#8211; \u4f7f\u7528Oracle\u6e38\u6807\u7684\u5b58\u50a8\u8fc7\u7a0b<\/h3>\n<p>\u7531\u4e8e\u6211\u4eec\u662f\u901a\u8fc7ID\u6765\u8bfb\u53d6\u5458\u5de5\u4fe1\u606f\uff0c\u6240\u4ee5\u6211\u4eec\u5f97\u5230\u7684\u662f\u5355\u4e2a\u7ed3\u679c\uff0cOUT\u53c2\u6570\u5f88\u9002\u7528\u4e8e\u8bfb\u53d6\u6570\u636e\u3002\u4f46\u662f\u5982\u679c\u6211\u4eec\u901a\u8fc7\u89d2\u8272\u6216\u56fd\u5bb6\u6765\u641c\u7d22\uff0c\u53ef\u80fd\u4f1a\u5f97\u5230\u591a\u884c\u7ed3\u679c\uff0c\u5728\u8fd9\u79cd\u60c5\u51b5\u4e0b\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528Oracle\u7684\u6e38\u6807\uff08CURSOR\uff09\u6765\u50cf\u7ed3\u679c\u96c6\u4e00\u6837\u8bfb\u53d6\u5b83\u4eec\u3002\u4f7f\u7528getEmployeeByRole.sql\u8bed\u53e5\u3002<\/p>\n<pre class=\"post-pre\"><code>create or replace\r\nPROCEDURE getEmployeeByRole\r\n(in_role IN EMPLOYEE.ROLE%TYPE,\r\n out_cursor_emps OUT SYS_REFCURSOR\r\n )\r\nAS\r\nBEGIN\r\n  OPEN out_cursor_emps FOR\r\n  SELECT EMPID, NAME, CITY, COUNTRY \r\n  FROM EMPLOYEE\r\n  WHERE ROLE = in_role;\r\n  \r\nEND;\r\n<\/code><\/pre>\n<p>JDBCStoredProcedureCursor.java<\/p>\n<pre class=\"post-pre\"><code>package com.Olivia.jdbc.storedproc;\r\n\r\nimport java.sql.CallableStatement;\r\nimport java.sql.Connection;\r\nimport java.sql.ResultSet;\r\nimport java.sql.SQLException;\r\nimport java.util.Scanner;\r\n\r\nimport oracle.jdbc.OracleTypes;\r\n\r\npublic class JDBCStoredProcedureCursor {\r\n\r\n\tpublic static void main(String[] args) {\r\n\r\n\t\tConnection con = null;\r\n\t\tCallableStatement stmt = null;\r\n\t\tResultSet rs = null;\r\n\t\t\r\n\t\t\/\/\u8bfb\u53d6\u7528\u6237\u8f93\u5165\r\n\t\tScanner input = new Scanner(System.in);\r\n\t\tSystem.out.println(\"\u8bf7\u8f93\u5165\u5458\u5de5\u804c\u4f4d:\");\r\n\t\tString role = input.nextLine();\r\n\t\t\r\n\t\ttry{\r\n\t\t\tcon = DBConnection.getConnection();\r\n\t\t\tstmt = con.prepareCall(\"{call getEmployeeByRole(?,?)}\");\r\n\t\t\tstmt.setString(1, role);\r\n\t\t\t\r\n\t\t\t\/\/\u5728\u8c03\u7528\u5b58\u50a8\u8fc7\u7a0b\u4e4b\u524d\u6ce8\u518cOUT\u53c2\u6570\r\n\t\t\tstmt.registerOutParameter(2, OracleTypes.CURSOR);\r\n\t\t\t\r\n\t\t\tstmt.execute();\r\n\t\t\t\r\n\t\t\t\/\/\u73b0\u5728\u8bfb\u53d6OUT\u53c2\u6570\r\n\t\t\trs = (ResultSet) stmt.getObject(2);\r\n\t\t\t\r\n\t\t\twhile(rs.next()){\r\n\t\t\t\tSystem.out.println(\"\u5458\u5de5ID=\"+rs.getInt(\"empId\")+\",\u59d3\u540d=\"+rs.getString(\"name\")+\r\n\t\t\t\t\t\t\",\u804c\u4f4d=\"+role+\",\u57ce\u5e02=\"+rs.getString(\"city\")+\r\n\t\t\t\t\t\t\",\u56fd\u5bb6=\"+rs.getString(\"country\"));\r\n\t\t\t}\r\n\t\t}catch(Exception e){\r\n\t\t\te.printStackTrace();\r\n\t\t}finally{\r\n\t\t\ttry {\r\n\t\t\t\trs.close();\r\n\t\t\t\tstmt.close();\r\n\t\t\t\tcon.close();\r\n\t\t\t\tinput.close();\r\n\t\t\t} catch (SQLException e) {\r\n\t\t\t\te.printStackTrace();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n}\r\n<\/code><\/pre>\n<p>\u8fd9\u4e2a\u7a0b\u5e8f\u4f7f\u7528\u4e86Oracle OJDBC\u7684\u7279\u5b9a\u7c7b\uff0c\u4e0d\u80fd\u4e0e\u5176\u4ed6\u6570\u636e\u5e93\u4e00\u8d77\u4f7f\u7528\u3002\u6211\u4eec\u5c06OUT\u53c2\u6570\u7c7b\u578b\u8bbe\u7f6e\u4e3aOracleTypes.CURSOR\uff0c\u7136\u540e\u5c06\u5176\u8f6c\u6362\u4e3aResultSet\u5bf9\u8c61\u3002\u4ee3\u7801\u7684\u5176\u4ed6\u90e8\u5206\u662f\u7b80\u5355\u7684JDBC\u7f16\u7a0b\u3002\u5f53\u6211\u4eec\u6267\u884c\u4e0a\u8ff0CallableStatement\u793a\u4f8b\u7a0b\u5e8f\u65f6\uff0c\u6211\u4eec\u5c06\u5f97\u5230\u4ee5\u4e0b\u8f93\u51fa\u3002<\/p>\n<pre class=\"post-pre\"><code>\u8bf7\u8f93\u5165\u5458\u5de5\u804c\u4f4d:\r\nDeveloper\r\n\u5458\u5de5ID=5,\u59d3\u540d=Kumar,\u804c\u4f4d=Developer,\u57ce\u5e02=San Jose,\u56fd\u5bb6=USA\r\n\u5458\u5de5ID=1,\u59d3\u540d=Pankaj,\u804c\u4f4d=Developer,\u57ce\u5e02=Bangalore,\u56fd\u5bb6=India\r\n<\/code><\/pre>\n<p>\u6839\u636e\u60a8\u7684\u5458\u5de5\u8868\u4e2d\u7684\u6570\u636e\uff0c\u60a8\u7684\u8f93\u51fa\u53ef\u80fd\u4f1a\u6709\u6240\u4e0d\u540c\u3002<\/p>\n<h3>CallableStatement\u793a\u4f8b &#8211; Oracle\u6570\u636e\u5e93\u5bf9\u8c61\u548cSTRUCT<\/h3>\n<p>\u8fd9\u662f\u300aJava\u4e2dCallableStatement\u4f7f\u7528\u793a\u4f8b\u300b\u7cfb\u5217\u6587\u7ae0\u7684\u7b2c3\u90e8\u5206\uff08\u51713\u90e8\u5206\uff09\u3002<\/p>\n<p>\u5728\u67e5\u770binsertEmployee\u548cgetEmployee\u5b58\u50a8\u8fc7\u7a0b\u65f6\uff0c\u4f60\u4f1a\u53d1\u73b0\u6211\u5728\u8fd9\u4e9b\u8fc7\u7a0b\u4e2d\u4f7f\u7528\u4e86Employee\u8868\u7684\u6240\u6709\u53c2\u6570\u3002\u5f53\u5217\u6570\u589e\u52a0\u65f6\uff0c\u8fd9\u79cd\u65b9\u5f0f\u53ef\u80fd\u4f1a\u5f15\u8d77\u6df7\u6dc6\u5e76\u4e14\u66f4\u5bb9\u6613\u51fa\u9519\u3002Oracle\u6570\u636e\u5e93\u63d0\u4f9b\u4e86\u521b\u5efa\u6570\u636e\u5e93\u5bf9\u8c61\u7684\u9009\u9879\uff0c\u6211\u4eec\u53ef\u4ee5\u4f7f\u7528Oracle STRUCT\u6765\u64cd\u4f5c\u8fd9\u4e9b\u5bf9\u8c61\u3002\u8ba9\u6211\u4eec\u9996\u5148\u4e3aEmployee\u8868\u5217\u5b9a\u4e49Oracle\u6570\u636e\u5e93\u5bf9\u8c61\u3002\u8bf7\u6267\u884cEMPLOYEE_OBJ.sql\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code>create or replace TYPE EMPLOYEE_OBJ AS OBJECT\r\n(\r\n  EMPID NUMBER,\r\n  NAME VARCHAR2(10),\r\n  ROLE VARCHAR2(10),\r\n  CITY  VARCHAR2(10),\r\n  COUNTRY  VARCHAR2(10)\r\n  \r\n  );\r\n<\/code><\/pre>\n<p>\u73b0\u5728\u8ba9\u6211\u4eec\u4f7f\u7528EMPLOYEE_OBJ\u6765\u91cd\u5199insertEmployee\u5b58\u50a8\u8fc7\u7a0b\u3002\u8bf7\u53c2\u8003insertEmployeeObject.sql\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code>CREATE OR REPLACE PROCEDURE insertEmployeeObject\r\n(IN_EMPLOYEE_OBJ IN EMPLOYEE_OBJ,\r\n out_result OUT VARCHAR2)\r\nAS\r\nBEGIN\r\n  INSERT INTO EMPLOYEE (EMPID, NAME, ROLE, CITY, COUNTRY) values \r\n  (IN_EMPLOYEE_OBJ.EMPID, IN_EMPLOYEE_OBJ.NAME, IN_EMPLOYEE_OBJ.ROLE, IN_EMPLOYEE_OBJ.CITY, IN_EMPLOYEE_OBJ.COUNTRY);\r\n  commit;\r\n  \r\n  out_result := 'TRUE';\r\n  \r\nEXCEPTION\r\n  WHEN OTHERS THEN \r\n  out_result := 'FALSE';\r\n  ROLLBACK;\r\nEND;\r\n<\/code><\/pre>\n<p>\u8ba9\u6211\u4eec\u770b\u770b\u5982\u4f55\u5728Java\u7a0b\u5e8f\u4e2d\u8c03\u7528insertEmployeeObject\u5b58\u50a8\u8fc7\u7a0b\u3002\u8bf7\u53c2\u8003JDBCStoredProcedureOracleStruct.java\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code>package com.Olivia.jdbc.storedproc;\r\n\r\nimport java.sql.Connection;\r\nimport java.sql.SQLException;\r\nimport java.util.Scanner;\r\n\r\nimport oracle.jdbc.OracleCallableStatement;\r\nimport oracle.sql.STRUCT;\r\nimport oracle.sql.StructDescriptor;\r\n\r\npublic class JDBCStoredProcedureOracleStruct {\r\n\r\n\tpublic static void main(String[] args) {\r\n\t\tConnection con = null;\r\n\t\tOracleCallableStatement stmt = null;\r\n\t\t\r\n\t\t\/\/Create Object Array for Stored Procedure call\r\n\t\tObject[] empObjArray = new Object[5];\r\n\t\t\/\/Read User Inputs\r\n\t\tScanner input = new Scanner(System.in);\r\n\t\tSystem.out.println(\"Enter Employee ID (int):\");\r\n\t\tempObjArray[0] = Integer.parseInt(input.nextLine());\r\n\t\tSystem.out.println(\"Enter Employee Name:\");\r\n\t\tempObjArray[1] = input.nextLine();\r\n\t\tSystem.out.println(\"Enter Employee Role:\");\r\n\t\tempObjArray[2] = input.nextLine();\r\n\t\tSystem.out.println(\"Enter Employee City:\");\r\n\t\tempObjArray[3] = input.nextLine();\r\n\t\tSystem.out.println(\"Enter Employee Country:\");\r\n\t\tempObjArray[4] = input.nextLine();\r\n\t\t\r\n\t\ttry{\r\n\t\t\tcon = DBConnection.getConnection();\r\n\t\t\t\r\n\t\t\tStructDescriptor empStructDesc = StructDescriptor.createDescriptor(\"EMPLOYEE_OBJ\", con);\r\n\t\t\tSTRUCT empStruct = new STRUCT(empStructDesc, con, empObjArray);\r\n\t\t\tstmt = (OracleCallableStatement) con.prepareCall(\"{call insertEmployeeObject(?,?)}\");\r\n\t\t\t\r\n\t\t\tstmt.setSTRUCT(1, empStruct);\r\n\t\t\t\r\n\t\t\t\/\/register the OUT parameter before calling the stored procedure\r\n\t\t\tstmt.registerOutParameter(2, java.sql.Types.VARCHAR);\r\n\t\t\t\r\n\t\t\tstmt.executeUpdate();\r\n\t\t\t\r\n\t\t\t\/\/read the OUT parameter now\r\n\t\t\tString result = stmt.getString(2);\r\n\t\t\t\r\n\t\t\tSystem.out.println(\"Employee Record Save Success::\"+result);\r\n\t\t}catch(Exception e){\r\n\t\t\te.printStackTrace();\r\n\t\t}finally{\r\n\t\t\ttry {\r\n\t\t\t\tstmt.close();\r\n\t\t\t\tcon.close();\r\n\t\t\t\tinput.close();\r\n\t\t\t} catch (SQLException e) {\r\n\t\t\t\te.printStackTrace();\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n\r\n}\r\n<\/code><\/pre>\n<p>\u9996\u5148\uff0c\u6211\u4eec\u521b\u5efa\u4e00\u4e2a\u4e0eEMPLOYEE_OBJ\u6570\u636e\u5e93\u5bf9\u8c61\u957f\u5ea6\u76f8\u540c\u7684\u5bf9\u8c61\u6570\u7ec4\u3002\u7136\u540e\uff0c\u6211\u4eec\u6839\u636eEMPLOYEE_OBJ\u5bf9\u8c61\u7684\u53d8\u91cf\u987a\u5e8f\u8bbe\u7f6e\u503c\u3002\u8fd9\u4e00\u70b9\u975e\u5e38\u91cd\u8981\uff0c\u5426\u5219\u6570\u636e\u53ef\u80fd\u4f1a\u63d2\u5165\u5230\u9519\u8bef\u7684\u5217\u4e2d\u3002\u63a5\u7740\uff0c\u6211\u4eec\u4f7f\u7528oracle.sql.StructDescriptor\u548c\u6211\u4eec\u7684\u5bf9\u8c61\u6570\u7ec4\u521b\u5efaoracle.sql.STRUCT\u5bf9\u8c61\u3002\u4e00\u65e6STRUCT\u5bf9\u8c61\u88ab\u521b\u5efa\uff0c\u6211\u4eec\u5c06\u5176\u8bbe\u7f6e\u4e3a\u5b58\u50a8\u8fc7\u7a0b\u7684\u8f93\u5165\u53c2\u6570\uff0c\u6ce8\u518c\u8f93\u51fa\u53c2\u6570\u5e76\u6267\u884c\u5b58\u50a8\u8fc7\u7a0b\u3002\u9700\u8981\u6ce8\u610f\u7684\u662f\uff0c\u8fd9\u6bb5\u4ee3\u7801\u4e0eOJDBC API\u7d27\u5bc6\u8026\u5408\uff0c\u4e0d\u9002\u7528\u4e8e\u5176\u4ed6\u6570\u636e\u5e93\u3002\u6267\u884c\u6b64\u7a0b\u5e8f\u65f6\uff0c\u8f93\u51fa\u7ed3\u679c\u5982\u4e0b\uff1a<\/p>\n<pre class=\"post-pre\"><code>Enter Employee ID (int):\r\n5\r\nEnter Employee Name:\r\nKumar\r\nEnter Employee Role:\r\nDeveloper\r\nEnter Employee City:\r\nSan Jose\r\nEnter Employee Country:\r\nUSA\r\nEmployee Record Save Success::TRUE\r\n<\/code><\/pre>\n<p>\u6211\u4eec\u8fd8\u53ef\u4ee5\u5c06\u6570\u636e\u5e93\u5bf9\u8c61\u4f5c\u4e3aOUT\u53c2\u6570\u4f7f\u7528\uff0c\u5e76\u4ece\u6570\u636e\u5e93\u4e2d\u8bfb\u53d6\u76f8\u5e94\u7684\u503c\u3002\u4ee5\u4e0a\u5c31\u662f\u5173\u4e8e\u5728Java\u4e2d\u4f7f\u7528CallableStatement\u6267\u884c\u5b58\u50a8\u8fc7\u7a0b\u7684\u793a\u4f8b\uff0c\u5e0c\u671b\u8fd9\u4e9b\u5185\u5bb9\u5bf9\u4f60\u6709\u6240\u5e2e\u52a9\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Java\u4e2d\u7684CallableStatement\u7528\u4e8e\u4eceJava\u7a0b\u5e8f\u4e2d\u8c03\u7528\u5b58\u50a8\u8fc7\u7a0b\u3002\u5b58\u50a8\u8fc7\u7a0b\u662f\u4e00\u7ec4\u5728\u6570\u636e\u5e93\u4e2d\u7f16\u8bd1\u7684 [&hellip;]<\/p>\n","protected":false},"author":9,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[1417,1418,180,973,710],"class_list":{"0":"post-458","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"hentry","6":"category-uncategorized","7":"tag-callable","8":"tag-java","10":"tag-973","11":"tag-710"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Java Callable\u63a5\u53e3\u8be6\u89e3\uff1a\u4f7f\u7528\u793a\u4f8b\u4e0e\u6700\u4f73\u5b9e\u8df5 - Blog - Silicon Cloud<\/title>\n<meta name=\"description\" content=\"\u6df1\u5165\u4e86\u89e3Java Callable\u63a5\u53e3\u7684\u4f7f\u7528\u65b9\u6cd5\u4e0e\u5b9e\u9645\u5e94\u7528\u793a\u4f8b\u3002\u672c\u6587\u8be6\u7ec6\u8bb2\u89e3Callable\u4e0eRunnable\u7684\u533a\u522b\uff0cCallable\u5982\u4f55\u8fd4\u56de\u6267\u884c\u7ed3\u679c\uff0c\u4ee5\u53ca\u5728\u591a\u7ebf\u7a0b\u73af\u5883\u4e2d\u7684\u6700\u4f73\u5b9e\u8df5\u3002\u9002\u5408Java\u5f00\u53d1\u8005\u63d0\u5347\u5e76\u53d1\u7f16\u7a0b\u6280\u80fd\u3002\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5728java\u4e2d\u7684\u793a\u4f8b\u4e2d\uff0c\u53ef\u8c03\u7528\u8bed\u53e5\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Java Callable\u63a5\u53e3\u8be6\u89e3\uff1a\u4f7f\u7528\u793a\u4f8b\u4e0e\u6700\u4f73\u5b9e\u8df5\" \/>\n<meta property=\"og:description\" content=\"\u6df1\u5165\u4e86\u89e3Java Callable\u63a5\u53e3\u7684\u4f7f\u7528\u65b9\u6cd5\u4e0e\u5b9e\u9645\u5e94\u7528\u793a\u4f8b\u3002\u672c\u6587\u8be6\u7ec6\u8bb2\u89e3Callable\u4e0eRunnable\u7684\u533a\u522b\uff0cCallable\u5982\u4f55\u8fd4\u56de\u6267\u884c\u7ed3\u679c\uff0c\u4ee5\u53ca\u5728\u591a\u7ebf\u7a0b\u73af\u5883\u4e2d\u7684\u6700\u4f73\u5b9e\u8df5\u3002\u9002\u5408Java\u5f00\u53d1\u8005\u63d0\u5347\u5e76\u53d1\u7f16\u7a0b\u6280\u80fd\u3002\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u5728java\u4e2d\u7684\u793a\u4f8b\u4e2d\uff0c\u53ef\u8c03\u7528\u8bed\u53e5\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-03-30T04:53:51+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-08-02T03:07:12+00:00\" \/>\n<meta name=\"author\" content=\"\u6e05, \u626c\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6e05, \u626c\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8java%e4%b8%ad%e7%9a%84%e7%a4%ba%e4%be%8b%e4%b8%ad%ef%bc%8c%e5%8f%af%e8%b0%83%e7%94%a8%e8%af%ad%e5%8f%a5\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8java%e4%b8%ad%e7%9a%84%e7%a4%ba%e4%be%8b%e4%b8%ad%ef%bc%8c%e5%8f%af%e8%b0%83%e7%94%a8%e8%af%ad%e5%8f%a5\/\",\"name\":\"Java Callable\u63a5\u53e3\u8be6\u89e3\uff1a\u4f7f\u7528\u793a\u4f8b\u4e0e\u6700\u4f73\u5b9e\u8df5 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-03-30T04:53:51+00:00\",\"dateModified\":\"2025-08-02T03:07:12+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461\"},\"description\":\"\u6df1\u5165\u4e86\u89e3Java Callable\u63a5\u53e3\u7684\u4f7f\u7528\u65b9\u6cd5\u4e0e\u5b9e\u9645\u5e94\u7528\u793a\u4f8b\u3002\u672c\u6587\u8be6\u7ec6\u8bb2\u89e3Callable\u4e0eRunnable\u7684\u533a\u522b\uff0cCallable\u5982\u4f55\u8fd4\u56de\u6267\u884c\u7ed3\u679c\uff0c\u4ee5\u53ca\u5728\u591a\u7ebf\u7a0b\u73af\u5883\u4e2d\u7684\u6700\u4f73\u5b9e\u8df5\u3002\u9002\u5408Java\u5f00\u53d1\u8005\u63d0\u5347\u5e76\u53d1\u7f16\u7a0b\u6280\u80fd\u3002\",\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8java%e4%b8%ad%e7%9a%84%e7%a4%ba%e4%be%8b%e4%b8%ad%ef%bc%8c%e5%8f%af%e8%b0%83%e7%94%a8%e8%af%ad%e5%8f%a5\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8java%e4%b8%ad%e7%9a%84%e7%a4%ba%e4%be%8b%e4%b8%ad%ef%bc%8c%e5%8f%af%e8%b0%83%e7%94%a8%e8%af%ad%e5%8f%a5\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8java%e4%b8%ad%e7%9a%84%e7%a4%ba%e4%be%8b%e4%b8%ad%ef%bc%8c%e5%8f%af%e8%b0%83%e7%94%a8%e8%af%ad%e5%8f%a5\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java Callable\u63a5\u53e3\u8be6\u89e3\uff1a\u4f7f\u7528\u793a\u4f8b\u4e0e\u6700\u4f73\u5b9e\u8df5\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461\",\"name\":\"\u6e05, \u626c\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g\",\"caption\":\"\u6e05, \u626c\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyang\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8java%e4%b8%ad%e7%9a%84%e7%a4%ba%e4%be%8b%e4%b8%ad%ef%bc%8c%e5%8f%af%e8%b0%83%e7%94%a8%e8%af%ad%e5%8f%a5\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Java Callable\u63a5\u53e3\u8be6\u89e3\uff1a\u4f7f\u7528\u793a\u4f8b\u4e0e\u6700\u4f73\u5b9e\u8df5 - Blog - Silicon Cloud","description":"\u6df1\u5165\u4e86\u89e3Java Callable\u63a5\u53e3\u7684\u4f7f\u7528\u65b9\u6cd5\u4e0e\u5b9e\u9645\u5e94\u7528\u793a\u4f8b\u3002\u672c\u6587\u8be6\u7ec6\u8bb2\u89e3Callable\u4e0eRunnable\u7684\u533a\u522b\uff0cCallable\u5982\u4f55\u8fd4\u56de\u6267\u884c\u7ed3\u679c\uff0c\u4ee5\u53ca\u5728\u591a\u7ebf\u7a0b\u73af\u5883\u4e2d\u7684\u6700\u4f73\u5b9e\u8df5\u3002\u9002\u5408Java\u5f00\u53d1\u8005\u63d0\u5347\u5e76\u53d1\u7f16\u7a0b\u6280\u80fd\u3002","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u5728java\u4e2d\u7684\u793a\u4f8b\u4e2d\uff0c\u53ef\u8c03\u7528\u8bed\u53e5\/","og_locale":"zh_CN","og_type":"article","og_title":"Java Callable\u63a5\u53e3\u8be6\u89e3\uff1a\u4f7f\u7528\u793a\u4f8b\u4e0e\u6700\u4f73\u5b9e\u8df5","og_description":"\u6df1\u5165\u4e86\u89e3Java Callable\u63a5\u53e3\u7684\u4f7f\u7528\u65b9\u6cd5\u4e0e\u5b9e\u9645\u5e94\u7528\u793a\u4f8b\u3002\u672c\u6587\u8be6\u7ec6\u8bb2\u89e3Callable\u4e0eRunnable\u7684\u533a\u522b\uff0cCallable\u5982\u4f55\u8fd4\u56de\u6267\u884c\u7ed3\u679c\uff0c\u4ee5\u53ca\u5728\u591a\u7ebf\u7a0b\u73af\u5883\u4e2d\u7684\u6700\u4f73\u5b9e\u8df5\u3002\u9002\u5408Java\u5f00\u53d1\u8005\u63d0\u5347\u5e76\u53d1\u7f16\u7a0b\u6280\u80fd\u3002","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u5728java\u4e2d\u7684\u793a\u4f8b\u4e2d\uff0c\u53ef\u8c03\u7528\u8bed\u53e5\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-03-30T04:53:51+00:00","article_modified_time":"2025-08-02T03:07:12+00:00","author":"\u6e05, \u626c","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6e05, \u626c","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"1 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8java%e4%b8%ad%e7%9a%84%e7%a4%ba%e4%be%8b%e4%b8%ad%ef%bc%8c%e5%8f%af%e8%b0%83%e7%94%a8%e8%af%ad%e5%8f%a5\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8java%e4%b8%ad%e7%9a%84%e7%a4%ba%e4%be%8b%e4%b8%ad%ef%bc%8c%e5%8f%af%e8%b0%83%e7%94%a8%e8%af%ad%e5%8f%a5\/","name":"Java Callable\u63a5\u53e3\u8be6\u89e3\uff1a\u4f7f\u7528\u793a\u4f8b\u4e0e\u6700\u4f73\u5b9e\u8df5 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-03-30T04:53:51+00:00","dateModified":"2025-08-02T03:07:12+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461"},"description":"\u6df1\u5165\u4e86\u89e3Java Callable\u63a5\u53e3\u7684\u4f7f\u7528\u65b9\u6cd5\u4e0e\u5b9e\u9645\u5e94\u7528\u793a\u4f8b\u3002\u672c\u6587\u8be6\u7ec6\u8bb2\u89e3Callable\u4e0eRunnable\u7684\u533a\u522b\uff0cCallable\u5982\u4f55\u8fd4\u56de\u6267\u884c\u7ed3\u679c\uff0c\u4ee5\u53ca\u5728\u591a\u7ebf\u7a0b\u73af\u5883\u4e2d\u7684\u6700\u4f73\u5b9e\u8df5\u3002\u9002\u5408Java\u5f00\u53d1\u8005\u63d0\u5347\u5e76\u53d1\u7f16\u7a0b\u6280\u80fd\u3002","breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8java%e4%b8%ad%e7%9a%84%e7%a4%ba%e4%be%8b%e4%b8%ad%ef%bc%8c%e5%8f%af%e8%b0%83%e7%94%a8%e8%af%ad%e5%8f%a5\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8java%e4%b8%ad%e7%9a%84%e7%a4%ba%e4%be%8b%e4%b8%ad%ef%bc%8c%e5%8f%af%e8%b0%83%e7%94%a8%e8%af%ad%e5%8f%a5\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8java%e4%b8%ad%e7%9a%84%e7%a4%ba%e4%be%8b%e4%b8%ad%ef%bc%8c%e5%8f%af%e8%b0%83%e7%94%a8%e8%af%ad%e5%8f%a5\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"Java Callable\u63a5\u53e3\u8be6\u89e3\uff1a\u4f7f\u7528\u793a\u4f8b\u4e0e\u6700\u4f73\u5b9e\u8df5"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/cb5556d2501da73d864cac945e8d9461","name":"\u6e05, \u626c","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/32a4239de8ff29adace466261d309424a1e5fe9f7e3036bf89fe03f2e3dbe717?s=96&d=mm&r=g","caption":"\u6e05, \u626c"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyang\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e5%9c%a8java%e4%b8%ad%e7%9a%84%e7%a4%ba%e4%be%8b%e4%b8%ad%ef%bc%8c%e5%8f%af%e8%b0%83%e7%94%a8%e8%af%ad%e5%8f%a5\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/458","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=458"}],"version-history":[{"count":4,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/458\/revisions"}],"predecessor-version":[{"id":110081,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/458\/revisions\/110081"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=458"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=458"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=458"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}