什么是JDBC

Java定义了一套关于连接使用数据库的规范(接口)叫做JDBC,许多数据库厂商实现了这个规范,所以我们可以通过Java提供的接口编程,使得我们更换数据库的时候不用修改原来的代码,只需要通过修改配置文件即可,修改什么配置文件呢?下面会说。

什么是反射

如果我们在程序运行的时候得到一个字符串,而这个字符串是某个类的类名,如果要实例化这个类,那么就需要用到反射。

 
1
2
3
4
 
String className = "com.mysql.jdbc.Driver";//完整的包名+类名
Driver driver = (Driver)Class.forName(driverClass).newInstance();//通过反射实例化这个类
 

JDBC的使用过程

使用JDBC的时候要去下载对应的驱动程序,使用mysql,就要去mysql的官网下载,使用oracle,就去oracle的官网下载,然后把类库导入到工程中。这些驱动程序,其实就是实现了JDBC规范的类库。我使用的是mysql。

1.首先通过反射com.mysql.jdbc.Driver类,实例化该类的时候会执行该类内部的静态代码块,该代码块会在Java实现的DriverManager类中注册自己,DriverManager管理所有已经注册的驱动类,当调用DriverManager.geConnection方法时会遍历这些驱动类,并尝试去连接数据库,只要有一个能连接成功,就返回Connection对象,否则则报异常。

2.通过使用DriverManager.geConnection(url,user,password)函数,传入url,数据库用户名,数据库密码,得到数据库的Connection对象。

com.mysql.jdbc.Driver是mysql驱动类的全名,oracle驱动类的全名是oracle.jdbc.driver.OracleDriver。

连接数据库时要传入相应的url,

mysql url的格式是:jdbc:mysql://<ip>:3306/<database_name>

