GVKun编程网logo

如何使用Java / JDBC在Oracle数据库中存储超过4000个字符的字符串?(oracle超过4000的字符 clob)

17

在本文中,您将会了解到关于如何使用Java/JDBC在Oracle数据库中存储超过4000个字符的字符串?的新资讯,同时我们还将为您解释oracle超过4000的字符clob的相关在本文中,我们将带你

在本文中,您将会了解到关于如何使用Java / JDBC在Oracle数据库中存储超过4000个字符的字符串?的新资讯,同时我们还将为您解释oracle超过4000的字符 clob的相关在本文中,我们将带你探索如何使用Java / JDBC在Oracle数据库中存储超过4000个字符的字符串?的奥秘,分析oracle超过4000的字符 clob的特点,并给出一些关于Java JDBC链接Oracle数据库、java中JDBC连接Oracle数据库、Java如何利用JDBC调用Oracle存储、Java案例:利用JDBC连接Oracle数据库的实用技巧。

本文目录一览:

如何使用Java / JDBC在Oracle数据库中存储超过4000个字符的字符串?(oracle超过4000的字符 clob)

如何使用Java / JDBC在Oracle数据库中存储超过4000个字符的字符串?(oracle超过4000的字符 clob)

我不确定如何使用Java / JDBC在Oracle数据库中插入一个很长的字符串。

我有一个字符串,该字符串大于4000个字符,可以说是6000个字符。我想将此字符串存储在Oracle数据库中。

执行此操作的方法似乎是使用CLOB数据类型。好的,因此我将该列声明为描述CLOB。

现在,当需要实际插入数据时,我有一个准备好的语句pstmt。看起来像pstmt = conn.prepareStatement(“INSERT INTOTable VALUES(?)”)

所以我想用这个方法pstmt.setClob()。但是,我不知道如何创建一个包含String的Clob对象。没有构造函数(大概是因为它可能比可用内存大得多)。

如何将字符串放入Clob?

请记住,我不是一个非常有经验的程序员。请尽量使说明尽可能简单。效率,良好做法等不是这里的问题,我只想要绝对最简单的解决方案。如果可能的话,我想避免下载其他软件包;现在我只是在使用JDK
1.4和标有标签的东西ojdbc14.jar。我环顾了一下,但无法按照我发现的任何解释进行操作。

如果您有不使用Clobs的解决方案,那么我也乐于接受,但必须是一栏。

答案1

小编典典

您(至少)有两个选择:

  • 用于connection.createClob()创建Clob,设置数据以及在准备好的语句上进行设置。这将适用于较小的数据

  • 使用preparedStatement.setClob(position, reader)-在这里您将有一个Reader实例。

Java JDBC链接Oracle数据库

Java JDBC链接Oracle数据库

package com.test.test;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

/**
* 通过Java JDBC链接Oracle数据库
* @author Administrator
*
*/
public class OracleJdbcTest {
String driver;

Connection con;

public void init(FileInputStream fs) throws ClassNotFoundException,
SQLException, FileNotFoundException, IOException {
Properties props = new Properties();
props.load(fs);
String url = props.getProperty("db.url");
String userName = props.getProperty("db.user");
String password = props.getProperty("db.password");
Class.forName(driverClass);
con = DriverManager.getConnection(url, userName, password);
}

public void fetch() throws SQLException, IOException {
PreparedStatement ps = con.prepareStatement("select SYSDATE from dual");
ResultSet rs = ps.executeQuery();
while (rs.next()) {
// do the thing you do
}
rs.close();
ps.close();
}

public static void main(String[] args) throws ClassNotFoundException,
FileNotFoundException, SQLException, IOException {
OracleJdbcTest test = new OracleJdbcTest();
//配置文件路径
FileInputStream fs = null;
test.init(fs);
test.fetch();
}
}


 

java中JDBC连接Oracle数据库

java中JDBC连接Oracle数据库


 







package com.xxxx.lunwen.test;

