class OracleDriver implements Driver{
static{
OracleDriver d=new OracleDriver();
DriverManager.addDriver(d);
}
}
class DriverManager{
private static List<Driver> dri=new ArrayList<Driver>();
public static void addDriver(Driver d){
......
dri.add(d);
}
public static Connection getConnection(){
for(Driver d:dri){
if(d!=null) return d.getconnect();
}
}
}
===================================
boolean execute(sql) ---> all execute可以执行所有的SQL语句,返回有boolean值
boolean 表示有没有ResultSet返回
true:有 false:没有
rs=stm.getResultSet();
ResultSet executeQuery(sql){}-----> select 只能执行查询语句
int executeUpdate(sql){} -----> insert update delete 只能执行增 删 改
jdbc常见问题:
1 Class not found
-------> ojdbc14.jar
2 No suitable Driver
----->url
3 Socket Exception
-------à ping 200
4 SQLException ----> sql
table: jdbc_users
sequence: jdbc_users_seq
配备文件:
driver=oracle.jdbc.driver.OracleDriver
url=jdbc:oracle:thin:@192.168.0.200:1521:oradb10g
username=cksd0804
password=cksd0804
BufferedReader
String str=br.readLine();
String[] s=str.split("=");
if(s[0].equals("driver"){}
.properties格式的文件 有一个Map
.properties ------> Map<String,String>
------> Properties extends Hashtable<String,String>
JdbcUtil.class.getResourceAsStream("/com/kettas/jdbc/cfg/config.properties");
JdbcUtil.class 表示jdbcUtil的对象
.getResourceAsStream() 通过流的方式获得资源―――对文件进行读取
()里面写虚拟路径
/com/kettas/jdbc/cfg/config.properties
/<====>classpath
/home/java/jdbc/.....
Student s=new Student();
1. search file ---->Student.class
path---->command
classpath--->.class
2. read Student.class
3. Class c----> Student详细信息
Student s2=new Student();
.class----> jdbc.jar--->user--->classpath
1 分散代码集中管理
2 变化的内容写进文件
3 xml .properties 配备文件的两种常用文件格式
4 Properties
5 ExceptionInInitializerError
6 Class.getResourceAsStream( 虚拟路径 )
1. jdbc 六个步骤
2. 注册Driver的三种方式
3. ResultSet遍历
4. 三种execute方法的区别
5. JdbcUtil类
6. Driver方展的四个阶段
7. 写程序,向jdbc_users表插入五条记录
String[] names={"mary","tom","anna","jerry","george"};
==================================
package com.kettas.jdbc.day1;
import java.sql.*;
public class FirstJdbc {
public static void main(String[] args) {
//step 1. 注册Driver
//注册Driver第二种方式
/*Driver d1=new oracle.jdbc.driver.OracleDriver();
try {
DriverManager.registerDriver(d1);
} catch (SQLException e1) {
e1.printStackTrace();
}
*注册Driver第三种方式
* 在程序不指定,DriverManager没有,再找环境变量jdbc.drivers
* 里面有没有指定
* java -Djdbc.drivers=oracle.jdbc.driver.OracleDriver classname
*/
//注册Driver第一种方式
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
// 如果需要多个Driver类
// class.forName("driver2");
// class.forName("driver3");
// class.forName("driver4");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Connection conn=null;
Statement stm=null;
try{
// step 2. 连接数据库
String url="jdbc:oracle:thin:@192.168.0.200:1521:oradb10g";
conn=DriverManager.getConnection(url,"cksd0804","cksd0804");
// step 3. 创建Statement
stm=conn.createStatement();
//step 4. 执行sql
String sql="insert into jdbc_users(id,name,passwd,phone,email)"
+" values(jdbc_users_seq.nextval,'zhangsan','11111','22222','zhang@cernet.com')";
stm.executeUpdate(sql);
System.out.println("===========insert ok==============");
//step 5. 处理结果集
}catch(Exception e){
e.printStackTrace();
}finally{
// step 6. 释放资源
if(stm!=null) try{ stm.close();} catch(Exception ee){}
if(conn!=null) try{ conn.close();} catch(Exception ee){}
}
}
}
====================================
package com.kettas.jdbc.day1;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import com.kettas.jdbc.util.JdbcUtil;
public class SecondJdbc {
public static void main(String[] args) {
Connection conn=null;
Statement stm=null;
ResultSet rs=null;
try{
conn=JdbcUtil.getConnection();
stm=conn.createStatement();
String sql="select id,name,passwd,phone,email from jdbc_users"
+" where id=2";
rs=stm.executeQuery(sql);
//处理结果集
if(rs.next()){ System.out.println(rs.getInt(1)+"-------"+rs.getString(2));
}
/*while(rs.next()){ System.out.println(rs.getInt(1)+"-------"+rs.getString(2));
}*/遍历结果
//rs第一个下标在结果的上一个地址。
}catch(Exception e){
e.printStackTrace();
}finally{
JdbcUtil.release(rs,stm,conn);
}
}
}
====================================
package com.kettas.jdbc.util;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Properties;
import java.io.*;
public class JdbcUtil {
private static Properties info=new Properties();
static{
try {
InputStream is=JdbcUtil.class .getResourceAsStream("/com/kettas/jdbc/cfg/config.properties");
info.load(is);//???
is.close();
} catch (Exception e) {
throw new ExceptionInInitializerError(e);
}
}
public static Connection getConnection() throws Exception{
Class.forName(info.getProperty("driver"));
return DriverManager.getConnection(info.getProperty("url"),
info.getProperty("username"),info.getProperty("password"));
}
public static void release(ResultSet rs,Statement stm,Connection conn){
if(rs!=null) try{ rs.close();} catch(Exception ee){}
if(stm!=null) try{ stm.close();} catch(Exception ee){}
if(conn!=null) try{ conn.close();} catch(Exception ee){}
}
public static void main(String[] args) throws Exception{
System.out.println(getConnection());
}
}
Connection是线程不安全的,不能在线程间共享
=================================
1. jdbc 六个步骤
1)注册Driver
2)获得连接
3)创建Statement
4)执行sql
5)select--->处理结果集
6)释放资源(rs,stm,conn)
2. 注册Driver的三种方式
1)Class.forName("oracle.jdbc.driver.OracleDriver");
2)Driver d=new oracle.jdbc.driver.OracleDriver();
DriverManager.registDriver(d);
3)程序里没有指定
java -Djdbc.drivers=oracle.jdbc.driver.OracleDriver classname
3. ResultSet遍历
1) next()---->boolean
2) get***(int) get***(columnname)
eg: getString("name");
开始时指针指向第一行的上一行,最后指针指向最后一行
的下一行
4. 三种execute方法的区别
1)stm.execute(sql) all boolean(ResultSet)
2)stm.executeQuery(String selectsql) --->ResultSet
3)stm.executeUpdate(sql) --->int(db row)
---->delete update insert
5. JdbcUtil类
1)分散代码集中管理(封装)
2)经常变化的写进文件(配置文件)
config.xml config.properties
3)Properties extends Hashtable<String,String>
专门处理properties文件,提供load(InputStream is)
4)在程序加载时读一次文件,所以读文件的代码写在
静态代码块,里面只能抛一种类型的错误
ExceptionInInitializerError
5)利用jvm的类加载器读字节码文件的功能,可以获得
输入流,
InputStream is=JdbcUtil.class
.getResourceAsStream(虚拟路径);
绝对路径:/是真是的目录里面的根
虚拟路径:/是classpath
6. Driver方展的四个阶段
1)Jdbc-odbc
2)db client
3)base net pure java
4)pure java native 纯本地java
7. 写程序,向jdbc_users表插入五条记录
String[] names={"mary","tom","anna","jerry","george"};
==================================
Statement 和 PreparedStatement的比较
1)建立
stm=conn.createStatement();
pstm=conn.prepareStatement(sql);
2)执行
stm.execute(sql); 包含数据的完整的sql命令
pstm.execute(); 数据
3)stm 可以执行多条sql
pstm 只能执行一条sql
4)使用pstm的环境
a.执行同构sql,用pstm效率高
执行异构sql,用stm效率高
b.构成sql语句时需要外部的变量值,用pstm
dao:
public void update(Account a){
sql=update account set username=?,passwd=?,
personid=?,balance=?;
pstm=conn.....
pstm.setString(1,a.getName());
}
========================================================
Transaction: 一组不可再分的sql命令,根具体业务有关
A:原子性 atom
C:一致性 coherence
I:隔离性 insulation
D:持久性--->commit,rollback
手动划分事务的边界:
conn.setAutoCommit(false);
新事物开始
conn.commit();
旧事务的结束,新事务的开始
conn.rollback();
旧事务的结束,新事务的开始
没有手动划分,采用的是默认事务提交策略,
一条sql一个事务
----------------------------------------------------
Connection是线程不安全的,不能在线程间共享
threada save withdraw transfer
threadb save withdraw
1.common: 5 个 Connection
2.singleton: 1 个 Connection singleton单例模式
3.一个线程内部共享连接: 2 个 Connection
t1.start();
t2.start();
t1.start();
t2.start();
class ThreadA extends Thread{
private Connection conn1=null;
public void run(){
conn1=JdbcUtil.getConnection();
save(10000,conn1);
withdraw();
}
public Connection getConn(){return this.conn1;}
}
class Bank{
public void save(double balance){
conn2=Thread.currentThread().getConn();
sql="update account set balance=?";
pstm=conn.prepareStatement(sql);
pstm.set***;
pstm.executeUpdate();
}
public void withdraw(double balance){
conn2=this.getConn();
sql="update account set balance=?";
pstm=conn.prepareStatement(sql);
pstm.set***;
pstm.executeUpdate();
}
}
每一个线程对象创建好以后,jvm会为其分配一块内存空间,
用来存放当前线程对象独占数
分享到:
相关推荐
jdbc1.ppt jdbc1.ppt
java零基础自学之 JDBC 1-3 java零基础自学之 JDBC 1-3
jdbc连接sql sever2005的简单代码,仅做保存
JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单写法JDBC简单...
jdbc jdbc jdbc jdbc jdbc jdbc jdbc jdbc
JDBC代码 JDBC代码JDBC代码 JDBC代码
JDBC基础JDBC基础JDBC基础JDBC基础JDBC基础JDBC基础JDBC基础JDBC基础JDBC基础
JDBC笔记 JDBC笔记 JDBC笔记
JDBC详解 JDBC详解JDBC详解 JDBC详解JDBC详解 JDBC详解
JDBC高级应用JDBC高级应用JDBC高级应用JDBC高级应用
jdbc资料jdbc资料jdbc资料jdbc资料
hive-jdbc
JDBC规范 java.sql和javax.sql两个包中的类与接口(天龙八部): DataSource:数据源 DriverManager:驱动管理 Driver:JDBC驱动 Connection:数据库连接 Statement:语句,执行SQL PrepareStatement:...
JDBC 解析JDBC中文API各种数据库之间的链接问题,网络编程
mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上版本数据库 mysql jdbc 驱动 适用于5.7及以上...
sqlserver驱动包 jdbc驱动 sqljdbc.jar sqljdbc4.jar jdbc连接sqlserver数据库驱动, sqljdbc.jar和sqljdbc4.jar均有
jdbc教程_jdbc教程
JSP 和 JDBC JSP 和 JDBC JSP 和 JDBC JSP 和 JDBC
Microsoft SQL Server JDBC Driver 3.0.JSP驱动。
精通jdbc,jdbc自学文档,jdbc帮助文档 精通jdbc,jdbc自学文档,jdbc帮助文档