怎样打开苹果手机APPAPP

追求JDBC on Oracle最佳性能?如何才好?_图文_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
追求JDBC on Oracle最佳性能?如何才好?
||文档简介
Oracle DB数据库资深工程师|
总评分4.4|
浏览量11490
&&jdbc oracle性能优化 调优
阅读已结束,如果下载本文需要使用0下载券
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩27页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢> java.sql.SQLException:ORA-01006:绑定变量不存在java.sql.S
java.sql.SQLException:ORA-01006:绑定变量不存在java.sql.S
huaxiang0208 & &
发布时间: & &
浏览:24 & &
回复:0 & &
悬赏:0.0希赛币
java.sql.SQLException: ORA-01006: 绑定变量不存在java.sql.SQLException:&ORA-01006:&绑定变量不存在
这是什么异常啊你是在java里面调用Oracle的存储过程吗
如果是的话,你可能写错了绑定变量,你用单引号将绑定变量给引住了
绑定变量是一个整体的东西,不需要用单引号,用了单引号就不是绑定变量了rs&=&pstam.executeQuery("select&*&from&dept");
pstam是一个preparedStatement,不能这么用。因为它要求要绑定变量,所以出现你说的错。
在oracle&jdbc中,你得定义一个新的statement
Statement&stmt&=&conn.createStatement();
rs&=&stmt.executeQuery("select&*&from&dept");这个程序
import&java.sql.*;
import&java.util.*;
public&class&TestPreStat&{
public&static&void&main(String[]&agrs){
Scanner&sc&=&new&Scanner(System.in);
Connection&conn&=&
PreparedStatement&pstam&=&
ResultSet&rs&=&
int&deptno&=&0;
String&dname&=&"";
String&loc&=&"";
System.out.println("输入部门编号:");
deptno&=&sc.nextInt();
System.out.println("输入部门名称:");
dname&=&sc.next();
System.out.println("输入部门地址:");
loc&=&sc.next();
Class.forName("oracle.jdbc.driver.OracleDriver");
conn&=&DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl","scott","tiger");
pstam&=&conn.prepareStatement("insert&into&dept&values&( , , )");
pstam.setInt(1,deptno);
pstam.setString(2,&dname);
pstam.setString(3,&loc);
pstam.executeUpdate();
rs&=&pstam.executeQuery("select&*&from&dept");
while(rs.next()){
System.out.println(rs.getString("deptno")+"\t"+rs.getString("dname")+"\t"+rs.getString("loc"));
}&catch&(ClassNotFoundException&e){
e.printStackTrace();
}&catch&(SQLException&e){
e.printStackTrace();
}&finally&{
if(rs&!=&null){
rs.close();
if(pstam&!=&null){
pstam.close();
if(conn&!=&null){
conn.close();
}&catch&(SQLException&e){
e.printStackTrace();
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&动态SQL和绑定变量(转)
  说动态SQL之前先来说下静态SQL
  静态SQL语句
  语句中主变量的个数与数据类型在预编译时都是确定的,我们称这类嵌入式SQL语句为静态SQL语句。
  与之相对应的就是动态SQL
  动态SQL方法允许在程序运行过程中临时“组装”SQL语句。
  那么他们之间的区别是什么呢?
  静态sql的执行计划(DB2称存取路径)是在运行前就确定好的
  动态sql的执行计划(DB2称存取路径)是在运行时动态生成的。由于是在运行时动态生成执行计划,因此生成的执行计划(DB2称存取路径)相对更优,但考虑到生成执行计划(DB2称存取路径)的开销,有可能应用程序的运行时间相对会比静态sql长些 。
  绑定变量
  在 SQL 语句中,绑定变量是一个占位符。例如,为了查询员工号为 123 的员工的信息,可以查询:
  1 ) select * from emp where empno=123;
  另外,也可以查询:
  2 ) select * from emp where empno=:empno 。
  那么每次查询都是一个新查询,即在数据库共享池中以前没有过的查询。每次查询必须经过分析、限定(名称解析)、安全检查、优化等等,简单地说,执行的每条语句在每次执行时都将必须经过编译。
  在第二个查询 2 )中使用了绑定变量 :empno ,它的值在查询执行时提供。查询经过一次编译后,查询方案将存储在共享池中,可以用来检索和重用。在性能和可伸缩性方面,这两者的差异是巨大的,甚至是惊人的
  从上所述,很明显看出,分析一个带有硬编码量的语句将比重用一条已分析过的查询方案花费更长的时间和消耗更多的资源,不明显的是前者将减少系统所能支持的用户数量。很明显,部分原因是由于增加资源消耗量,但更主要的因素是在解析 sql 语句的过程中对共享池中锁存器( latch )的争抢
  通过使用绑定变量,应用程序提交的相似的 sql 语句只需要解析一次,就可以重复使用,这非常有效,这也是Oracle 数据库要求使用的工作方式。不仅使用较少的资源,而且可以减少锁存( latch )时间,降低锁存( latch )次数,这将提高应用系统性能,并且大大提高可伸缩性。
  在IBATS中,采用的是动态SQL加绑定变量的方式。
  IBATS中是根据传递过来的变量是否空来拼接SQL的,这就是动态SQL。
  而传递来的参数是根据绑定变量来执行的。
  比如下面的例子,我要查询用户信息。
  在前台页面输入用户名,zhangsan
  传到IBATS后,执行SQL,在数据库查看刚刚执行的SQL
  查看方法如下:
  Sql代码
'select t.username ,t.password, t.sex ,t.mobile from users t%'  
  注意:在ORACLE中,要查看v$sql 这个视图,得较高的权限,我是用DBA权限进去查看的。
  看到这样的语句:
  Sql代码
select  t.username ,t. password , t.sex ,t.mobile
users t      
where        t.username = :1  
  如果再查lisi的用户信息,在数据库看执行的SQL。发现还是上面那条SQL。
  所以,绑定变量的好处就是每次都执行的同一条SQL,只是输入的变量值不同。
  下面直接在数据量中执行下面的两个SQL:
  Sql代码
select  t.username ,t. password , t.sex ,t.mobile
users t  where  t.username =
'zhangsan' ; 
select  t.username ,t. password , t.sex ,t.mobile
users t  where  t.username =
'lisi' ; 
  再看数据库中执行的SQL,发现是下面的结果:
  可以看到,不使用绑定变量时,是执行的不同的SQL。
  总结:ibats采用的是动态SQL+绑定变量的方式。 动态SQL在运行时编译,所以执行计划更优,但相对于静态编译的静态SQL或者存储过程更耗性能。
  绑定变量可以重复利用相似的SQL,使效率更高。
  --------------------------------------------
  附一段jdbc访问数据库时绑定和不绑定变量的测试例子:
  import java.sql.*;
  import oracle.jdbc.driver.*;
  class ConOra {  public static void main(String args[] ) throws SQLException{  DriverManager.registerDriver(neworacle.jdbc.driver.OracleDriver());  Connection conn =DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.152:1521:whx","system","lukewhx");  PreparedS  ResultS  String v_
  /*不绑定  for (int i =1;i&=1000;i++){  v_sql="select object_name from objects where object_id="+i;  stmt =conn.prepareStatement(v_sql);  rset=stmt.executeQuery();  stmt.close();  }   */
  //绑定
  for (int i =1 ;i&=1000;i++ ) {  v_sql = "select object_name from objects where object_id= :x ";  stmt=conn.prepareStatement(v_sql);  stmt.setString(1,Integer.toString(i));  rset = stmt.executeQuery();  stmt.close();  }
  System.out.println("Execute OK");  }  }如何正确的在对in操作使用变量绑定_Oracle教程_
如何正确的在对in操作使用变量绑定
来源:人气:4755
  家都知道在sql语句中变量绑定的重大意义,甚至有高人指出:一个应用想要它变的很糟糙的话,只要不使用变量绑定就可以了。这话的确不假。这时可能有人就会问:我该绑定的都绑定了,可是我实在无法想到好的方法在in操作符中使用变量绑定。下面的方法可以解决这个疑问。
     我们知道in操作符接受两种list, 一个是由一个个item组成的list, 另一个是由另一个表中选出的list。第一种方式由于值个数不一定,变量绑定具有一定的困难。于是我们思路就集中到预备将一个字符串传入到sql语句中,然后使用一个方法将字符串parse成一个table, 再传回in tor:      首先我们来创建方法,及由此方法返回的table类型:   rudolf@test9i> create or replace type numTableType as table  2    of number  3 /    Type created.    rudolf@test9i> create or replace function str2numList( p_string in varchar2 ) return  2 numTableType  3 as  4   v_str  long default p_string
',';  5   v_n      6   v_data  numTableType := numTableType();  7 begin  8   loop  9     v_n := to_number(instr( v_str, ',' ));  10     exit when (nvl(v_n,0) = 0);  11     v_data.  12     v_data( v_data.count ) := ltrim(rtrim(substr(v_str,1,v_n-1)));  13     v_str := substr( v_str, v_n+1 );  14     15   return v_  16   17 /    Function created.    我们把下列语句:  select object_name from t where object_id in ( xx,xxx,xxx,...);  改为:  select object_name from t  where object_id in  ( select * from THE ( select cast( str2numList(:variable ) as numtableType ) from dual )  );    现在我们来看看是否达到了我们的目的:  rudolf@test9i> var STR varchar2(3000)    rudolf@test9i> exec :STR := '81'    PL/SQL ocedure sUCcessfully completed.    rudolf@test9i> alter
set events= '10046 trace name context forever, level 4'  2 /    Session altered.    rudolf@test9i> select object_id,object_name from t where object_id in (  2   select * from THE ( select cast( str2numList(:STR ) as numtableType ) from  3  dual ) )  4  rudolf@test9i> /    OBJECT_ID OBJECT_NAME  ---------- ------------------------------  1810 ALL_ALL_TABLES  4481 AGGINPUTTYPE  5770 ALL_APPLY    检查dump文件,我们看到(注重星号的行):    PARSING IN CURSOR #1 len=146 dep=0 uid=81 oct=3 lid=81 tim=3718 hv= ad='529b9f48'  select object_id,object_name from t where object_id in (  select * from THE ( select cast( str2numList(:STR ) as numtableType ) from  dual ) )  END OF STMT  PARSE #1:c=0,e=655,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=0,tim=3701  BINDS #1:         *****  bind 0: dty=1 mxl=) mal=00 scl=00 pre=00 oacflg=03 oacfl2=10 size=2000 offset=0  bfp=406402fc bln=2000 avl=14 flg=05  value="5770,
"  EXEC #1:c=0,e=245,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=5450  FETCH #1:c=20000,e=16739,p=0,cr=52,cu=0,mis=0,r=1,dep=0,og=4,tim=2283  FETCH #1:c=0,e=4644,p=0,cr=0,cu=0,mis=0,r=2,dep=0,og=4,tim=7979
优质网站模板

我要回帖

更多关于 怎样删掉浏览器 的文章

 

随机推荐