Chinaunix首页 | 论坛 | 博客
  • 博客访问: 104369
  • 博文数量: 45
  • 博客积分: 2520
  • 博客等级: 少校
  • 技术积分: 650
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-09 16:54
文章分类

全部博文(45)

文章存档

2011年(1)

2008年(44)

我的朋友

分类: Java

2008-03-10 11:25:27

JDBC连接MySQL数据库

 

 

,Java程序中,通过JDBC API访问数据库包括以下步骤:

1,  获得要访问的数据库的驱动器的类库,添加到CLASSPATH

    :CLASSPATH中包含MySQL的类库

   

 

2,  在程序中加载并注册JDBC驱动器,其中JDBC-ODBC驱动器在JDK中自带了,默认已经注册,

所以不需要再注册.下面为加载各数据库驱动器的代码:

<1>ODBC

//加载JdbcOdbcDriver

Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

    <2>SQL Server

        //加载SQLServerDriver

        Class.forName(“com.microsoft.jdbc.sqlserver.SQLServerDriver”);

        //注册SQLServerDriver

        java.sql.DriverManager.registerDriver

(new com.microsoft.jdbc.sqlserver.SQLServerDriver());

    <3>Oracle

       //加载OracleDriver

       Class.forName(“oracle.jdbc.driver.OracleDriver”);

       //注册OracleDriver

       java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());

    <4>MySQL

       //加载MySQLDriver

       Class.forName(“com.mysql.jdbc.Driver”);

       //注册MySQLDriver

       java.sql.DriverManager.registerDriver(new com.mysql.jdbc.Driver());//不是必需

       (在旧版本的MySQL驱动器中,Driver类为org.gjt.mm.mysql.Driver,目前新的版本尽管

       保留了这个类,但提倡使用新的Driver,com.mysql.jdbc.Driver)

       有些驱动器的Driver类在被加载的时候,能自动创建自身的实例,然后调用DriverManager.

       RegisterDriver()方法注册自身,例如,对于MySQL的驱动器类com.mysql.jdbc.Drvier,

       Java虚拟机加载这个类的时,会执行它的如下静态代码块:

      

//mysql-connector-java-3.0.17-ga\com\mysql\jdbc\Drvier.java文件:

 

package com.mysql.jdbc;

 

public class Driver extends NonRegisteringDriver

{

    // Register ourselves with the DriverManager

       Static

       {

           Try

           {

              java.sql.DriverManager.registerDriver(new Driver());

           }

           catch(java.sql.SQLException E)

           {

              throw new RuntimeException("Can't register driver!");

           }  

 

           if (DEBUG)

           {

              Debug.trace("ALL");

           }

       }  

        public Driver() throws java.sql.SQLException

       {

           // Required for Class.forName().newInstance()

       }     

}             

 

      

       所以在Java应用程序中,只要通过Class.forName()方法加载MySQL Driver类即可,不必注册

       驱动器的Driver

 

3,  建立与数据库的连接

    Connection con = java.sql.DriverManager.getConnection(dburl,user,password);

    getConnection方法有3个参数,dburl指连接数据库的JDBC URL,userpassword分别指连接

    数据库的用户名和密码

    JDBC URL的一般形式为:

    Jdbc:drivertype:driversubtype://parameters

    drivertype指驱动器类型,driversubtype是可选的,表示驱动器的子类型,parameters通常用来

    设定数据库服务器的IP地址,端口号和数据库名,

    几种常用数据库的JDBC URL形式:

    <1>通过JDBC-ODBC Driver连接数据库

       jdbc:odbc:datasource

    <2>Oracle数据库连接

       jdbc.oracle:thin:@localhost:1521:sid

    <3>SQLServer数据库连接

       jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=STOREDB

    <4>MySQL数据库连接

       jdba:mysql://localhost:3306/STOREDB

 

4,  创建Statement对象,准备执行SQL语句

    Statement stmt = con.createStatement();       //conConnection对象

 

5,  执行SQL语句

    String    sql  =  “select ID,NAME,AGE,ADDRESS from CUSTOMES where AGE>20”;

    ResultSet rs   =   stmt.executeQuery(sql);

 

