一.回想

还记得以前自学的时候,刚接触到数据库,讲解的连接数据库的最基本的理论知识和方法,现在温习一下基础知识并总结如下!

1.JDBC连接数据库的基本流程

加载JDBC驱动程序 —> 提供JDBC连接的URL,ROOT,PASSWORD —> 连接数据库 —> 获取Statement相关类 —> 完成增删改 —> 关闭JDBC的相关对象

2.详细

①JDBC的驱动程序的加载

网上有说到JDBC加载驱动程序有4种方法,但是不太明白。这里用java的反射来完成驱动程序的加载。但是前提是需要相应的jar包才能成功加载

maven配置jar包:

        <!-- mysql驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.9</version>
<scope>runtime</scope>
</dependency>

mysql的驱动:com.mysql.jdbc.Driver

oracle的驱动:oracle.jdbc.driver.OracleDriver

for example:

Class.forName(com.mysql.jdbc.Driver);//初始化jdbc驱动,并加载相应的驱动到jvm中

②连接数据库

这里使用的是java SE API 提供的DriverManager类来获得连接的Connection接口

mysql的url:jdbc:mysql://localhost:3306/test(数据库名)

oracle的url:jdbc:oracle:thin:@localhost:1521:test(数据库名)

for example:

 String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String passwd = "root"; Connection connection = DriverManager.getConnection(url,user,passwd);

可以配置properties文件通过流获取

for example:

jdbc.properties文件内容(键值对的形式):

url:jdbc:mysql://localhost:3306/test

user:root

passwd:root

获取:

InputStream in = this.getClass().getResourceASStream("/jdbc.properties");
Properties p = new Properties();
p.load(in);
String url = p.getProperty("url");
String user = p.getProperty("user");
String passwd = p.getProperty("passwd");

③获取Statement相关类进行增删改

Interface Statement(只能用于执行静态代码+拼接):

方法:boolean  execute(String sql);

int  executeUpdate(String sql);//可执行增删改

ResultSet  executeQuery(String sql);//执行查询功能

Statement statement = connection.createStatement();
//boolean flag = statement.executeUpdate("update table1 set name = 'xl' where id = 1");//增删改用executeUpdate方法
ResultSet resultSet = statement.executeQuery("select * from table1");//查询使用executeQuery方法 返回ResultSet
while(resultSet.next()){
System.out.print(resultSet.getObject(1)+"---"+resultSet.getObject(2));
//System.out.print(resultSet.getString(1)++"---"+resultSet.getDate(2));
}

Interface PreparedStatement(可以执行动态代码):

方法:boolean   execute();

int   executeUpdate();//可执行增删改

ResultSet  executeQuery();//执行查询功能

 String sql = "update test set name = ? where id = ?";
PreparedStatement ps = connection.prepareStatement(sql);
ps.setString(1,"ssx");
ps.setInt(2,1);
ps.execute();

另外,可由ResultSet 获得接口ResultSetMetadate(使用getMetaDate()方法)

方法:String getCatalogName(int column)   获取表名

int getColumnCount()  :获取结果集的列数

String getColumnLabel(int column) :获取相应列的列名

3.封装jdbc

可以参看这里:写的很好

二.通过JNDI配置数据库信息(Spring)

JNDI:

  • JNDIJava Naming and Directory Interface java命名和目录服务接口
  • 降低程序和程序之间的耦合性
  • 降低设备和设备的耦合性
  • Tomcat服务器实现了JNDI服务,启动Tomcat服务器,等同于启动JNDI服务器
  • JNDI是SUN制定的一套规范,这套规范可以和JDBC进行类比,JDBC也是一套规范,我们面向JDBC接口调用就可以获取数据库中的数据。同样,我们面向JNDI接口调用,可以获取“资源”,这个资源不是在底层数据库中。
  • JNDI提供了一种服务,这个服务可以将“名称”和“资源”进行绑定,然后程序员通过面向JNDI接口调用方法lookup可以查找到相关的资源。

1.在tomcat目录下的conf/context.xml中配置如下:

<Resource name="jdbc/microDB" auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://127.0.0.1:3306/micro_dev?characterEncoding=UTF-8"
username="root"
password="root"
maxActive="50"
maxIdle="30"
maxWait="10000"/>

2.在spring的配置文件中配置如下(applicationContext.xml):

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/microDB</value>
</property>
</bean>

3.在项目的根目录下的web.xml中配置如下:

 <resource-ref>
<description>DHCP数据库连接池</description>
<res-ref-name>jdbc/microDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

4.编写测试连接

public class PropertyConnDateBase {
public static void test(){
Connection conn = null;
Context context = null;
try {
context = new InitialContext();
DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/microDB");
conn = ds.getConnection();
System.out.println(conn);
}catch (Exception e){
e.printStackTrace();
}finally { }
}
}

5.在jsp页面中测试

<%PropertyConnDateBase.test();%>

6.在后台可以看到打印成功;

**:不能通过在main方法中获取到jndi的连接来测试,这个jndi可能必须要在服务器开启的情况下才能获取到上下文context,main属于一个静态的方法,会报错没有初始化的context。

