【JDBC】使用JDBC连接Oracle数据库(JAVA反射机制)

db.properties文件

driverClassName=oracle.jdbc.OracleDriver
url=jdbc:oracle:thin:@localhost:1521:xe
username=system
password=123456

db.properties

JDBCUtilProperties.java文件

对数据连接和释放资源的封装,

package com.xdl.util;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JDBCUtilProperties {
    public  static   String   driverClassName;
    public  static   String   url;
    public  static   String   username;
    public  static   String   password;
    static {
        try {
            // 读取 db.properties 文件 ,路径是相对于项目的路径
            InputStream  inputStream = JDBCUtilProperties.class.getClassLoader().
                getResourceAsStream("com/xdl/util/db.properties");
            /* Properties  就是一个key value 结构  */
            Properties  pro = new Properties();
            try {
                pro.load(inputStream);
                driverClassName = pro.getProperty("driverClassName");
                url = pro.getProperty("url");
                username = pro.getProperty("username");
                password = pro.getProperty("password");
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            Class.forName(driverClassName);
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    /* 获取数据库 连接的方法  */
    public  static  Connection   getConnection(){
        Connection  conn  = null;
        try {
            conn = DriverManager.getConnection(url, username, password);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return  conn;
    }
    /* 释放资源的方法  */
    public  static  void  releaseResource(Connection conn,Statement st,ResultSet rs){
        if(rs != null){
            try {
                rs.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                rs = null;
            }
        }
        if(st != null){
            try {
                st.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                st = null;
            }
        }
        if(conn != null){
            try {
                conn.close();
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally{
                conn = null;
            }
        }
    }
}

JDBCUtilProperties.java

Test.java文件

package com.xdl.test;

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import com.xdl.entity.User;
import com.xdl.util.JDBCUtilProperties;

public class Test1 {

    public static void main(String[] args) {
        //使用工具类 来获取连接
        Connection conn = null;
        Statement st = null;
        ResultSet rs = null;
        //建立连接
        conn = JDBCUtilProperties.getConnection();
        //获得执行环境
        try {
            st = conn.createStatement();

        } catch (SQLException e) {
            e.printStackTrace();
        }

        try {
            rs = st.executeQuery("select * from MyUser");

//              while(rs.next()){ // 希望把数据 封装成java的对象 User user = new User();
//              user.setId(rs.getInt("ID"));
//              user.setName(rs.getString("NAME"));
//              user.setPassword(rs.getString("PASSWORD"));
//              System.out.println(user);
//            }

            //上面这种方式是使用硬编码的方式,也是最常用的方式。
            //下面这种方式是采用软编码的方法,
            //利用java中的反射机制,
            //当前文件分别建立和User类、查询结果的反射,
            //然后再拼装出上面的功能。
            ResultSetMetaData rsmd = rs.getMetaData();
            //获得此ResultSet对象中列的数量
            int columns = rsmd.getColumnCount();
            String userStr = "com.xdl.entity.User";
            List<User> datas = new ArrayList<User>();
            //将光标从当前位置向前移一位
            while (rs.next()) {
                // 里面使用底层的信息 包装对象,获得User类的Class对象
                Class<?> u = Class.forName(userStr);
                Object obj = null;
                //获得User对象
                obj = u.newInstance();
                Field[] fs = u.getDeclaredFields();

                for (int i = 1; i <= columns; i++) {
                    for (Field f : fs) {
                        //判断User对象是否有和MyUser表中相等的字段
                        if (f.getName().toUpperCase().equals(rsmd.getColumnName(i))) {
                            //当前字段的类型名称是NUMBER
                            if (rsmd.getColumnTypeName(i).equals("NUMBER")) {
                                //取消对User类的访问权限检查
                                f.setAccessible(true);
                                try {
                                    //向User对象中插入对应的值
                                    f.setInt(obj, rs.getInt(rsmd.getColumnName(i)));
                                } catch (IllegalArgumentException | IllegalAccessException e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                }
                            }
                            //当前字段的类型名称是Varchar2
                            if (rsmd.getColumnTypeName(i).equals("VARCHAR2")) {
                                f.setAccessible(true);
                                try {
                                    f.set(obj, rs.getString(rsmd.getColumnName(i)));
                                } catch (IllegalArgumentException | IllegalAccessException e) {
                                    // TODO Auto-generated catch block
                                    e.printStackTrace();
                                }
                            }
                        }
                    }

                }
                //将当前User对象存储到一个User集合中
                datas.add((User) obj);
            }
            for(User user:datas){
                System.out.println(user);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (InstantiationException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } catch (IllegalAccessException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        } finally {
            JDBCUtilProperties.releaseResource(conn, st, rs);
        }
    }
}

Test.java

时间: 2024-10-10 06:55:49

【JDBC】使用JDBC连接Oracle数据库(JAVA反射机制)的相关文章

java程序通过jdbc连接oracle数据库方法

1.  赋予scott用户连接权限:Grant connect to scott: 2.   在Myeclipse中新建java项目导入jdbc包(classes12.jar):        右键项目 bulid path -〉add external archives 选择classes12.jar 3.   新建java文件, lianxi01.java import java.sql.Connection; import java.sql.ResultSet; import java.s

JAVA通过JDBC连接Oracle数据库详解【转载】

JAVA通过JDBC连接Oracle数据库详解 (2011-03-15 00:10:03) 转载▼http://blog.sina.com.cn/s/blog_61da86dd0100q27w.html Java连接Oracle步骤: 1.注册加载驱动 驱动名:DRIVER="oracle.jdbc.driver.OracleDriver"; Class.forName("驱动类名"); 2.获得连接 数据库地址: URL="jdbc:oracle:thi

java通过jdbc方式连接oracle数据库

最基本的Oracle数据库连接代码(只针对Oracle11g): 1.右键项目->构建路径->配置构建路径,选择第三项“库”,然后点击“添加外部Jar”,选择“D:\Oracle\app\oracle\product\11.2.0\server \jdbc\lib\ojdbc6_g.jar”(注:D:\Oracle为数据库的安装路径). 2.以下代码为非常标准的Oracle数据库连接代码示例: /** * 一个非常标准的连接Oracle数据库的示例代码 */ public void testO

JDBC连接Oracle数据库

我记得大二的时候,我们上java课程,当时老师就说了JDBC这个东西,也没怎么好好学,直到现在,我也不直到JDBC是什么玩意,就知道这玩意可以从数据库提取数据,那么JDBC到底是什么呢? JDBC是Java DataBase Connectivity的缩写,含义意思是java数据库连接,不需要多解释了,我感觉! 那么我们如何去做这样子的一个连接呢?用过一次之后就会发现,其实很简单,记住几个步骤,还有就是导入必要的驱动包就可以了,下面是几个重要的步骤: 第一步,你的项目环境中必须要导入必要的数据库

简单的JDBC连接oracle数据库例子

java连接Oracle数据库 JDBC(Java Data Base Connectivity,java数据库连接),那么我们该如何用java进行数据库的连接呢. import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class JDB

在Eclipse中通过JDBC连接Oracle数据库并操作

一.JDBC释义 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成.JDBC为数据库开发人员提供了一个标准的API,据此可以构建更高级的工具和接口,使数据库开发人员能够用纯 Java API 编写数据库应用程序,并且可跨平台运行,并且不受数据库供应商的限制. 二.JDBC连接Oracle数据库的流程及原理 1)在开发环境中加载指定数据库的驱动

JDBC 连接Oracle 数据库,JDBC 连接Mysql 数据库

首先是JDBC 连接Oracle  数据库 package com.util; import com.pojo.UserInfo; import java.sql.*; public class DBConnection { private static Connection conn; private static String userName = "scott"; private static String passWord = "tiger"; privat

jdbc连接oracle数据库字符串

jdbc连接oracle数据库有两种方式: 连接数据库SID 连接数据库service_name 当连接SID时,字符串如下: url="jdbc:oracle:thin:@192.168.56.100:1521:orcl1" password="xxxx" username"scott" 当连接SERVICE_NAME时,字符串如下: url="jdbc:oracle:thin:@//192.168.56.100:1521/orcl&

java连接oracle数据库的实现代码

package connectionOracleDatabase; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class ConnectionOracleDa

Java连接Oracle数据库

package com.db;              import java.sql.Connection;       import java.sql.DriverManager;       import java.sql.PreparedStatement;       import java.sql.ResultSet;              public class DBConnection {           // 连接Oracle数据库           public