人大金仓数据库KingbaseES- JDBC

本文详细介绍了KingbaseESJDBC驱动的使用,涵盖了JDBC接口、连接数据库的两种方法(DriverManager和DataSource)、SQL操作(Statement、PreparedStatement和CallableStatement)以及结果集处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关键字:

KingbaseES、JDBC、人大金仓

JDBC介绍

Java数据库连接即JDBC是一种Java标准,提供了从Java连接到关系型数据库的接口。JDBC标准是通过标准java.sql接口定义和实现的,数据库厂商能够通过实现和扩展JDBC标准,实现自身的JDBC驱动程序。

Kingbase JDBC介绍

KingbaseES JDBC提供了Java的JDBC驱动程序kingbase8jdbc,它支持SUN JDBC 3.0和部分4.0API的标准。通过JDBC接口对象,应用程序可以完成与数据库的连接、执行SQL语句、从数据库中获取结果、状态及错误信息、终止事务和连接等操作。

JDBC API 是Java平台的一个部分,它由两个包组成:java.sql和javax.sql。在java.sql和javax.sql中包含了多个类和多个标准接口。Kingbase JDBC主要实现了只写标准接口,还实现了特定的数据源接口。

目前,KingbaseES JDBC实现的标准接口有:

java.sql.Driver

java.sql.Connection

java.sql.Statement

java.sql.PreparedStatement

java.sql.CallableStatement

java.sql.DatabaseMetaData

java.sql.ParameterMetaData

java.sql.ResultSet

java.sql.ResultMetaData

java.sql.Savepoint

java.sql.Clob

java.sql.Blob

java.sql.SQLXML

java.sql.Array

java.sql.RowId

java.sql.Struct

javax.sql.DataSource

javax.sql.CommonDataSource

javax.sql.ConnectionEventListener

javax.sql.ConnectionPoolDataSource

javax.sql.PooledConnection

javax.sql.XAConnection

javax.sql.XADataSource

JDBC的操作过程

在客户端使用KingbaseES JDBC来访问和操作KingbaseES数据库中的数据通常包括以下过程:

●建立与数据库的连接

●创建语句对象

●执行查询并返回结果集对象

●处理结果集对象

●关闭结果集和语句对象

●关闭与数据库的连接

JDBC建立和关闭连接

KingbaseES JDBC中提供了两种建立数据库的连接的方法:通过 DriverManager 和 DataSource。

●使用DriverManger连接数据库

●JDBC连接属性

●使用DataSource连接数据库

4.1 使用DriverManger连接数据库

1.如果应用程序需要通过KingbaseES JDBC来访问和操纵KingbaseES数据库中的数据,则应在程序开始时先装载KingbaseES的JDBC,可以使用下面的语句进行装载:

Class.forName("com.kingbase8.Driver");

DriverManager.registerDriver(new com.kingbase8.Driver());

也可以直接通过以下调用来建立连接:

Connection con = DriverManager.getConnection(TestUtil.getURL(),

TestUtil.getUser(),

TestUtil.getPassword());

2.与数据库建立连接的标准方法是调用DriverManger.getConnection方法,它由以下三种调用格式:

●getConnection(url, user, password)

●getConnection(url, java.util.Properties)

●getConnection(url)

3.在KingbaseES JDBC中,数据库是用URL表示的,目前KingbaseES JDBC支持以下几种地址格式:

jdbc:kingbase8:database

jdbc:kingbase8://host/database

jdbc:kingbase8://host:port/database

jdbc:kingbase8://host:port/database?para1=val1&para2=val2…

5.常用的建立数据库连接所需的所有步骤的示例:

Connection con;

/* 加载驱动程序 */

Class.forName("com.kingbase8.Driver");

String url = "jdbc:kingbase8://localhost:54321/testdb";

con = DriverManager.getConnection(url,"userID","passwd");

    1. 使用DataSource连接数据库

DataSource 接口是在 JDBC 3.0 的规范中定义的另外一种获取数据源连接的方法。使用 DataSource 进行数据库连接可以提高应用程序的可移植性,因为应用程序使用一个逻辑名称建立与数据库的连接,该逻辑名通过使用 JNDI(Java Naming and Directory Interface) 命名服务映射到真正的 DataSource 对象,该 DataSource 对象表示了一个真正的数据库连接。如果数据源的信息发生变化,只需修改该 DataSource 对象的属性,而不需要修改应用程序。