6,  遍历ResultSet对象种的记录

    //输出查询结果

    while(rs.next())

    {

       long   id      =   rs.getLong();

       String name    =   rs.getString();

       int age        =   rs.getInt();

       String address =   rs.getString();

      

       //打印数据

    System.out.println(“id= ”+id+”,name= ”+name+”,age= ”+age+”,address= ”+address);

    }

 

7,  依次关闭ResultSet,StatementConnection对象

    rs.close();

    stmt.close();

    con.close();

 

 

 

 

,DBTest.java演示了JDBC API的基本用法

    main()方法中,先加载并注册MySQL驱动器,接着得到一个于数据库连接的Connection对象,

    然后再由Connection对象得到Statement对象,最后通过Statement对象执行各种SQL语句

    软硬件环境:

    OS:     Windows XP Professional SP2

    JDBC:  3.0.17,

    MySQL: 5.0.22

   

import java.sql.*;

 

public class DBTest

{

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

    {

       Connection con;      //接口:Concectio,Statement,ResultSet

       Statement stmt;     

       ResultSet rs;    

      

       //加载驱动器,下面的代码加载MySQL驱动器

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

      

       //注册MySQL驱动器(这一步可省略,可自动注册)

       DriverManager.registerDriver(new com.mysql.jdbc.Driver());

      

       //String dbUrl = "jdbc:mysql://localhost:3306/STOREDB";

       //将连接到数据库的URL中的字符编码设置为GB2312

       String dbUrl  =

    "jdbc:mysql://localhost:3306/STOREDB?useUnicode=true&characterEncoding=GB2312";

       String dbUser = "pl";

       String dbPwd  = "123";

      

       //建立数据库连接

       con = java.sql.DriverManager.getConnection(dbUrl, dbUser, dbPwd);

      

       //创建一个Statement对象

       stmt = con.createStatement();

      

      

       //增加新记录到CUSTOMERS数据库

       stmt.executeUpdate("insert into CUSTOMERS(NAME,AGE,ADDRESS)"

           +"VALUES('小王',20,'上海')");

      

       //查询记录

       rs = stmt.executeQuery("SELECT ID,NAME,AGE,ADDRESS from CUSTOMERS");

      

       //输出查询结果

       while(rs.next())

       {

           long id          =   rs.getLong(1);

           String name    =   rs.getString(2);

           int age        =   rs.getInt(3);

           String address =   rs.getString(4);

          

           //打印数据

           System.out.println("id= "+id+",name= "+name+",age= "+age+",address=           "+address);

       }

      

       //删除新增加的记录

       //stmt.executeUpdate("delete from CUSTOMERS where name='小王'");

      

       /*

        *释放相关资源

        *关闭数据库操作的顺序与打开数据库操作的顺序相反

        *依次关闭结果集--操作--连接

        */

       rs.close();

       stmt.close();

       con.close();

    }

}

   

    执行后,打印

    id= 1,name= 小张,age= 23,address= 北京

    id= 2,name= 小红,age= 29,address= 天津

    id= 3,name= 小白,age= 33,address= 香港

    id= 4,name= 小彭,age= 28,address= 深圳

    id= 5,name= 小王,age= 20,address= 上海

    (:id值自动增加为5,因为在创建CUSTOMERS表时,ID属性已经设置” auto_increment”)

   

    MySQL中查看CTSTOMERS表数据:

    mysql> select * from customers;

    +----+------+------+---------+

    | ID | NAME | AGE  | ADDRESS |

    +----+------+------+---------+

    |  1 | 小张 |   23 | 北京    |

    |  2 | 小红 |   29 | 天津    |

    |  3 | 小白 |   33 | 香港    |

    |  4 | 小彭 |   28 | 深圳    |

    |  5 | 小王 |   20 | 上海    |

    +----+------+------+---------+

    5 rows in set (0.00 sec)

   

    表示通过JDBC连接MySQL数据库,成功插入数据!

阅读(2343) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~