在本文中,您将会了解到关于如何使用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数据库
- java中JDBC连接Oracle数据库
- Java如何利用JDBC调用Oracle存储
- Java案例:利用JDBC连接Oracle数据库
如何使用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数据库
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数据库

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存储过程一般有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数据库
一、准备工作
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数据库的相关信息,请在本站查询。
本文标签: