1、JDBC的概念:

Java数据库连接技术(Java DataBase Connectivity)能实现java程序对各种数据库的访问,

由一组使用java语言编写的类 和 接口(jdbc api) 组成,他们位于java.sql以及javax.sql中。

2、JDBC API 使用JDBC访问数据库就要用JDBC API完成3件事: 与数据库链接,返送sql语句 和 处理结果。

Java应用程序可以使用java.sql和javax.sql包中的JDBC APL来链接和操作;

工作的4个重要环节:

(1).DriverManager类:依据数据库的不同,管理JDBC驱动;

(2).Connection接口:负责链接数据库并担任传送数据的任务。

(3).Statement接口:由Connection产生,负责执行SQL语句。

(4).ResultSet接口:负责保存Statement执行后所参数的查询结果。

3、JDBC访问数据库的步骤:

(1)Class.forName(oracle.jdbc.driver.OracleDriver);//加载驱动

(2)Connection conn=DriverManager.getConnection(“jdbc:oracle:thin:@127.0.0.1:1521:orcl”,”scott”,”orcl”);//创建连接

(3).Statement stmt=conn.createStatement();//创建Statement对象

String sql=””;

ResultSet rs= Stmt.executeQuery(sql);

(4)while(rs.next()){int id=rs.getInt(1);

Timestamp time=rs.getTimestamp(“createdate”);}//循环读取结果集

4.资源的释放

Re.close();

Stmt.close();

Conn.close();

5、通过DatasourceFactory和创建database.properties配置文件链接数据库

1.建BaseDao文件,提取建立数据库连接的通用方法

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
package demo.mysql.dao;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
 
 
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
 
import demo.mysql.util.ConfigManager;
 
 
 
public class BaseDao {
    protected Connection conn;
    protected PreparedStatement ps;
    protected Statement stmt;
    protected ResultSet rs;
 
    // 获取数据库链接
    public boolean getConnection() {
        String driver = ConfigManager.getInstance().getString("jdbc.driver_class");
        String url = ConfigManager.getInstance().getString("jdbc.connection.url");
        String username = ConfigManager.getInstance().getString("jdbc.connection.username");
        String password = ConfigManager.getInstance().getString("jdbc.connection.password");
        try {
            // (1).Class.forName()加载驱动
            Class.forName(driver);
            // (2).DriverManager.getConnection(数据库url,用户名,密码);onnection1521
            conn = DriverManager.getConnection(url, username, password);
        catch (ClassNotFoundException e) {
            e.printStackTrace();
            return false;
        catch (SQLException e) {
            e.printStackTrace();
            return false;
        }
        return true;
    }
 
    public Connection getConnection2(){
        try {
            //初始话上下文
            Context cxt=new InitialContext();
            //获取与逻辑名相关联的数据源对象
            DataSource ds=(DataSource)cxt.lookup("java:comp/env/jdbc/orcl");
            conn=ds.getConnection();
        catch (NamingException e) {
            e.printStackTrace();
        catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
    // 增删改
    public int executeUpdate(String sql, Object[] params) {
        int updateRows = 0;
        getConnection();
        try {
            ps=conn.prepareStatement(sql);
            //填充占位符
            for (int i = 0; i < params.length; i++) {
                ps.setObject(i+1, params[i]);
            }
            updateRows=ps.executeUpdate();
        catch (SQLException e) {
            e.printStackTrace();
        }
        return updateRows;
    }
 
    // 查询
    public ResultSet executeSQL(String sql, Object[] params) {
        try {
            getConnection();
            ps=conn.prepareStatement(sql);
            //填充占位符
            for (int i = 0; i < params.length; i++) {
                ps.setObject(i+1, params[i]);
            }
            rs=ps.executeQuery();
        catch (SQLException e) {
            e.printStackTrace();
        }
        return rs;
    }
 
    // 关闭资源
    public boolean closeResource() {
        if (rs!=null) {
            try {
                rs.close();
            catch (SQLException e) {
                e.printStackTrace();
                return false;
            }
        }
        if (ps!=null) {
            try {
                ps.close();
            catch (SQLException e) {
                e.printStackTrace();
                return false;
            }
        }
        if (stmt!=null) {
            try {
                stmt.close();
            catch (SQLException e) {
                e.printStackTrace();
                return false;
            }
        }
        if (conn!=null) {
            try {
                conn.close();
            catch (SQLException e) {
                e.printStackTrace();
                return false;
            }
        }
        return true;
    }
}

  2.创建EmpDao接口

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
package demo.mysql.dao;
 
import java.sql.Date;
 
public interface EmpDao {
    /**
     * 查询
     */
    public void empList();
 
    /**
     * 添加
     */
    public void add(int empno,String ename,String job,int mgr,Date hireDate,double sal,double comm,int deptno);
 
    /**
     * 删除
     */
    public void delete(int empno);
    /**
     * 修改
     */
    public void update(int empno,String ename);
 
}

3.创建EmpDaoImpl实现类:

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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
package demo.mysql.dao.impl;
 
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Timestamp;
 
import demo.mysql.dao.BaseDao;
import demo.mysql.dao.EmpDao;
 
public class EmpDaoImpl extends BaseDao implements EmpDao {
    /**
     * 查询
     */
    public void empList() {
        try {
            // (3).创建statement 对象执行sql
            String sql = "select * from emp";
            Object[] params = {};
            ResultSet rs = this.executeSQL(sql, params);
            // 处理结果集
            while (rs.next()) {
                int empno = rs.getInt("EMPNO");
                String ename = rs.getString("ENAME");
                String job = rs.getString("JOB");
                int mgr = rs.getInt("MGR");
                Timestamp time = rs.getTimestamp("HIREDATE");
                int sal = rs.getInt("SAL");
                double comm = rs.getInt("COMM");
                int deptno = rs.getInt("DEPTNO");
                System.out.println(empno + "\t" + ename + "\t" + job + "\t"
                        + mgr + "\t" + time + "\t" + sal + "\t" + comm + "\t"
                        + deptno);
            }
        catch (SQLException e) {
            e.printStackTrace();
        finally {
            this.closeResource();
        }
 
    }
 
    /**
     * 添加
     */
    public void add(int empno,String ename,String job,int mgr,Date hireDate,double sal,double comm,int deptno){
         
        try {
         
        //(3).创建statement 对象执行sql
        String sql="insert into emp values(?,?,?,?,?,?,?,?)";
        Object[] params={empno,ename,job,mgr,new java.sql.Timestamp(hireDate.getTime()),sal,comm,deptno};
         int i=this.executeUpdate(sql, params);
         if(i>0){
             System.out.println("插入新闻成功");
         }
        }finally{
            this.closeResource();
        }
         
    }
 
    /**
     * 删除
     */
    public void delete(int empno){
         
        try {
        String sql="delete from emp where empno=?";
        Object[] params={empno};
          int i=this.executeUpdate(sql, params);
         if(i>0){
             System.out.println("删除信息成功");
         }
        }finally{
            this.closeResource();
        }
         
    }
 
    /**
     * 修改
     */
    public void update(int empno,String ename){
         
        try {
             
        String sql="update emp set ename=? where empno=?";
        Object[] params={ename,empno};
          
         int i=this.executeUpdate(sql, params);
         if(i>0){
             System.out.println("修改信息成功");
         }
        }finally{
            this.closeResource();
        }
    }
}

3.两种连接数据库的方式

(1)、通过DatasourceFactory连接数据库

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
package demo.mysql.testByDataSource;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
 
public class MysqlDatasourceFactory {
 
    private final String DRIVER = "com.mysql.jdbc.Driver";
    /**
     * 子类可以修改url、username以及pwd的值
     */
    private String username = "root";
    private String pwd = "ablejava";
     
    protected Connection openConnection(){
        Connection con = null;
        try {
            //装载数据库驱动
            Class.forName(DRIVER);
            //建立数据库连接
            con = DriverManager.getConnection(url,username,pwd);
        catch (ClassNotFoundException e) {
            e.printStackTrace();
        catch (SQLException e) {
            e.printStackTrace();
        }
        return con;
    }
 
    public void setUrl(String url) {
        this.url = url;
    }
 
    public void setUsername(String username) {
        this.username = username;
    }
 
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
}

  main方法测试类:

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
package demo.mysql.testByDataSource;
 
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Timestamp;
 
public class Test {
 
    public static void main(String[] args) {
        try {
            MysqlDatasourceFactory m=new MysqlDatasourceFactory();
            System.out.println(m.openConnection());
            // 建立连接
            Connection conn = m.openConnection();
            String sql = "select * from emp";
            PreparedStatement preparedStatement = conn.prepareStatement(sql);
            ResultSet rs = preparedStatement.executeQuery();
             while (rs.next()) {
                 int empno = rs.getInt("EMPNO");
                 String ename = rs.getString("ENAME");
                 String job = rs.getString("JOB");
                 int mgr = rs.getInt("MGR");
                 Timestamp time = rs.getTimestamp("HIREDATE");
                 int sal = rs.getInt("SAL");
                 double comm = rs.getInt("COMM");
                 int deptno = rs.getInt("DEPTNO");
                 System.out.println(empno + "\t" + ename + "\t" + job + "\t"
                            + mgr + "\t" + time + "\t" + sal + "\t" + comm + "\t"
                            + deptno);
            }
        catch (Exception e) {
            e.printStackTrace();
        }
          
    }
 
}

(2)、创建database.properties配置文件链接数据库

在src下创建datebase.properties文件;

添加key – value :

oracle:

1
2
3
4
5
6
7
jdbc.driver_class=oracle.jdbc.driver.OracleDriver;
 
jdbc.connection.url=jdbc:oracle:thin:@localhost:1521:orcl;
 
jdbc.connection.username=scott;
 
jdbc.connection.password=orcl;

mysql:

1
2
3
4
jdbc.driver_class=com.mysql.jdbc.Driver
jdbc.connection.url=jdbc\:mysql\://192.168.9.223\:3306/test_2016?useUnicode\=true&characterEncoding\=utf-8
jdbc.connection.username=root
jdbc.connection.password=ablejava

设置配置工具类(Class ConfigManager(){})

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
package demo.mysql.util;
 
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
 
public class ConfigManager {
    private static ConfigManager configManager;
    private static Properties properties;
    private ConfigManager(){
        String configFile="database.properties";
        try {
            properties=new Properties();
            InputStream in=ConfigManager.class.getClassLoader().getResourceAsStream(configFile);
            //读取配置文件
            //properties.load(InputStream);读取文件
            properties.load(in);
            in.close();//将流关闭
        catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 通过单例模式设置实例化的个数
     * @return
     */
    public static ConfigManager getInstance(){
        if (configManager==null) {
            configManager=new ConfigManager();
        }
        return configManager;
    }
    /**
     * 在database.properties总根据key得到对应的value值
     */
    public String getString(String key){
        return properties.getProperty(key);
    }
}

6.使用ConfigManager()工具类读取数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
package demo.mysql.testByProperties;
 
import demo.mysql.dao.EmpDao;
import demo.mysql.dao.impl.EmpDaoImpl;
 
public class Test {
 
    public static void main(String[] args) {
        EmpDao empDao = new EmpDaoImpl();
        empDao.empList();
    }
 
}

  运行结果:

6、PreparedStatement对象

PreparedStatement接口继承来自Statement接口,它对SQL语句进行了预编译,所以执行速度快于Statement对象,Sql语句具有一个或多个数据参数,这些参数的值在SQL中没指定,可以为每个参数保留一个问号(?)作为占位符,热后用对象赋值。

如果数据类型是日期格式采用:

SetTimestamp(参数位置,new java.sql.Timestamp(new java.util.Date().getTime()));

如果数据类型为Clob类型,则可将其视为String类型那个进行设置。

7.Sql注入: a’ or 1=1 --

8.MVC设计模式概念(三层模式):

1、 表示层

职责:位于最上层,用户能够直接访问,用与显示数据和接收用户数据的数据,为用户提供一种交互式操作界面,一般为web应用程序,以jsp文件,HTML文件为主。

2、业务逻辑层:

职责:提供对业务逻辑处理的封装,通常会定义一些接口,通常放在biz包下。

3、  数据库访问层:

职责:实现对数据的保存和读取操作,数据访问,可以访问数据库,文本文件或xml文挡,通常放在dao包中。

MVC:一般把业务逻辑层和数据访问层称Modle层,把表示层称View层,在V层和M层中间还有Control层。

9、数据源与连接池:

数据源的作用就是获取数据连接,而连接池则是对已经创建好的连接对象进行管理,二者作用不同。

oracle连接数据源的配置步骤:

1. 在tmocat服务器中添加数据库驱动,将oracle14.jar添加到tomcat安装目录的lib文件夹中。

2. 在tomcat服务器中配置。

<Resource name="jdbc/orcl" auth="Container" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" username="scott" password="orcl" driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@localhost:1521:orcl"/>

maxActive:表示处于活动最大连接数量,maxIdle:处于空闲的最大连接数量,maxWait:最大等待时间,-1表示无限等待,单位ms

3. 使用JNDI读取数据源:

JNDI(Java Naming and Directory interface,java命名与目录接口),获取数据源时,javax.naming.context提供了查询jndiResource的接口,通过该对象的lookup()方法,就可以找到之前创建好的数据源。

public Connection getConnection2(){

try {

//初始话上下文

Context cxt=new InitialContext();

//获取与逻辑名相关联的数据源对象

DataSource ds=(DataSource)cxt.lookup("java:comp/env/jdbc/orcl");

conn=ds.getConnection();

} catch (NamingException e) {

e.printStackTrace();

} catch (SQLException e) {

e.printStackTrace();

}

return conn;

}

8、jsp中的动作标签

<jsp:useBean id=”newService” class=”com.service.newServiceImpl” scop=”page”>  scop的取值为:page(默认),request,session,application

<jsp:useBean id=”newsDao” class=”com.impl.newDaoImpl” scop=”page”>

<jsp:setProperty property=”newsDao” name=”newsService” value=”<%=newsDao %>”>

等同于:NewsServiceImpl newsService=new NewsServiceImpl();

NewsDao newsDao=new NewsDaoImpl();

newsService.setNewsDao(newsDao);

jsp页面的包含:

<%@include file="top.jsp" %>  静态包含

<jsp:include page=”url”>  动态包含

静态包含与动态包含的区别:

静态

动态

<%@include file=”url”>

<jsp:include page=”url”>

先将页面包含,后执行页面代码,将一个页面的代码复制到另一个页面中

先执行页面代码,后将页面包含,即将一个页面的运行结果包含到另外一个页面中

被包含的页面内容发生变化时,包含页面也将会被重新编译

被包含页面内容发生变化时,包含页面不会重新编译

页面的跳转:

<jsp:forward page=”url”> 同转发效果相同

DatasourceFactory

源码下载:https://github.com/xiazhongwei-gitHub/JDBC

 
分类: Java
 
谢谢推荐! 关注成功 收藏该文  
 
 
关注成功
1
 
 
posted @ 2016-06-19 13:49 夏中伟 阅读(62) 评论(0)  编辑 收藏
 
 
发表评论

昵称:

评论内容:
     
 

退出登录 订阅评论

 

[Ctrl+Enter快捷键提交]

 
 
 
 
 
Copyright ©2016 夏中伟

JDBC与javaBean的更多相关文章

  1. java语言体系的技术简介之JSP、Servlet、JDBC、JavaBean(Application)

    转自:https://zhangkunnan.iteye.com/blog/2040462 前言 Java语言 Java语言体系比较庞大,包括多个模块.从WEB项目应用角度讲有JSP.Servlet. ...

  2. JavaBean个人总结

    JavaBean在JSP程序中的应用 JavaBean是为Java语言设计的软件组件模型,具有可重复使用和跨平台的特点.可以通过JavaBean来封装业务逻辑,进行数据库操作等,从而很好的实现业务逻辑 ...

  3. jesperreport+ireport简单理解

    ireport:主要是生成报表模板 jesperreport:主要是用.jesper文件填充数据(jdbc.javabean)生成面向用户的文件(PDF.HTML等)

  4. 2017年--10年java大神告诉你开发最常用的百分之二十的技术有哪些?

    首先题主说的20%我不知道从哪方面去理解.接下来我会将自己多年来工作中会经常使用到的技术列出来. 1.html.css 2.java工作原理(jvm) 3.java语法.数据结构和算法 4.java语 ...

  5. web前端的环境配置

    1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源(如html 页 ...

  6. mess系统 开发技术,需求整理

    1.1.WEB开发的相关知识 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资源分为: 静态web资源(如html 页 ...

  7. Java web项目所需技术*(大概)

    实施java 的web项目需要掌握的技术如下: 1.java语言 2.  面向对象分析设计 XML 语言 网页脚本语言 数据库 应用服务器 集成开发环境 .java语言:JSP.Servlet.JDB ...

  8. 虚拟机--第一章走进java--(抄书)

    这是本人阅读周志明老师的<深入理解Java虚拟机>第二版抄写的,有很多省略,不适合直接阅读,需要阅读请出门左转淘宝,右转京东,支持周老师(侵权请联系删除) 第一章走近java 世界上并没有 ...

  9. 利用Java针对MySql封装的jdbc框架类 JdbcUtils 完整实现(包含增删改查、JavaBean反射原理,附源码)

    最近看老罗的视频,跟着完成了利用Java操作MySql数据库的一个框架类JdbcUtils.java,完成对数据库的增删改查.其中查询这块,包括普通的查询和利用反射完成的查询,主要包括以下几个函数接口 ...

随机推荐

  1. 【Cocos2d-X开发学习笔记】第26期:游戏背景之滚动地图背景(CCParallaxNode)的使用

    本系列学习教程使用的是cocos2d-x-2.1.4(最新版为3.0alpha0-pre) ,PC开发环境Windows7,C++开发环境VS2010 在现实生活中,当我们身处一辆快速行驶的车上,用眼 ...

  2. Java调用R(三)_系统命令调用

    java通过配置的系统命令Rscript直接调用R脚本. 优点:R脚本和Java代码完全分离 缺点:R中变量不能控制 1. Java本地能够成功调用. public void CallR() { Ru ...

  3. eclipse下开发简单的Web Service

    service部分 在eclipse下新建一个动态web项目 在项目中新建一个service类 编写SayHello类的代码 package org.sunny.service; //包不要引用错了 ...

  4. DB2 创建数据库

    0.一些准备工作可能用到的命令 db2cmd --进入db2命令行 db2 list database directory --显示已有的数据库 db2 drop db pcore --删除一个数据库 ...

  5. ganglia Web前端清除当机节点

    ganglia默认如果服务器down机也不会在web前段清除该设备,官方文档介绍的办法如下: 1. 登录中央gmeta和gmond机器 2. vi gmond.conf,修改如下,host_dmax默 ...

  6. Android ExpandableListView实例Demo

    前几篇文章介绍了Listview.但在实际开发中也常常会用到多层的Listview来展示数据,比方qq中的好友展示,所以这张来了解一下ExpandableListview.基本思想与Listview大 ...

  7. poj2239 Selecting Courses --- 二分图最大匹配

    匈牙利算法模板题 有n门课程,每门课程可能有不同一时候间,不同一时候间的课程等价. 问不冲突的情况下最多能选多少门课. 建立二分图,一边顶点表示不同课程,还有一边表示课程的时间(hash一下). #i ...

  8. boost库在工作(15)绑定器与函数对象之三

    前面已经可以优美地解决两个参数的函数给算法for_each调用了,但是又会遇到这样的一种情况,当需要三个参数或者三个以上的参数给算法for_each调用呢?从STL里的绑定器bind1st,显然是不行 ...

  9. YYModel 源码历险记 代码结构

    前言 因为公司需要开发一个内部使用的字典转模型的项目,所以最近也是在看关于字典转模型的内容.有Mantle,jsonModel,MJExtension等众多框架,最后还是选择了先从YYModel源码读 ...

  10. TCP/IP协议原理与应用笔记07:HTTP、TCP/IP与socket区别

    1. TCP/IP协议与HTTP协议区别:      HTTP 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件 ...