`
wwei
  • 浏览: 7266 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Inside JDBC(二)

阅读更多

        在Inside JDBC(一)中,给大家介绍了DriverManager类与Driver接口的含义及用法,从本文开始,我们来看看JDBC的具体用法。
        要操作数据库,首先的建立数据库连接(Connection),数据库连接的具体功能定义在java.sql.Connection接口中。我们先来看看如何建立连接。
        通过对Driver接口的学习,知道了其connect方法是用于建立数据库连接的,完整代码如下:

package com.wwei.jdbc;
import java.sql.Connection;
import java.sql.Driver;
import java.util.Properties;

public class Conn_1 {

    public static void main(String[] args) throws Exception{

        Driver driver = new com.mysql.jdbc.Driver();

        String url = "jdbc:mysql://localhost/test";
        Properties info = new Properties();//连接信息
        info.put("user", "root");
        info.put("password", "wwei");
        Connection con = driver.connect(url, info);//建立连接,成功返回连接实例,否则返回null。

        if(con != null){
            System.out.println("建立连接");
        }   
       if(con != null && !con.isClosed()){
            con.close();
            System.out.println("连接已断开");
        }
    }
} 

 
Connection实例使用完毕,切记关闭。如果在有连接池的情况要返回连接池。在这段代码中,我们采用了直接实例化驱动类com.mysql.jdbc.Driver,这种方式不可取,因为迫使应用代码高度依赖MySQL 的Connector/J实现,如果变更了数据库代码需要重构。 在这里之所以这样写,是希望大家更深入的理解JDBC,在实际开发中应该是下面一段代码的写法:

package com.wwei.jdbc;

import java.sql.Connection;
import java.sql.DriverManager;

public class Conn_2 {

    public static void main(String[] args) throws Exception {
        // 连接信息可以从外部得到,比如配置文件。
        String url = "jdbc:mysql://localhost:3306/test";
        String driverClass = "com.mysql.jdbc.Driver";
        String user = "root";
        String password = "wwei";

        Class.forName(driverClass);
        Connection con = DriverManager.getConnection(url, user, password);
        if (con != null) {
            System.out.println("建立连接");
        }

        if (con != null && !con.isClosed()) {
            con.close();
            System.out.println("连接已断开");
        }
    }
}  

 

这一次,JDBC代码就没有耦合具体的JDBC驱动实现了,如果出现数据库的变更,我们只需要修改相应的连接信息了和驱动实现的jar库文件,这些链接信息都可以从JDBC驱动实现的文档中获得,不需要死记。当为了提高熟练度,最好还是记住常见数据库的连接信息。大家可以Google一下。
        在Connection接口中,常用方法有SQL语句对象(Statement,PreparedStatement,CallableStatement)的工厂方法:Statement createStatement()系列、PreparedStatement prepareStatement(String sql)系列、CallableStatement prepareCall(String sql)系列,分别用于创建普通、预编译、存储过程SQL语句对象;事务处理方法: boolean getAutoCommit()、 void setAutoCommit(boolean autoCommit)、

void setTransactionIsolation(int level)、Savepoint setSavepoint(String name)、 void commit()、
void rollback()、void rollback(Savepoint savepoint)。
        默认情况下,Connection 对象处于自动提交模式下,这意味着它在执行每个语句后都会自动提交更改。
如果禁用自动提交模式(setAutoCommit(false)),为了提交更改,必须显式调用 commit 方法;
否则无法保存数据库更改。
        上述方法的使用举例待介绍SQL语句对象和结果集(ResultSet)之后在编写,先来了解一下java.sql.DatabaseMetaData接口,这个接口定义了整体数据库的综合信息,有驱动提供商实现。虽然很少用到但如果想从驱动实现中了解数据支持的功能,就需要了解了。代码:

package com.wwei.jdbc;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;

public class DBMetaData {

    public static void main(String[] args) throws Exception{    

        DatabaseMetaData meta = null;
        String url = "jdbc:mysql://localhost:3306/test";
        String driverClass = "com.mysql.jdbc.Driver";
        String user = "root";
        String password = "wwei";
        Class.forName(driverClass);

        Connection con = DriverManager.getConnection(url, user, password);
        if (con != null) {
            meta = con.getMetaData();
            System.out.println("数据库产品名称:" + meta.getDatabaseProductName() );
            System.out.println("数据库产品版本:" + meta.getDatabaseProductVersion() );
            System.out.println("数据库主版本:" + meta.getDatabaseMajorVersion());
            System.out.println("数据库次版本:" + meta.getDatabaseMinorVersion());     
            System.out.println("驱动名称:" + meta.getDriverName() );
            System.out.println("驱动版本:" + meta.getDriverVersion());          
            System.out.println("驱动实现JDBC规范主版本:" + meta.getJDBCMajorVersion());
            System.out.println("驱动实现JDBC规范次版本:" + meta.getJDBCMinorVersion());          
            System.out.println("当前数据库允许列最大字符数:" + meta.getMaxColumnNameLength());
            System.out.println("当前数据库支持最大并发连接数:" + meta.getMaxConnections());         
            System.out.println("数据库中在同一时间内可处于开放状态的最大活动语句数:" + meta.getMaxStatements());
        }

        if (con != null && !con.isClosed()) {
            con.close();  
        }
    }
}

DatabaseMetaDate中有更多的信息,可以进一步查阅JDK 文档学习。下一篇将介绍所有SQL语句对象及结果集。

分享到:
评论

相关推荐

    presto-oracle

    This is a plugin for Presto that allow you to use Oracle Jdbc Connection Presto-Connectors Member Connection Configuration Create new properties file inside etc/catalog dir: connector.name=oracle #...

    eladmin-master.zip_eladmin项目_inside8ni_java_me.zhengjie_mybatis

    eladmin是一个深受开发者喜爱的开源项目,其源代码封装在"eladmin-master.zip"压缩包中,由inside8ni开发并由me.zhengjie维护。这个项目的核心是利用Spring Boot和Mybatis框架构建,旨在提供一个高效、便捷的后台...

    cms后台管理

    3.修改jdbc链接,自己导入数据库。 4.把服务器下install\config下的web.xml复制出来覆盖掉新建项目WEB-INF下的web.xml 5.classes下有四个文件,手动烤到myeclipse项目src根目录下中 6.将服务器上jeecms项目删掉,...

    Pro.Java.8.Programming.3rd.Edition.1484206428

    Going Inside Java 8 Chapter 2. Designing Libraries, Classes, and Methods Chapter 3. Lambda Expressions and Closures Chapter 4. Using Threads in Your Applications Chapter 5. Using Stream APIs and ...

    Pro.Java.8.Programming.3rd.Edition.1484206428.epub

    Going Inside Java 8 Chapter 2. Designing Libraries, Classes, and Methods Chapter 3. Lambda Expressions and Closures Chapter 4. Using Threads in Your Applications Chapter 5. Using Stream APIs and ...

    Building Microservices with Spring.epub

    Moving on, you will understand the JDBC template patterns and their use in abstracting database access. After understanding the basics, you will move on to more advanced topics, such as reactive ...

    学Java好书介绍

    - 卷二则更深入地探讨了高级主题,如多线程、网络编程、数据库连接技术(JDBC)等。 - 书中还包含了大量的示例代码,帮助读者更好地理解和掌握知识点。 #### 三、《Java 2: A Beginner’s Guide》 - **内容简介**...

    restful restful所需要的jar包

    * Client JDBC connector based on the JDBC API, a custom request XML format and the JDBC WebRowSet interface for XML responses. * Client FILE connector supports GET, PUT and DELETE methods on files ...

    Apress - Pro Java Programming, 2nd Edition.pdf

    Pro Java Programming, Second Edition BRETT SPELL <br>■CHAPTER 1 Going Inside Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 ■CHAPTER 2...

    jdk-9.0.1_doc-all 最新版

    Defines APIs for the JavaFX / Swing interop support included with the JavaFX UI toolkit, including SwingNode (for embedding Swing inside a JavaFX application) and JFXPanel (for embedding JavaFX inside...

    tomcat-7_API_帮助文档

    * tomcat-jdbc.jar (Tomcat's database connection pooling solution) * tomcat-util.jar (Various utilities) * websocket-api.jar (WebSocket 1.1 API) You can make additional APIs available to all of your ...

    tomcat-8_API

    * tomcat-jdbc.jar (Tomcat's database connection pooling solution) * tomcat-jni.jar (Interface to the native component of the APR/native connector) * tomcat-spdy.jar (SPDY implementation) * tomcat-util...

    Python Cookbook, 2nd Edition

    Handling a zip File Inside a String Recipe 2.11. Archiving a Tree of Files into a Compressed tar File Recipe 2.12. Sending Binary Data to Standard Output Under Windows Recipe 2.13. Using a C++-...

Global site tag (gtag.js) - Google Analytics