JDBC与反射
什么是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();
}
}
|
JDBC与反射的更多相关文章
- JDBC 利用反射 配置文件
import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.s ...
- JDBC连接数据库反射实现O/R映射
测试preparedStatement public void testPreparedStatement(){ Connection connection=null; PreparedStateme ...
- 6.秋招复习简单整理之请你谈谈JDBC的反射,以及它的作用?
通过反射com.mysql.jdbc.Driver类,实例化该类时会调用该类的静态代码块,该代码块会去java的DriverManager类中注册自己,DriverManager管理所有已注册的驱动类 ...
- Java JDBC利用反射技术将查询结果封装为对象
1.JDBC将返回结果集封装成对象demo class JdbcDemo { /** * 获取数据库列名 * @param rs * @return */ private static String[ ...
- JDBC 利用反射技术将查询结果封装为对象(简单ORM实现)
ORM(Object Relational Mapping)对象关系映射 public class ORMTest { public static void main(String[] args) t ...
- java反射知识点总结
一.java反射基础 1.1 什么叫java反射? 答:程序运行期间,动态的获取类的基本信息.比如:创建对象,调用类的方法,获得类的基本结构.这样给程序设计提供了很大的灵活性.个人总结就是:根据动态需 ...
- Java反射使用总结
最近公司招了几名刚毕业的大学生,在给他们培训的过程中,讲到反射,他们有些人听不懂,对反射的概念云里雾里的,不知道反射有什么用. 因此就有了本文的诞生. 反射是java提供的一个重要功能,可以在运行时检 ...
- JDBC上
JDBC实战--打通数据库 代码实现: package com.imooc.db; import java.sql.Connection; import java.sql.DriverManager; ...
- JDBC基础篇(MYSQL)——通过JDBC连接数据库的三种方式
package day01_jdbc; import java.sql.Connection; import java.sql.Driver; import java.sql.DriverManage ...
随机推荐
- C 语言资源大全中文版
C 语言资源大全中文版 我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-c 是 koz.ross 发起维护的 C 语言资源列表,内容包括了: ...
- Craig可能是个冲浪爱好者
最近有个叫Dweeb的Mac管理员,在他的blog中声称发现,主管OS X和iOS等软件产品的苹果资深副总裁Craig是一个冲浪爱好者.他通过对6月10日的苹果WWDC发布会视频的研究,指出Craig ...
- 移动App-UI配制篇
杂志app-UI配制篇 背景 现在公司有需求是关于杂志app,里面每个页面可能有不同的展现方式,不同的内容,不同的操作方式.那么这里就有一个需求就是根据用户定制这些不同的展现方式,不同的内容,不同的操 ...
- cct,web技术
基本信息 全国计算机等级考试二级教程——Web程序设计(2016年版)作 者:教育部考试中心 编出 版 社:高等教育出版社出版时间:20115-12-1 ISBN:9787040442991版 ...
- tbb 线程安全concurrent_queue的性能
tbb实现了线程安全的queue,这样程序员既可以不用和那些lock,mutex,criticalsection打交道,又大大提高性能,太给力了..比较的结果见代码中的注释.结果可以看出代码足足少一半 ...
- opencv如何载入内存中的图像文件
其实很简单,cv::imdecode 支持 std::vector<uchar>的,只要把char* 转 std::vector<uchar>就行了.用 std::vector ...
- 在Ubuntu上录制视频和编辑(很全)
Linux多媒体三剑客:GIMP,Inkscape,Blender3D Blender基金会制作的开源微电影Sintel:http://www.sintel.org/about电影采用Creative ...
- Oracle中四种循环(GOTO、For、While、Loop)
DECLARE x number; BEGIN x:=9; <<repeat_loop>> --循环点 x:=x-1; DBMS_OUTPUT.PUT_LINE(X); IF ...
- 再谈JSON -json定义及数据类型
再谈json 近期在项目中使用到了highcharts ,highstock做了一些统计分析.使用jQuery ajax那就不得不使用json, 可是在使用过程中也出现了非常多的疑惑,比方说,什么情况 ...
- unable to load default svn client 和 Eclipse SVN 插件与TortoiseSVN对应关系
(一)unable to load default svn client 在Win7下的Eclipse,安装了subclipse 1.10.x,已经选中了subclipse和subversion Cl ...