oracle url的格式是:jdbc:oracle:thin:<ip>:1521:<database_name>

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
public void TestJDBC2(){
 
try {
//通过反射实例化com.mysql.jdbc.Driver,
Driver driver = (Driver)Class.forName("com.mysql.jdbc.Driver").newInstance();
 
//得到数据库的连接对象
Connection conn =
DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/notedb","root","");
System.out.println(conn);
 
 
}  catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
 

通过配置文件使用JDBC

从上面可以看出,我们把数据库的驱动名和url写死在了程序中,那么更换数据库的时候还是需要更改程序代码的。

我们可以将信息写在配置普文件中,程序运行时读取配置信息,然后通过配置信息连接数据库,那么程序和数据库的耦合度就很低了,可以随时更换数据库。

1.在程序目录下新建jdbc.properties配置文件,并写入连接数据库有关的信息。

2.读取配置信息,获取连接数据库所需要的属性值。

3.通过JDBC连接数据库。

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
 
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
 
 
public class Main {
 
public void TestJDBC(){
 
//将配置文件变成输入流
InputStream in =
getClass().getClassLoader().getResourceAsStream("jdbc.properties");
Properties properties = new Properties();
try {
//从流中获取配置信息到Properties对象
properties.load(in);
//读取配置文件
String driverClass = properties.getProperty("driver");
String jdbcUrl = properties.getProperty("jdbcUrl");
String user = properties.getProperty("user");
String password = properties.getProperty("password");
 
//注册驱动
Driver driver = (Driver)Class.forName(driverClass).newInstance();
 
Connection conn = DriverManager.getConnection(jdbcUrl,user,password);
System.out.println(conn);
 
 
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
 
 
}
public static void main(String[] args) {
Main m = new Main();
m.TestJDBC2();
 
}
 
}
 
» 本文链接:http://alphaway.org/post-327.html
» 订阅本站:http://www.alphaway.org
» 转载请注明来源:alphaway博客 » 《JDBC与反射》

JDBC与反射的更多相关文章

  1. JDBC 利用反射 配置文件

    import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.s ...

  2. JDBC连接数据库反射实现O/R映射

    测试preparedStatement public void testPreparedStatement(){ Connection connection=null; PreparedStateme ...

  3. 6.秋招复习简单整理之请你谈谈JDBC的反射,以及它的作用?

    通过反射com.mysql.jdbc.Driver类,实例化该类时会调用该类的静态代码块,该代码块会去java的DriverManager类中注册自己,DriverManager管理所有已注册的驱动类 ...

  4. Java JDBC利用反射技术将查询结果封装为对象

    1.JDBC将返回结果集封装成对象demo class JdbcDemo { /** * 获取数据库列名 * @param rs * @return */ private static String[ ...

  5. JDBC 利用反射技术将查询结果封装为对象(简单ORM实现)

    ORM(Object Relational Mapping)对象关系映射 public class ORMTest { public static void main(String[] args) t ...

  6. java反射知识点总结

    一.java反射基础 1.1 什么叫java反射? 答:程序运行期间,动态的获取类的基本信息.比如:创建对象,调用类的方法,获得类的基本结构.这样给程序设计提供了很大的灵活性.个人总结就是:根据动态需 ...

  7. Java反射使用总结

    最近公司招了几名刚毕业的大学生,在给他们培训的过程中,讲到反射,他们有些人听不懂,对反射的概念云里雾里的,不知道反射有什么用. 因此就有了本文的诞生. 反射是java提供的一个重要功能,可以在运行时检 ...

  8. JDBC上

    JDBC实战--打通数据库 代码实现: package com.imooc.db; import java.sql.Connection; import java.sql.DriverManager; ...

  9. JDBC基础篇(MYSQL)——通过JDBC连接数据库的三种方式

    package day01_jdbc; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManage ...

随机推荐

  1. js监听滚动条 回到顶端

    效果:当出现滚动条,且滚动条出现移动时,把回到顶端按钮 显示出来:当滚动条回到顶部时,将回到顶端按钮隐藏. <script type="text/javascript"> ...

  2. Element.Event

    addEvent(type,fn):为DOM元素增加一个事件监听器 removeEvent(type,fn):移除先前为DOM元素添加的事件监听器 eg: var destroy = function ...

  3. HDU 2152 Fruit (母函数)

    # include<stdio.h> # include <algorithm> # include <string.h> # include <iostre ...

  4. Codeforces 282E Sausage Maximization(字典树)

    题目链接:282E Sausage Maximization 题目大意:给定一个序列A.要求从中选取一个前缀,一个后缀,能够为空,当时不能重叠.亦或和最大. 解题思路:预处理出前缀后缀亦或和,然后在字 ...

  5. vs2005及以上版本的程序分发问题

    我们使用vs2005及以上版本编译的应用程序(C/C++),在客户机器运行时,会出现: “由于应用程序的配置不正确,应用程序未能启动,重新安装应用程序可能会纠正这个问题” 那么,我们怎么解决这个问题呢 ...

  6. uva 10131 Is Bigger Smarter?(DAG最长路)

    题目连接:10131 - Is Bigger Smarter? 题目大意:给出n只大象的属性, 包括重量w, 智商s, 现在要求找到一个连续的序列, 要求每只大象的重量比前一只的大, 智商却要小, 输 ...

  7. Android监听外部存储设备的状态(SD卡、U盘等等)

    近期在项目中须要对外部存储设备的状态进行监听,所以整理了此笔记,以便日后查看. 外部存储设备的状态变化时发出的广播 对照不同状态下的广播 1. 插入外部SD卡时: 2. 移除外部SD卡时: 3. 连接 ...

  8. 用Python制作游戏外挂(上)

    源地址:http://eyehere.net/2012/python-game-bot-autopy-1/ 悲剧成我这样的人,我知道肯定不止我一个,所以我一点都不悲伤:-( 所以我打开了4399小游戏 ...

  9. Objective-C中经常使用的结构体NSRange,NSPoint,NSSize(CGSize),NSRect

    Objective-C中经常使用的结构体NSRange,NSPoint,NSSize(CGSize),NSRect 1   NSRange NSRange 的原型为 typedef struct _N ...

  10. 简单深刻:为控件创建MouseEnter和MouseLeave事件(覆盖WndProc,增加对消息的处理,真简单!)——连对CM_MOUSEENTER的消息处理都是颇有深意啊!

    其实很简单: unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, D ...