java使用jdbc对mysql数据库进行操作的步骤和代码

来源:互联网 发布:linux 复制重命名文件 编辑:程序博客网 时间:2024/06/18 18:28

java使用jdbc对mysql数据库进行操作的步骤和代码

前言

java程序通过jdbc对mysql进行连接和操作的步骤,主要按照四个步骤:加载驱动、建立连接、创建声明、执行sql语句后的结果集。

1. 加载驱动

在取得连接之前,需要注册驱动程序。通过调用方法Class.forName,这将显式地加载驱动程序类,以下代码分别加载连接ODBC、MySQL、Oracle、SQLServer的驱动类:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");Class.forName("com.mysql.jdbc.Driver");Class.forName("oracle.jdbc.driver.OracleDriver");Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");

此处,本程序事例是使用mysql的驱动类:

try{            Class.forName("com.mysql.jdbc.Driver");        } catch (ClassNotFoundException e){            System.out.println("找不到驱动程序类,加载驱动失败!");            e.printStackTrace();        }

建立连接

JDBC URL

JDBC URL 提供了一种标识数据库的方法,可以是相应的驱动程序能识别该数据库并与之建立连接。JDBC URL的标准语法如下所示。它由三部分组成,各部分间用冒号分隔:
<协议 jdbc>:<子协议>:<子名称>

  • <协议>: JDBC URL 中的协议总是jdbc
  • <子协议>: 驱动程序名或数据库连接机制(这种机制可由一个或多个驱动程序支持)的名称。
  • <子名称>:包含要连接数据库的名称、用户名、密码等信息。

以下代码分别是JDBC-ODBC桥、MySQL、Oracle、SQLServer的连接URL举例:

jdbc:odbc:TESTjdbc:mysql://localhost/db?user=root&password=123&useUnicode=true&characterEncoding=utf-8jdbc:oracle:thin:@localhost:1521:orcl //"oracle:thin"为连接子协议jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs

取得Connection连接

通过驱动管理类DriverManager下面的getConnection方法获取数据库的连接对象:
DriverManager.getConnection(url, username, password)

代码示例

        String url="jdbc:mysql://localhost:3306/demo";         String username = "root";        String password = "password";        Connection con = null;        try{            con = DriverManager.getConnection(url, username, password);        } catch (SQLException se) {            System.out.println("数据库连接失败!");            se.printStackTrace();        }

创建声明(Statement)

Statement对象用于将SQL语句发送到数据库中。实际上有三种Statement对象,都作为在给定连接上执行SQL语句的包容器:Statement、PreparedStatement(继承自Statement)和CallableStatement(继承自PreparedStatement)。他们都用于发送特定类型的SQL语句:Statement对象用于执行不带参数的简单SQL语句;PreparedStatement对象用于执行带或者不带IN参数的预编译SQL语句;CallableStatement对象用于执行对数据库已存储过程的调用。
Statement接口提供了执行语句和获取结果的基本方法。PreparedStatement接口添加了处理IN参数的方法;而CallableStatement添加了处理OUT参数的方法。

Statement对象

创建Statement对象

用Connection对象的createStatement方法创建,如下例代码:
Statement stmt = con.createStatement();

Statement对象的方法概览

  • executeQuery: 用于产生单个结果集的语句,比如select语句。
  • executeUpdate: 用于执行insert、update、delete语句以及SQL DL(数据定义语言)语句。executeUpdate的返回值为整数,指受影响的行数,对于create tabledrop table等不操作行的语句,返回值为0。
  • execute:用于执行返回多个结果集、多个更新计数或两者组合的语句。

源码实例

        Statement stmt = con.createStatement();        ResultSet rs = stmt.executeQuery("select * from user");        while(rs.next()){            System.out.println(rs.getString(2)+" "+rs.getString("password")+" " + rs.getString(4));        }        ResultSetMetaData rsmd = rs.getMetaData();        System.out.println(rsmd.getColumnCount()+" "+rsmd.getTableName(2)+" "+rsmd.getColumnLabel(1));//      int rows = stmt.executeUpdate("insert into user values(2, 'user', 'user','user@qq.com')");//      System.out.println(rows);        if(rs!=null){            try{                rs.close();            } catch (SQLException e){                e.printStackTrace();            }        }        if(stmt!=null){            try{                stmt.close();            } catch (SQLException e){                e.printStackTrace();            }        }

PreparedStatement

创建及方法

创建:PreparedStatement pstmt = con.prepareStatement(sql)

方法:

pstmt.setString(int, "String")pstmt.setInt(int, int)

示例代码

        PreparedStatement pstmt = con.prepareStatement("update user set email=? where username like ?");        pstmt.setString(1,"cde@126.com");        pstmt.setString(2, "admin");        pstmt.executeUpdate();        pstmt.setString(2, "user");        pstmt.executeUpdate();        String[] userName = {"admin","user"};        String[] email = {"admin@163.com", "user@qq.com"};        int len = userName.length;        for(int i=0; i<len; ++i){            pstmt.setString(1, email[i]);            pstmt.setString(2, userName[i]);            int n = pstmt.executeUpdate();            System.out.println(n); // n = 1//          pstmt.executeUpdate("create table ...");//          System.out.println(n); // n = 0        }

执行sql语句后的结果集

ResultSet 基本处理方法

  • ResultSet对象维持一个指向当前行的指针。next()方法返回值为布尔型,true代表当前指向行存在值,false代表没有下一行记录了,结果集已处理完毕。
  • ResultSet对象获取列的值,通过getInt(column|column_name)或者getString(column|column_name)

示例代码

        ResultSet rs = stmt.executeQuery("select * from user");        while(rs.next()){            System.out.println(rs.getString(2)+" "+rs.getString("password")+" " + rs.getString(4));        }

其他

ResultSetMetaData

代码事例:

        ResultSetMetaData rsmd = rs.getMetaData();        System.out.println(rsmd.getColumnCount()+" "+rsmd.getTableName(2)+" "+rsmd.getColumnLabel(1));

参考文档

《开发突击者 Java Web 主流框架整合开发》p65
http://www.cnblogs.com/hongten/archive/2011/03/29/1998311.html

0 0