‘JDBC’ 分类的存档
做了一段时间的数据迁移工作,遇到了不少问题,积累了一些经验,现将自己在这段时间的工作总结与体会记录下来,为以后的数据迁移增加经验! 第一次执行数据迁移程序的时候,发现代码执行效率低,虚拟机占用内存太大,于是就想办法提高代码运行效率并增大java虚拟机内存(设置参数:-Xms300m -Xmx512m).
一 JDBC的设计 JDBC发展的四个阶段(4个类型): type 1:jdbc-odbc桥 type 2:本地api驱动 type 3:网络协议驱动 type 4:本地协议驱动 1>负责将JDBC转换为ODBC,并且使用一个ODBC驱动程序与数据库进行通信 Jdbc- odbc桥是sun公司提供的,是jdk提供的的标准api. 这种类型的驱动实际是把所有jdbc的调用传递给odbc ,再由odbc调用本地数据库驱动代码.( 本地数据库驱动代码是指由数据库厂商提供的数据库操作二进制代码库,例如在oracle for windows中就是oci dll 文件) jdbc-odbc桥 —- odbc—- 厂商DB代码 —– 数据库Server 只 要本地机装有相关的odbc驱动那么采用jdbc-odbc桥几乎可以访问所有的数据库,jdbc-odbc方法对于客户端已经具备odbc driver的应用还是可行的.但是,由于jdbc-odbc先调用odbc再由odbc去调用本地数据库接口访问数据库.所以,执行效率比较低,对于那 些大数据量存取的应用是不适合的.而且,这种方法要求客户端必须安装odbc 驱动,所以对于基于internet ,intranet的应用也是不合适的.因为,你不可能要求所有客户都能找到odbc driver.
Connection 对象代表与数据库的连接。连接过程包括所执行的 SQL 语句和在该连接上所返回的结果。一个应用程序可与单个数据库有一个或多个连接,或者可与许多数据库有连接。 1.1打开连接 与数据库建立连接的标准方法是调用 DriverManager.getConnection 方法。该方法接受含有某个 URL 的字符串。DriverManager 类(即所谓的 JDBC 管理层)将尝试找到可与那个 URL 所代表的数据库进行连接的驱动程序。DriverManager 类存有已注册的 Driver 类的清单。当调用方法 getConnection 时,它将检查清单中的每个驱动程序,直到找到可与 URL 中指定的数据库进行连接的驱动程序为止。Driver 的方法 connect 使用这个 URL 来建立实际的连接。 下述代码显示如何打开一个与位于 URL “jdbc:odbc:wombat” 的数据库的连接。所用的用户标识符为 “oboy” ,口令为 “12Java”: String url = “jdbc:odbc:wombat”; Connection con = DriverManager.getConnection(url, “oboy”, “12Java”);
1 概述 DriverManager 类是 JDBC 的管理层,作用于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。另外,DriverManager 类也处理诸如驱动程序登录时间限制及登录和跟踪消息的显示等事务。 对于简单的应用程序,一般程序员需要在此类中直接使用的唯一方法是 DriverManager.getConnection。正如名称所示,该方法将建立与数据库的连接。JDBC 允许用户调用 DriverManager 的方法 getDriver、getDrivers 和 registerDriver 及 Driver 的方法connect。但多数情况下,让 DriverManager 类管理建立连接的细节为上策。 1.1 跟踪可用驱动程序 DriverManager 类包含一列 Driver 类,它们已通过调用方法DriverManager.registerDriver 对自己进行了注册。所有 Driver类都必须包含有一个静态部分。它创建该类的实例,然后在加载该实例时 DriverManager 类进行注册。这样,用户正常情况下将不会直接调用 DriverManager.registerDriver;而是在加载驱动程序时由驱动程序自动调用。加载 Driver 类,然后自动在 DriverManager中注册的方式有两种: 通过调用方法 Class.forName。这将显式地加载驱动程序类。由于这与外部设置无关,因此推荐使用这种加载驱动程序的方法。以下代码加载类 acme.db.Driver:Class.forName(“acme.db.Driver”);
类为java是跨平台的,所有配置文件不可能是绑定到任何一个平台上的,其配置文件也要有自己的一套东西.不可能是.ini等这样的格式,而是properties. 1。使用java.util.Properties类的load()方法示例: // 使用绝对路径,当前路径为项目工程跟路径 InputStream in = new BufferedInputStream(new FileInputStream( “src/jdbc.properties”)); Properties p = new Properties(); p.load(in); 2。使用java.util.ResourceBundle类的getBundle()方法示例:ResourceBundlerb=ResourceBundle.getBundle(name,Locale.getDefault()); 3。使用java.util.PropertyResourceBundle类的构造函数示例: InputStream in= new BufferedInputStream(new FileInputStream(name)); ResourceBundler b=new PropertyResourceBundle(in); 4。使用class变量的getResourceAsStream()方法示例: InputStream in= JProperties.class.getResourceAsStream(name); Properties p=newProperties(); p.load(in); 5。使用class.getClassLoader()所得到的java.lang.ClassLoader的getResourceAsStream ()方法示例: InputStreamin=JProperties.class.getClassLoader(). getResourceAsStream(name); Properties p=new Properties(); p.load(in); 6。使用java.lang.ClassLoader类的getSystemResourceAsStream()静态方法示例: InputStream in=ClassLoader.getSystemResourceAsStream(name); Properties p=new Properties(); p.load(in);
Group function: 1) select avg(salary),max(salary) from s_emp; select count(*) from s_emp; select count(id) from s_emp; select count(commission_pct) from s_emp; 统计commission_pct列不为空的值的个数; number: max min sum avg count date: max min count char: max min count 2) select dept_id,avg(salary),count(*) from s_emp group by dept_id;
Single Row Function: varchar2: 1) nvl(‘hello’,’world’)—–> ‘hello’ nvl(null,’world’)——–> ‘world’ ——–>第一个参数值为空时函数值为‘hello’ 2) select id,last_name,dept_id from s_emp where lower(last_name)=’smith’; ——–>查询last_name转换为小写后为‘smith’的人 3) select id,concat(last_name,first_name),dept_id from s_emp; concat(last_name,first_name)—>result1; concat(result1,title); –> concat(concat(last_name,first_name),title); System.out.println(stu.toString());
select columnname 1) select * 2) select id,last_name,dept_id 3) select id,last_name “Name”,salary*12 anual 4) select last_name||’ ‘||first_name 5) select last_name,salary*(1+nvl(comm,0)/100) 6) select distinct last_name,first_name from tablename 预定义: 作用的时间长 所有的叫这个列名的列都生效 sql: 当次生效 当前sql的当前表
package com.kettas.jdbc.student.util; import java.sql.*; import java.util.Properties; import java.io.*; public class JdbcUtil { private static Properties props=new Properties(); private static final ThreadLocal<connection> tl=new ThreadLocal</connection><connection>(); static { try { InputStream is=JdbcUtil.class.getResourceAsStream("/com/kettas/jdbc/student/confg/config.properties"); props.load(is); is.close(); } catch (Exception e) { //throw new ExceptionInInitializerError(e); } } public static Connection getConnection() throws Exception{ Connection conn=tl.get(); if(conn==null){ Class.forName(props.getProperty("driver")); conn=DriverManager.getConnection(props.getProperty("url"), props.getProperty("username"), [...]
1、select语句 select t.id,t.name from tablename t; –t为表的别名,也可以写作form ttt as t; select * from tablename; –*表示所有列 select distinct * from tablename –distinct表示除去结果中的重复记录 select * from tablename where t.id>10 –where表示条件 order by t.id ASC,t.name DESC; –order by指定按照哪些字段排序,ASC为升序,DESC为降序 select t.name as ‘姓名’ from ttt; –as更改查询结果标题 2、 可用的where比较条件有: 等于:=、< 、、>=、 包含:in、not in 范围:between、not between 匹配测试:like、not like Null测试:is null、is 布尔链接:and、or、not
