java的API,怎么理解,JDBC是什么(Java中,JDBC是指)

java的API,怎么理解,JDBC是什么(Java中,JDBC是指),第1张

JDBCAPI主要位于JDK中的javasql包中(之后扩展的内容位于javaxsql包中),主要包括(斜体代表接口,需驱动程序提供者来具体实现):

:负责加载各种不同驱动程序(Driver),并根据不同的请求,向调用者返回相应的数据库连接(Connection)。Driver:驱动程序,会将自身加载到中去,并处理相应的请求并返回相应的数据库连接(Connection)。Connection:数据库连接,负责与进行数据库间通讯,SQL执行以及事务处理都是在某个特定Connection环境中进行的。可以产生用以执行SQL的Statement。Statement:用以执行SQL查询和更新(针对静态SQL语句和单次执行)。:用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)。:用以调用数据库中的存储过程。:代表在数据库连接的建立和关闭和SQL语句的执行过程中发生了例外情况(即错误)。

数据类型的映射从SQL到Java数据类型映射的JDBC规范SQL类型Java类型CHARjavalangStringVARCHARjavalangStringLONGVARCHARjavalangStringNUMERICjavamathBigDecimalDECIMALjavamathBigDecimalBITbooleanTINYINTbyteSMALLINTshortINTEGERintBIGINTlongREALfloatFLOATdoubleDOUBLEdoubleBINARYbyte[]VARBINARYbyte[]byte[]DATEjavasqlDateTIMEjavasqlTimeTIMESTAMPjavasqlTimestampBLOBjavasqlBlobCLOBjavasqlClobArrayjavasqlArrayREFjavasqlRefStructjavasqlStruct注:这种类型匹配不是强制性标准,特定的JDBC厂商可能会改变这种类型匹配。例如Oracle中的DATE类型是包含时分秒,而javasqlDate仅仅支持年月日。

1connection不知道你是采用什么方式获取的,如果不是从连接池里取,你每connectionclose()一次,下次get的时候会重新建立实际物理链接,这样会相当耗时。所以你检查一下是在获取connection时耗的时间多,还是在execute的时间多。代码:

long startTime = SystemcurrentTimeMillis();

conn = getConnection(); // execute();

long endTime = SystemcurrentTimeMillis();

Systemoutprintln("获取链接的时间:" + (endTime - startTime));

执行的类似;

2从你的存储过程的逻辑来说,要条件查询,更新某个字段的值,和入库,这三个步骤应该有输入参数的,那么你的这个参数是怎么传入的?

个人觉得你的这个存储过程可以优化成SQL来执行,效率应该会更好:

首先,你把输入参数放入一个临时表;

比如结构是:

_id _field

查询的条件 更新的字段

// 更新_table中存在的记录的_field字段,并且只更新_table与_tmp键值相等的记录

UPDATE _table t SET _field=(SELECT MAX(_field) FROM _tmp WHERE _id=t_id) WHERE EXISTS (SELECT 'X' FROM _tmp WHERE _id=t_id);

// 选择_table与_tmp键值不相等的记录(即_table中不存在的记录)插入_table

INSERT INTO _table (_id,_field) (SELECT _id,_field FROM _tmp t WHERE NOT EXISTS (SELECT 'X' FROM _table WHERE _id=t_id));

这样的话,每次都是两个批量 *** 作,而且不需要输入参数,直接调用就可以,唯一需要多做的工作就是做临时表。

Oracle 的主键 是 sequence 生成的吗?若是,以下是解决方法:

1,用Oracle 的returning 语句。

PreparedStatement  sta = connprepareStatement("INSERT INTO LOGGING VALUES (TESTSEQNEXTVAL,SYSDATE)returning id into  ");

   staexecute();

   ResultSet rset = stagetResultSet();

   while(rsetnext())

     {

       int id = rsetgetInt(1);

    }

如果是既有传入值,又有返回值的话,应该:

PreparedStatement  sta = connprepareStatement("BEGIN INSERT INTO LOGGING VALUES

(TESTSEQNEXTVAL, )returning id into ; END; ");

 

sta = connprepareCall(sqlText);

 sta setString(1, srqID);

sta registerOutParameter(2, TypesNUMERIC);

 sta execute();

 

return sta getLong(2);

或者用oracle的 OraclePreparedStatement

 

            String sql = "insert into test values(1,) returning  id into ";

             OraclePreparedStatement pstt = (OraclePreparedStatement) connprepareStatement(sql);

             psttsetString(1, "xxx");

             psttregisterReturnParameter(2, OracleTypesINTEGER);

             psttexecuteUpdate();

             ResultSet rset = psttgetReturnResultSet(); // rest is not null

             

             while (rsetnext()) {

                 int id = rsetgetInt(1);

                 Systemoutprintln("Insert returnning: " + id);

             }

以上就是关于java的API,怎么理解,JDBC是什么(Java中,JDBC是指)全部的内容,包括:java的API,怎么理解,JDBC是什么(Java中,JDBC是指)、jdbc执行异常后链接释放慢怎么办、如何得到JDBC Insert 语句执行后插入Oracle 数据库记录的主键等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9418703.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存