【jdbc】连接数据库从浅入深的更多相关文章

  1. Mybatis源码解析,一步一步从浅入深(一):创建准备工程

    Spring SpringMVC Mybatis(简称ssm)是一个很流行的java web框架,而Mybatis作为ORM 持久层框架,因其灵活简单,深受青睐.而且现在的招聘职位中都要求应试者熟悉M ...

  2. Mybatis源码解析,一步一步从浅入深(三):实例化xml配置解析器(XMLConfigBuilder)

    在上一篇文章:Mybatis源码解析,一步一步从浅入深(二):按步骤解析源码 ,中我们看到 代码:XMLConfigBuilder parser = new XMLConfigBuilder(read ...

  3. Mybatis源码解析,一步一步从浅入深(四):将configuration.xml的解析到Configuration对象实例

    在Mybatis源码解析,一步一步从浅入深(二):按步骤解析源码中我们看到了XMLConfigBuilder(xml配置解析器)的实例化.而且这个实例化过程在文章:Mybatis源码解析,一步一步从浅 ...

  4. Mybatis源码解析,一步一步从浅入深(七):执行查询

    一,前言 我们在文章:Mybatis源码解析,一步一步从浅入深(二):按步骤解析源码的最后一步说到执行查询的关键代码: result = sqlSession.selectOne(command.ge ...

  5. 浅入深出之Java集合框架(上)

    Java中的集合框架(上) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到<浅入深出之Java集合框架 ...

  6. 浅入深出之Java集合框架(中)

    Java中的集合框架(中) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,如果已经有java基础的小伙伴可以直接跳到<浅入深出之Java集合框架 ...

  7. 浅入深出之Java集合框架(下)

    Java中的集合框架(下) 由于Java中的集合框架的内容比较多,在这里分为三个部分介绍Java的集合框架,内容是从浅到深,哈哈这篇其实也还是基础,惊不惊喜意不意外 ̄▽ ̄ 写文真的好累,懒得写了.. ...

  8. 浅入深出Vue:环境搭建

    浅入深出Vue:环境搭建 工欲善其事必先利其器,该搭建我们的环境了. 安装NPM 所有工具的下载地址都可以在导航篇中找到,这里我们下载的是最新版本的NodeJS Windows安装程序 下载下来后,直 ...

  9. 浅入深出Vue:工具准备之PostMan安装配置及Mock服务配置

    浅入深出Vue之工具准备(二):PostMan安装配置 由于家中有事,文章没顾得上.在此说声抱歉,这是工具准备的最后一章. 接下来就是开始环境搭建了~尽情期待 工欲善其事必先利其器,让我们先做好准备工 ...

随机推荐

  1. jquery操作select下拉框的多种方法(选中,取值,赋值等)

    Query获取Select选择的Text和Value: 语法解释: 1. $("#select_id").change(function(){//code...}); //为Sel ...

  2. Linux iptables 安全配置(防Ddos)

    *filter:INPUT ACCEPT [0:0]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [0:0]-N whitelist-A whitelist -s 58.60 ...

  3. SqlSever 使用 CROSS APPLY 与 OUTER APPLY 连接查询

    前言 日常开发中遇到多表查询时,首先会想到 INNER JOIN 或 LEFT OUTER JOIN 等等,但是这两种查询有时候不能满足需求.比如,左表一条关联右表多条记录时,我需要控制右表的某一条或 ...

  4. Linux学习笔记:Jenkins的使用(二)

    一些插件的使用 Deploy to container Plugin jenkins安装完成之后,添加插件 Deploy to container Plugin ,这个插件可以将打好的war包部署到t ...

  5. Xshell连接不上阿里云服务器

    心血来潮买了一台1核2g内存,外加40g系统盘的阿里云ecs服务器,在配置xshell连接服务器一直无法连接,试了很多种方法,各种心累,不过最后还是找到了原因,是因为在服务器上没有配置安全组规则,附上 ...

  6. C# byte[]数组和string的互相转化 (四种方法)

    C# byte[]数组和string的互相转化 (四种方法) 第一种 [csharp] view plain copy string str = System.Text.Encoding.UTF8.G ...

  7. 20175316盛茂淞 2018-2019-2 《Java程序设计》第8周学习总结

    20175316盛茂淞 2018-2019-2 <Java程序设计>第8周学习总结 教材学习内容总结 第十五章 泛型 -- 主要目的是可以建立具有类型安全的集合框架,如链表.散列映射等数据 ...

  8. Nikto主动扫描神器!!!

    Perl语言开发的开源web安全扫描器 Nikto只支持主动扫描:可扫描web服务器类型是不是最新版本(分析先版本与新版相比有哪些漏洞) 针对:1.软件版本.2.搜索存在安全隐患的文件.3.服务器配置 ...

  9. Python小技巧:运行目录或ZIP文件

    在写Python程序时,将不同功能代码写在不同文件中是一个好习惯,但是对于某些情况.如需要将脚本提供给别人运行使用,如若将程序写在几个文件中,则需要将文件都发给他人.别人就需要管理不同文件,这样对于别 ...

  10. 用python turtle实现汉诺塔的移动

    1.汉诺塔 汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命令婆罗门把圆盘从下面开始按大小 ...