KingbaseES JDBC 在 KBSimpleDataSource 类中实现了 DataSource 接口,在 Jdbc3PoolingDataSource 类中实现了具有连接池功能的 DataSource 接口。下面分别介绍它们的使用方式。

4.2.1 使用 DataSource 连接数据库(不使用JNDI)

通过DataSource来建立连接的过程主要分为以下几个步骤:

1.创建KBSimpleDataSource

创建一个 KingbaseES 的 DataSource,要执行以下语句:

KBSimpleDataSource ds = new KBSimpleDataSource();

2.初始化连接属性

标准的 DataSource 属性包括:databaseName,password, portNumber,serverName,user。用户通过以下方法来对这些属性进行设置:

setDatabaseName(String dbname);

setPassword(String pwd);

setPortNumber(int pn);

setServerName(String sn);

setUser(String user);

4.2.2  使用 DataSource 连接数据库(使用JNDI)

KingbaseES JDBC 驱动程序提供通过 JNDI 查找方式来获取数据源的方法,其步骤如下:

1.建立数据源

KBSimpleDataSource ds = new KBSimpleDataSource();

ds.setDatabaseName("test") ;

ds.setUser("system") ;

ds.setPassword("manager") ;

ds.setPortNumber(54321) ;

/* 通过JNDI绑定数据源 */

Context ctx = null;

try

{

Hashtable env = new Hashtable (5);

env.put (Context.INITIAL_CONTEXT_FACTORY,

"com.sun.jndi.fscontext.RefFSContextFactory");

/* "file:/job/jndi"中,要在本程序运行的盘上建立目录job和其子目录jndi */

env.put (Context.PROVIDER_URL, "file:/job/jndi");

ctx = new InitialContext(env);

}

catch (NamingException ne)

{

ne.printStackTrace();

}

/* 绑定JNDI和数据源 */

ctx.rebind("DataSource", ds);

2. 通过 JNDI 查找来获取数据源

/* 开始使用数据源 */

Context ctx2 = null;

try

{

Hashtable env = new Hashtable (5);

env.put (Context.INITIAL_CONTEXT_FACTORY,

"com.sun.jndi.fscontext.RefFSContextFactory");

env.put (Context.PROVIDER_URL, "file:/job/jndi");

ctx2 = new InitialContext(env);

}

catch (NamingException ne)

{

ne.printStackTrace();

}

/* 通过 JNDI 查找到数据源 */

DataSource ds2 = (DataSource)ctx2.lookup("DataSource");

3.使用数据源做SQL语句处理

Connection conn = ds2.getConnection();

Statement stmt = conn.createStatement() ;

String sql = "select * from tu9";

ResultSet rs = stmt.executeQuery( sql ) ;

while ( rs.next() )

{

System.out.print(rs.getString("name") + rs.getString("nick")) ;

}

System.out.println();

rs.close() ;

stmt.close() ;

conn.close();

4.2 关闭与数据库的连接

关闭与数据库的连接,只需要对连接对象conn调用close()方法:

conn.close();

JDBC创建语句对象

连接一旦建立,就可向数据库传送 SQL 语句,而且对可被发送的 SQL 语句类型不加任何限制,它允许使用特定的数据库语句。KingbaseES JDBC 提供了三个类,用于向数据库发送 SQL 语句,Connection 接口中的三个方法可用于创建这些类的实例:

●Statement 对象:由方法 createStatement 所创建,用于发送简单的 SQL 语句。

●PreparedStatement 对象:由方法 prepareStatement 所创建,用于发送带有一个或多个输入参数(IN 参数)的 SQL 语句。

●CallableStatement 对象:由方法 prepareCall 所创建,用于执行 SQL 存储过程。

5.1 Statement 对象

Statement 对象由方法 createStatement 所创建,Statement 对象用于发送简单的 SQL 语句,来进行查询或对数据库进行更新,Statement 对象提供三种方法执行 SQL 语句:

●execute 方法用于执行返回多个结果集或更新多个元组的 SQL 语句;

