zoukankan      html  css  js  c++  java
  • 【jdbc】连接数据库从浅入深

    一.回想

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

         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服务器
    • JNDISUN制定的一套规范,这套规范可以和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。

        

    欢迎关注,编程那点事儿 不定时分享技术文章,随时随地,想看就看。 欢迎品阅和指正,扫描公告栏微信二维码关注!
  • 相关阅读:
    MyISAM表锁的解决方案
    RSA数字证书管理
    Self Host WebApi服务传输层SSL加密(服务器端+客户端调用)
    WebApi服务Uri加密及验证的两种方式
    利用MVC的自定义过滤器FilterAttribute、IActionFilter、IExceptionFilter实现异常处理等功能
    html页面中meta的作用
    [转]REST简介
    [转]webApi 参数传递总结
    REST服务中的异常处理
    REST服务返回自定义的HttpResponseMessage
  • 原文地址:https://www.cnblogs.com/bg2015-07-05/p/4960287.html
Copyright © 2011-2022 走看看