import java.sql.*;
public class DBUtil {
static
{
try
{
// 加载Oracle驱动程序
Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
System.out.println("oracle驱动程序加载中!");
}
catch(InstantiationException e1)
{
System.out.println("实例异常");
}
catch(IllegalAccessException e2)
{
System.out.println("访问异常");
}
catch(ClassNotFoundException e3)
{
System.out.println("MySQL驱动类找不到");
}
}

/***
* 返回一个数据库连接
*/
public static Connection getConnection()
{
Connection connection = null;// 创建一个数据库连接
try
{
System.out.println("开始尝试连接数据库!");
String url = "jdbc:oracle:thin:@127.0.0.1:1521:xkpt";//Oracle的默认数据库名
String user = "xkpt";// 系统默认的用户名
String password = "123456";// 安装时设置的密码
connection = DriverManager.getConnection(url, user, password);// 获取连接
System.out.println(url);
System.out.println("用户名:"+user+"\t"+"密码:******");
System.out.println("数据库连接成功!");
return connection;
}
catch (Exception e)
{
e.printStackTrace();
return null;
}
}

}

Java如何利用JDBC调用Oracle存储

Java如何利用JDBC调用Oracle存储

Java JDBC调用Oracle存储过程一般有3种:

1.无返回值

2.有一个返回值

3.返回一个数据集,就是游标!

关键字:call 语法格式{call 存储过程名(参数列表)}

废话不说,见代码!

Java JDBC调用Oracle存储过程业务实例:

1.添加员工,如果指定部门不存在,则先添加部门信息,再添加员工(无返回值)

--创建存储过程如下  

CREATE OR REPLACE PROCEDURE sp_add_emp1(          v_empno emp.empno%TYPE,          v_ename emp.ename%TYPE,          v_deptno dept.deptno%TYPE,          v_dname dept.dname%TYPE      )AS         num1 NUMBER;          num2 NUMBER;      BEGIN        SELECT COUNT(*) INTO num1 FROM dept WHERE deptno=v_deptno;      IF(num1=0) THEN        INSERT INTO dept(deptno,dname) VALUES(v_deptno,v_dname);      END IF;         SELECT COUNT(*) INTO num2 FROM emp WHERE empno=v_empno;      IF(num2=0)THEN        INSERT INTO emp(empno,ename,deptno) VALUES(v_empno,v_ename,v_deptno);      ELSE         raise_application_error(-202021,''员工id 重复!!!'');      END IF;         commit;           END;      CREATE OR REPLACE PROCEDURE sp_add_emp1(     v_empno emp.empno%TYPE,     v_ename emp.ename%TYPE,     v_deptno dept.deptno%TYPE,     v_dname dept.dname%TYPE  )AS    num1 NUMBER;     num2 NUMBER;  BEGIN    SELECT COUNT(*) INTO num1 FROM dept WHERE deptno=v_deptno;  IF(num1=0) THEN    INSERT INTO dept(deptno,dname) VALUES(v_deptno,v_dname);  END IF;     SELECT COUNT(*) INTO num2 FROM emp WHERE empno=v_empno;  IF(num2=0)THEN    INSERT INTO emp(empno,ename,deptno) VALUES(v_empno,v_ename,v_deptno);  ELSE    raise_application_error(-202021,''员工id 重复!!!'');  END IF;     commit;   END;
登录后复制

Java中调用代码1:

Class.forName("oracle.jdbc.driver.OracleDriver");      conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger");      conn.setAutoCommit(false);           conn=DBConnection.getDBConnection().getConnection();      String spName="{call sp_add_emp1(?,?,?,?)}";      CallableStatement cstmt=conn.prepareCall(spName);      cstmt.setInt(1, 2);      cstmt.setString(2, "wwww");      cstmt.setInt(3, 1);      cstmt.setString(4, "qwqwq");      cstmt.executeUpdate();           conn.close();        Class.forName("oracle.jdbc.driver.OracleDriver");    conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger");    conn.setAutoCommit(false);     conn=DBConnection.getDBConnection().getConnection();    String spName="{call sp_add_emp1(?,?,?,?)}";    CallableStatement cstmt=conn.prepareCall(spName);    cstmt.setInt(1, 2);    cstmt.setString(2, "wwww");    cstmt.setInt(3, 1);    cstmt.setString(4, "qwqwq");    cstmt.executeUpdate();     conn.close();
登录后复制

