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

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:TEST
jdbc:mysql://localhost/db?user=root&password=123&useUnicode=true&characterEncoding=utf-8
jdbc: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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值