JDBC——

JDBC(Java DataBase Connectivity)java数据库连接技术
把oracle与java
友好界面的可以操作数据库的系统
一、JDBC的发展阶段
1、java—》odbc—>DB 优势不能突出 (桥连)
2、java–》本地Client–》DB SQLPlus客户端的API操作 实现跨平台
3、java–》JDBC–》DB (直连) 每个厂家的.class不一样
oracle连接到数据库:lianjie()

         DB2连接DB:donn()
          项目可移植性差。

4、java—》srever—->DB (连接池
二、JDBC内容
1、JDBC的的内容包含2部分:
1)接口 sun公司提供:在JDK中的java.sql.* 和 javax.sql.*中
2)实现类 :数据库厂商提供。可以到官网下载。
ojdbc5.jar-适用于JDK5或6
ojdbc6.jar-适用于JDK7及以上
2、jar包的使用:
1)使用记事本开发:修改环境变量 CLASSPATH值为. .;ojdbc5.jar的路径以及文件名
2)使用IDE开发,在Java Project中导入ojdbc6.jar
右键项目名称–》new Folder –lib
将 ojdbc6.jar复制到lib下,展开lib并右击Build Path–Add to Build Path–>ok
引用的类库 Referenced Libraries

    最重要的oracle.jabc   OracleDriver.class(核心)

三、JDBC的6个步骤(重点)
一个准备六个步骤
1个准备:在java project中导入ojdbc5.jar
6个步骤
//1、注册驱动类
Class.forName(“oracle.jdbc.OracleDriver”)
//2.创建连接
//协议 IP port 数据库的标识SID 用户名 密码
String url=”jdbc:oracle:thin:@localhost:1521:oraclejdbc”;
Connemctin conn = DriverManager.getConnection(url,”用户名”);
//3.创建Statement
//4.执行SQL语句
//5.处理查询结果
//6.释放资源(先创建的 后关闭)

常见问题:
1、java.lang.ClassNotFoundException:oracle.jdbc.OracleDriver
解决方案:1)核心驱动类 全限定名称 有错:
2)是否导入ojdbc6.jar

2、java.sql.SQLRecoverableException: IO 错误: The Network Adapter could not establish the connection
解决方案:检查URL中的ip地址或端口号

3、java.sql.SQLRecoverableException: IO 错误: Invalid number format for port number
解决方案:检查URL中的端口号

4、java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
解决方案:检查URL中的SID(数据库的唯一标识)

5、java.sql.SQLException: No suitable driver found for jdbc:eoracle:thin:@localhost:1521:oraclejdbc
解决方案:检查URL中的协议部分

6、java.sql.SQLException: ORA-01017: 用户名/口令无效; 登录被拒绝
解决方案:检查用户名和密码

7、java.sql.SQLSyntaxErrorException: ORA-00904: “AUUOUNTTNO”: 标识符无效 表或视图不存在 缺少符号 值太多…
并且使用异常堆栈信息,定位到错误代码行为 executeUpdate executeQuery时,解决方案:检查SQL语句。
解决方案:检查

四、执行带参数的SQL语句【重点】
1、使用Statement拼接SQL语句的方式
缺点 : 1)拼接SQL容易出错,如果是字符串类型有”,数据类型没有”;
2)存在SQL注入的安全隐患。
2、使用PreparedStatement执行带参SQL【重点】
PreparedStatement 是 statement的子接口
//3.创建PreparedStatement
String sql=”insert into accounts values(seq_accounts.nextval,?,?,?)”; //问号是占位
PreparedStatement pstm= conn.prepareStatement(sql);
//4 给问号占位符设置,然后执行SQL语句
pstm.setXxx(index,n); //给index处的
pstm.setXxx(2,p);
pstm.setXxx(3,b);
int row = pstm.executeUpdate();

  小结:
      PreparedStatement 和 Statement 的区别
          Statement                   PreparedStatement

 语法 stm=conn.createStatement();     sql="insert  ...?,?,?"
                                      pstm=conn.prepareStatement(sql);  
      sql=""                          pstm.setXxx(1,xx);
      stm.executeUpdate(sql);         pstm.executeUpdate();      
 安全   存在SQL注入安全隐患           安全
 性能      相对较低                   相对较高(多个同构SQL)
 SQL结构   已构SQL                    同构 SQL


  oracle中SQL语句的执行顺序:
  1)权限检查 2)语法检查 3)把SQL语句转成内部指令 4)执行
  其中前3步,统称为编译。

5、日期的处理【重点】
java.text 包

//String日期 (strDate 2008-9-8)–》java.util.Date类型(utilDate)
java.text.SimpleDateFormat sdf= new SimpleDateFormat(“yyyy-MM-dd”);
java.util.Date utilDate = sdf.parse(strDate); //把strDate 转成 java.util.Date

//java.util.Date类型(utilDate)->java.sql.Date类型(sqlDate)

java.sql.Date sqlDate= new java.sql.Date(utilDate.getTime());
//

六、JdbcUtil类的提取【重点】

1、创建数据库的配置文件(.properties文件)
1)后缀 .properties
2)文件的内容要求:
a.一项内容 占 一行;
b.每项内容 由2部分构成 key 和 value 并且使用=连接(key=value);
c.并且 key 是自定义,但是value必须和jdbc代码中的完全相同;
d.key和value中的内容,不允许出现类似 空格 单引 双引 等特殊符号;

2、读取配置文件 bin 下
//在static 静态代码块中读,在类加载时 只执行一次
static{
//文件路径从bin开始往后写,但是不用写bin,必须以/开头 ,/ -代表bin根目录
InputStream is = JdbcUtil.class.getResourceAsStream(“/day1/db.properies”); //拿取类对象
//从rs输入流中读取文件内容,并且自动以key-value的形式存入prop对象
prop.load(is);
}
使用类加载器读文件的好处就是,只要程序运行,我能找到类加载的目录就能找到文件。
java.util Properties
3、使用配置文件中的内容
String driver = prop.getPrpperty()

常见问题:所有的问题都是路径问题
java.lang.NullPointerException

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值