2.需求同上, 只是返回该部门的员工总数。(有一个返回值)

--创建存储过程如下  

CREATE OR REPLACE PROCEDURE sp_add_emp2(          v_empno emp.empno%TYPE,          v_ename emp.ename%TYPE,          v_deptno dept.deptno%TYPE,          v_dname dept.dname%TYPE,               num out number      )AS         num1 NUMBER;          num2 NUMBER;      BEGIN        SELECT COUNT(*) INTO num1 FROM dept WHERE deptno=v_deptno;      IF(num1=0) THEN        INSERT INTO dept(deptno,dname) VALUES(v_deptno,v_dname);      END IF;         SELECT COUNT(*) INTO num2 FROM emp WHERE empno=v_empno;      IF(num2=0)THEN        INSERT INTO emp(empno,ename,deptno) VALUES(v_empno,v_ename,v_deptno);      ELSE         raise_application_error(-202021,''员工id 重复!!!'');      END IF;               num:=num1;         commit;           END;      CREATE OR REPLACE PROCEDURE sp_add_emp2(     v_empno emp.empno%TYPE,     v_ename emp.ename%TYPE,     v_deptno dept.deptno%TYPE,     v_dname dept.dname%TYPE,      num out number  )AS    num1 NUMBER;     num2 NUMBER;  BEGIN    SELECT COUNT(*) INTO num1 FROM dept WHERE deptno=v_deptno;  IF(num1=0) THEN    INSERT INTO dept(deptno,dname) VALUES(v_deptno,v_dname);  END IF;     SELECT COUNT(*) INTO num2 FROM emp WHERE empno=v_empno;  IF(num2=0)THEN    INSERT INTO emp(empno,ename,deptno) VALUES(v_empno,v_ename,v_deptno);  ELSE    raise_application_error(-202021,''员工id 重复!!!'');  END IF;      num:=num1;     commit;   END;
登录后复制

Java中调用代码2:

Class.forName("oracle.jdbc.driver.OracleDriver");      conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger");      conn.setAutoCommit(false);           conn=DBConnection.getDBConnection().getConnection();           String spName="{call sp_add_emp2(?,?,?,?,?)}";      CallableStatement cstmt=conn.prepareCall(spName);      cstmt.setInt(1,1111);      cstmt.setString(2, "qqqq");      cstmt.setInt(3, 50);      cstmt.setString(4, "pppp");      cstmt.registerOutParameter(5, java.sql.Types.INTEGER);      cstmt.executeUpdate();      int i = cstmt.getInt(5);      System.out.println(i);      cstmt.close();      conn.close();           Class.forName("oracle.jdbc.driver.OracleDriver");       conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger");       conn.setAutoCommit(false);        conn=DBConnection.getDBConnection().getConnection();        String spName="{call sp_add_emp2(?,?,?,?,?)}";       CallableStatement cstmt=conn.prepareCall(spName);       cstmt.setInt(1,1111);       cstmt.setString(2, "qqqq");       cstmt.setInt(3, 50);       cstmt.setString(4, "pppp");       cstmt.registerOutParameter(5, java.sql.Types.INTEGER);       cstmt.executeUpdate();       int i = cstmt.getInt(5);       System.out.println(i);       cstmt.close();       conn.close();
登录后复制

3.需求同上, 并返回该部门的员工信息(工号和姓名)。(返回一个游标)

--创建存储过程如下

Sql代码

--1.建包   

CREATE OR REPLACE PACKAGE my_pak AS        TYPE my_cus IS REF CURSOR   ;      END my_pak;
登录后复制

--2.写存储返回过程    