●executeQuery 方法用于执行返回单个结果集的 SQL 语句;

●executeUpdate 方法用于执行含有 INSERT、UPDATE 或 DELETE 语句或者不返回任何内容的 SQL 语句,如 DDL 语句。

●Statement对象的使用:

Connection conn = DriverManager.getConnection(url, "system", "manager");

Statement stmt=conn.createStatement();

stmt.executeUpdate("update table1 set col1=1");

5.2 PreparedStatement 对象

数据库服务器在处理 SQL 语句时都是首先生成该语句的执行计划,然后执行。对于有些应用需要反复处理拥有相同执行计划的语句,就会浪费处理资源,这时就可以使用 PreparedStatement 对象,这样,数据库服务器可以提前取得 SQL 语句,并为它创建查询计划,以后该语句就可以多次执行。

  1. 生成一个 PreparedStatement 对象,对语句进行预编译。
  2. 设置参数。
  3. 执行语句,获取结果。
  4. PreparedStatement 对象的使用

Connection conn = DriverManager.getConnection(url, "system", "manager");

PreparedStatement pstmt = conn.prepareStatement(

"UPDATE EMPLOYEES SET SALARY = ? WHERE ID = ?");

int i;

for (i = 0; i < employee.length; i++)

{

pstmt.setBigDecimal(1, employee[i].salary);

pstmt.setInt(2, employee[i].id);

pstmt.executeUpdate();

}

5.3 CallableStatement对象

CallableStatement 对象从 PreparedStatement 中继承了用于处理 IN 参数的方法,而且还增加了用于处理 OUT 参数和 INOUT 参数的方法。处理一个存储过程的 SQL 语句通常包括以下过程:

●生成一个 CallableStatement 对象,对语句进行预编译。

●提取参数信息。

●设置参数。

●注册输出参数。

●执行语句。

●获取输出参数的返回值

●CallableStatement类的使用

Connection conn = DriverManager.getConnection(url, "system", "manager");

Statement statement = conn.createStatement();

/* 存储过程语句,该语句需在oracle兼容模式下执行 */

String sql = "create or replace procedure procName (inout id int,"

+ " in name char(20), out salary float) as "

+ "begin "

+ "select number into id from callable "

+ "where number = id and xm = name;"

+ "select gz into salary from callable "

+ "where number = id and xm = name;"

+ "end;";

/* 执行语句,创建 CallableStatement 对象 */

statement.execute(sql);

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

/* 参数1为INOUT类型,参数2为IN类型,参数3为OUT类型 */

/* 注册输出参数 */

cstmt.registerOutParameter(1,Types.INTEGER);

cstmt.registerOutParameter(3,Types.REAL);

JDBC查询结果集处理

建立服务器连接后,我们可以在该连接上执行查询语句,并返回结果集对象,具体方法如下:

●创建一个语句对象

Statement stmt=conn.createStatement();

●执行一条SQL查询语句,并返回结果集

ResultSet rs=stmt.executeQuery("select * from table1");

或者

stmt.execute("select * from table1");

ResultSet rs=stmt.getResultSet();

●结果集的读取

在 ResultSet 第一次创建时,指针定位在第一行的前面,通过 ResultSet 中提供的各个定位函数使 ResultSet 指针指向实际要访问的数据行,然后使用 getXXX 方法读取结果集中当前行或列的值。

next()方法

Statement stmt=conn.createStatement();

ResultSet rs=stmt.executeQuery("select * from table1");

while (rs.next())

System.out.println(rs.getInt (1));

●对结果集的更新

Statement stmt=conn.createStatement(

ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

ResultSet rs=stmt.executeQuery("select * from table1");

rs.next();

System.out.println("updata before: " + rs.getInt(1));

rs.updateInt(1,21);/* 修改当前行第一列的值为21。 */

rs.updateRow();/* 作用于数据源 */

System.out.println("updata after: " + rs.getInt(1));

关闭结果集与数据库的连接

Connection conn = DriverManager.getConnection(url, "system", "manager");

Statement stmt=conn.createStatement();

ResultSet rs=stmt.executeQuery("select * from table1");

Stmt.close();

Conn.cloase();

参考文档

《KingbaseES 客户端编程接口》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值