JDBC连接数据库详细指南(包含MySQL、SQL Server、Oracle三种数据库)

时间:2021-02-09 13:30:19

JDBC连接数据库详细指南(包含三种数据库)

         在项目的开发过程中,数据库的连接支持是非常重要的,今天我就来描述一下使用JDBC访问各种各样数据库的方法。

1.JDBC简介

         JDBC全称是Java数据库连接(JavaDatabase connectivity),是java程序与数据库系统通信的标准API,它包含一组用Java语言编写的类和接口。

         通过JDBC我们可以方便的向各种数据库发送SQL语句,我们只需要使用JDBC编写一个通用的程序,便可以通过SQL语句调用不同的数据库了。

2. JDBC连接数据库详细步骤如下:

(1)使用Class.forName( )方法加载相应的数据库驱动程序

1.连接mysql数据库

(java连接MySQL数据库驱动可供下载地址:http://pan.baidu.com/s/1bpumAmj

Ø  加载MySQL驱动程序的语句如下:

         Class.forName("com.mysql.jdbc.Driver");

或者:Class.forName("org.gjt.mm.mysql.Driver");

2.连接SQL Server数据库

(java连接SQL Server数据库驱动可供下载地址:https://www.microsoft.com/zh-cn/download/details.aspx?id=11774

Ø  加载SQL Server驱动程序的语句如下:

         Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

3.连接Oracle数据库

(java连接Oracle数据库驱动可供下载地址:http://www.oracle.com/technetwork/database/features/jdbc/index-091264.html

Ø  加载Oracle驱动程序的语句如下:

         Class.forName("oracle.jdbc.driver.OracleDriver");

4.注释

该步骤可以替换为在WEB-INF目录下建立名为services的文件夹,然后把驱动放入其中,这样便省略了使用Class.forName( )方法加载驱动。

(2)定义要连接的数据库的URL

1.连接mysql数据库

Ø  语句如下:

StringURL="jdbc:mysql://host:post/dbName";

         注:host代表主机IP;

                   post代表MySQL的端口号;

                   dbName代表要连接的数据库名称

         例如:StringmysqlURL="jdbc:mysql://localhost:3306/dbtest";

    或者:String mysqlURL="jdbc:mysql://127.0.0.1:3306/dbtest";

2.连接SQL Server数据库

Ø  语句如下:

StringURL="jdbc:sqlserver://host:post;databaseName=dbName";

         注:host代表主机IP;

                   post代表MySQL的端口号;

                   dbName代表要连接的数据库名称

         例如:String mysqlURL="jdbc:sqlserver://localhost:1433;databaseName=dbtest";

    或者:String mysqlURL="jdbc:sqlserver://127.0.0.1:1433;databaseName=dbtest";

3.连接Oracle数据库

Ø  语句如下:

StringURL="jdbc:oracle:thin:@host:post;databaseName=dbName";

         注:host代表主机IP;

                   post代表MySQL的端口号;

                   dbName代表要连接的数据库名称

         例如:String mysqlURL="jdbc:oracle:thin:@localhost:1521:dbtest";

    或者:String mysqlURL="jdbc:oracle:thin:@127.0.0.1:1521:dbtest";

(3)调用DriverManager对象的getConnection( )方法,获得一个Connection对象(它表示打开了一个连接)

Ø  语句如下:

Connection conn=DriverManager.getConnection(URL,"数据库用户名","数据库用户密码");

例如://要连接的数据库的URL

    StringmysqlURL="jdbc:mysql://127.0.0.1:3306/dbtest";//这里用的MySQL,其他数据库参考上面

    StringDBUser="root";//数据库用户名

    StringDBPwd="123456";//数据库用户密码

Connectionconn=DriverManager.getConnection(mysqlURL,DBUser,DBPwd);

(4)创建语句对象

         使用Connection接口可以创建两种语句对象。

1使用createStatement()方法创建Statement语句对象

         该对象用于传递简单的不带参数的SQL语句给数据库管理系统来执行。

语句如下:

         Statement st=conn.createStatement();

2使用prepareStatement(String sql )创建的PreparedStatement语句对象(PreparedStatement是Statement的子接口)

         该对象用于传送带有一个或多个输入参数的SQL语句。

例如:String sql="insert into test(name,password) values(?,?)";

      PreparedStatement pstem=conn.prepareStatement(sql);

      pstem.setString(1, "test");

      pstem.setString(2, "123456");

3使用prepareCall(String sql)创建一个CallableStatement语句对象(CallableStatement是PreparedStatement的子接口)

         该对象用于调用存储过程。

例如:  CallableStatement csm=conn.prepareCall("call validate(?,?)}");

        csm.setString(parameterName, value);

    注:validate是存储过程名

       parameterName参数名

       value参数值

(5)执行语句

1对应Statement语句对象

       Statement接口提供了3个方法执行SQL语句,如下:

n  execute(String sql):执行给定的 SQL 语句,返回boolen型值

n  executeQuery(String sql) :执行给定的 SQL 查询语句,该语句返回单个 ResultSet 对象;

n  executeUpdate(String sql) :执行给定 SQL 语句,该语句可能为 INSERT、 UPDATE 或 DELETE 语句,返回行计数或0 。

例如:String sql="create table `test2`(name varchar(50),passwordvarchar(50));";

      Statement stem=conn.createStatement();

      int result=stem.executeUpdate(sql);

或者:String sql2="select * from test";

      ResultSet rs=stem.executeQuery(sql2);

2对应PreparedStatement语句对象

PreparedStatement接口提供了3个方法执行SQL语句,如下:

n  execute( ):在此 PreparedStatement 对象中执行 SQL 语句,返回boolen型值

n  executeQuery( ) :在此 PreparedStatement 对象中执行 SQL 查询语句,该语句返回单个 ResultSet 对象;

n  executeUpdate( ) :在此 PreparedStatement 对象中执行 SQL 语句,该语句可能为 INSERT、 UPDATE 或 DELETE 语句,返回行计数或0 。

例如:String sql="insert into test(name,password) values(?,?)";

      PreparedStatement pstem=conn.prepareStatement(sql);

pstem.setString(1, "test");

      pstem.setString(2, "123456");

           int result=pstem.executeUpdate( );

或者:ResultSet rs=pstem.executeQuery();

3应CallableStatement语句对象

         该对象的执行方法和PreparedStatement语句对象相同,详情可以参考PreparedStatement接口提供的执行方法。

(6)对返回的结果进行处理

      1返回结果是int型

         在执行语句时,如果使用的方法是executeUpdate方法,便会返回int型结果,我们可以通过该值,知道操作的行数。

2返回的结果是ResultSet 对象

         在执行语句时,如果使用的方法是executeQuery方法,便会返回单个 ResultSet 对象。ResultSet 对象包含了SQL语句的执行结果,我们可以使用它的一组get()方法对结果行中每列的数据进行访问,可以通过它的next()方法移动到ResultSet 的下一行,使其变成当前行。

       例如:显示结果集所有记录的前两列

代码如下:Statement stem=conn.createStatement();

String sql2="select * from test";

            ResultSet rs=stem.executeQuery(sql2);

            ResultSetrs=pstem.executeQuery();

            while(rs.next()){

                Stringname=rs.getString("name");

                Stringpassword=rs.getString("password");

                System.out.println("用户名:"+name+",密码:"+password);

            }

(7)关闭连接。

         操作完后,要记得关闭所有的JDBC对象,以释放资源。

         包括:关闭结果集、关闭语句对象、关闭连接对象。

如:rs.close(); //关闭结果集

    stem.close();  //关闭Statement语句对象

    conn.close();  //关闭连接对象