CREATE OR REPLACE PROCEDURE sp_add_emp3(          v_empno emp.empno%TYPE,          v_ename emp.ename%TYPE,          v_deptno dept.deptno%TYPE,          v_dname dept.dname%TYPE,               p_cus OUT my_pak.my_cus      )AS         num1 NUMBER;          num2 NUMBER;      BEGIN          OPEN p_cus FOR select empno,ename into v_empno,v_ename  from emp where deptno =v_deptno         SELECT COUNT(*) INTO num1 FROM dept WHERE deptno=v_deptno;      IF(num1=0) THEN        INSERT INTO dept(deptno,dname) VALUES(v_deptno,v_dname);      END IF;         SELECT COUNT(*) INTO num2 FROM emp WHERE empno=v_empno;      IF(num2=0)THEN        INSERT INTO emp(empno,ename,deptno) VALUES(v_empno,v_ename,v_deptno);      ELSE         raise_application_error(-202021,''员工id 重复!!!'');      END IF;         commit;           END;
登录后复制

--1.建包

CREATE OR REPLACE PACKAGE my_pak AS  TYPE my_cus IS REF CURSOR  ;  END my_pak;
登录后复制

--2.写存储返回过程

CREATE OR REPLACE PROCEDURE sp_add_emp3(     v_empno emp.empno%TYPE,     v_ename emp.ename%TYPE,     v_deptno dept.deptno%TYPE,     v_dname dept.dname%TYPE,      p_cus OUT my_pak.my_cus  )AS    num1 NUMBER;     num2 NUMBER;  BEGIN  OPEN p_cus FOR select empno,ename into v_empno,v_ename  from emp where deptno =v_deptno      SELECT COUNT(*) INTO num1 FROM dept WHERE deptno=v_deptno;  IF(num1=0) THEN    INSERT INTO dept(deptno,dname) VALUES(v_deptno,v_dname);  END IF;     SELECT COUNT(*) INTO num2 FROM emp WHERE empno=v_empno;  IF(num2=0)THEN    INSERT INTO emp(empno,ename,deptno) VALUES(v_empno,v_ename,v_deptno);  ELSE    raise_application_error(-202021,''员工id 重复!!!'');  END IF;     commit;   END;
登录后复制

Java JDBC调用Oracle,Java中调用代码3: 

Class.forName("oracle.jdbc.driver.OracleDriver");      conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:orcl","scott","tiger");      conn.setAutoCommit(false);           conn=DBConnection.getDBConnection().getConnection();           String spName="{call sp_add_emp2(?,?,?,?,?)}";      CallableStatement cstmt=conn.prepareCall(spName);      cstmt.setInt(1,1111);      cstmt.setString(2, "qqqq");      cstmt.setInt(3, 50);      cstmt.setString(4, "pppp");      cstmt.registerOutParameter(5, java.sql.Types.ORACLETYPE);      cstmt.executeUpdate();      int i = cstmt.getInt(5);      System.out.println(i);      cstmt.close();      conn.close();
登录后复制

以上就是Java如何利用JDBC调用Oracle存储的详细内容,更多请关注php中文网其它相关文章!

Java案例:利用JDBC连接Oracle数据库

Java案例:利用JDBC连接Oracle数据库

Java案例:利用JDBC连接Oracle数据库

一、准备工作

1、启动SQL Developer,设置java.exe路径

2、在Oracle SQL Developer里,新建数据库连接

 

连接名:system(任意)
用户名:sys
口令:Hw903213
角色:SYSDBA
SID:orcl

3、在system连接里创建新用户

本文同步分享在 博客“howard2005”(CSDN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

我们今天的关于如何使用Java / JDBC在Oracle数据库中存储超过4000个字符的字符串?oracle超过4000的字符 clob的分享已经告一段落,感谢您的关注,如果您想了解更多关于Java JDBC链接Oracle数据库、java中JDBC连接Oracle数据库、Java如何利用JDBC调用Oracle存储、Java案例:利用JDBC连接Oracle数据库的相关信息,请在本站查询。

本文标签: