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】课程主要探讨了Java中数据持久化的重要性和实现方式,以及JDBC作为核心的数据库访问技术。数据持久化是指将内存中的数据保存到可持久存储的设备,通常指的是关系数据库中,以便后续使用。在企业...
本教程“Java零基础自学之JDBC1-3课时”旨在帮助初学者理解并掌握JDBC的基本概念、使用方法以及常见操作。 在JDBC的第一课时中,通常会讲解以下内容: 1. **JDBC概述**:解释JDBC是什么,它的作用,以及如何在Java...
。。JDBC1详解.docx
- **JDK 1.1 - JDBC 1** - 在JDK 1.1中,首次引入了JDBC 1.0,这是一个基本的数据库连接框架。 - 随着JDK 1.1的发展,JDBC 1.0得到了初步的应用和支持,但该版本已经过时,并且在后来的JDK 8.0版本中已经被移除。 ...
MySQL8.0驱动 mysql-connector-java-8.0.11版jdbc1驱动,解压即可用,官网可下载,注意连接驱动名为:com.mysql.cj.jdbc.Driver ,在数据库链接后加上:?userSSL=true&serverTimezone=GMT,表示禁用SSL(开发环境下...
- **JDBC 1.x**:最初版本,提供了基本的数据存储架构和核心接口,如`DriverManager`、`Connection`、`Statement`和`ResultSet`等。 - **JDBC 2.0**:引入了可滚动结果集、可更新结果集、批量更新等功能,增强了性能...
1. `jdbc1.class` 和 `jdbc.class`:这些是编译后的Java类文件,可能包含了实现JDBC连接、查询等功能的代码。通常,`.class`文件是Java源代码(`.java`)经过编译后的结果,可以直接在Java虚拟机上运行。 2. `jdbc1....
jdbc连接sql sever2005的简单代码,仅做保存
JDBC2作为JDBC的第二个主要版本,在JDBC1的基础上做了大量的改进和扩展,为开发者提供了更强大的功能和更高的性能。 在JDBC2中,最重要的更新之一是引入了**批处理(Batch Processing)**。批处理允许开发者将多条...
若需切换不同版本,可通过执行相应目录下的`usejdbc2`或`usejdbc1`命令完成。 - **DB2版本8**:该版本进一步扩展了支持的JDBC驱动程序类型,引入了第二类、第三类和第四类驱动程序。其中,第四类驱动程序被称为...
首先,JDBC Driver 3.0分为四种类型:Type 1、Type 2、Type 3和Type 4。在SQL Server JDBC中,我们主要关注Type 4驱动,也称为纯Java驱动。这种驱动完全用Java编写,无需依赖数据库供应商特定的库,因此具有高度的可...
**3.1 JDBC 1.x** - **特点**:最初的标准,提供了基本的数据存储架构,如`DriverManager`、`Connection`、`Statement`、`ResultSet`等核心接口。 - **发布形式**:作为Java SDK的一个附加组件发布,随后集成到了...
1. SQLJDBC驱动: SQLJDBC是微软发布的早期版本的JDBC驱动,它支持JDBC API 3.0规范。这个驱动分为四个类型:Type 1、Type 2、Type 3和Type 4。其中,Type 4是纯Java实现,无需依赖本地系统组件,提供高性能的...
1. **自动配置**: Spring Boot通过自动配置,可以快速设置数据源和JDBC模板。 2. **Repository接口**: 开发者只需定义Repository接口,Spring会自动提供实现,无需编写繁琐的DAO层代码。 3. **ORM支持**: 尽管不如...
在“传智播客-Jdbc1_方立勋.ppt”中,主要涵盖了JDBC的基础知识。这部分内容可能包括: 1. **JDBC驱动分类**:介绍四种类型的JDBC驱动,如JDBC-ODBC桥、网络纯Java驱动等,并讲解它们的工作原理。 2. **JDBC基本步骤...
在Java中,JDBC驱动通常分为四种类型:Type 1、Type 2、Type 3和Type 4。sqljdbc.jar和sqljdbc4.jar属于Type 4,即纯Java实现的驱动,无需依赖于数据库供应商的特定接口或中间件,因此具有较好的跨平台性。 要使用...
在本案例中,“sqlite-jdbc-3.31.1.zip”是一个包含SQLite JDBC驱动的压缩包,版本号为3.31.1,用于在Java环境中通过JDBC方式连接和操作加密后的SQLite数据库。 首先,我们需要了解如何在Java项目中使用sqlite-jdbc...
1. **加载驱动**:使用`Class.forName()`方法加载数据库驱动,如`Class.forName("com.mysql.jdbc.Driver")`对于MySQL。 2. **建立连接**:使用`DriverManager.getConnection()`方法创建与数据库的连接,传入URL、...