Java_12 快速入门 Java数据库编程

目录

第一章:Java数据库编程

1.2  连接Oracle数据库

范例1-1:连接数据库。

1.3  Statement接口

范例1-2:编写数据库创建脚本。

范例1-3:数据增加。增加数据SQL语法:INSERT INTO 表名称 (列,列,...) VALUES (值, 值,....)。

范例1-4:数据修改。修改数据SQL语法:UPDATE 表名称 SET 字段=值 , .... WHERE 更新条件(s)。

范例1-5:删除数据。删除数据SQL语法:DELETE FROM 表名称 WHERE 删除条件(s)。

范例1-6:实现数据的查询。

范例1-7:修改ResultSet读取数据的方法(代码片段。

1.4  PreparedStatement接口

范例1-8:以数据增加操作为例观察Statement接口的问题。

范例1-9:改进数据增加。

范例1-10:查询全部数据。

范例1-11:模糊查询。

范例1-12:数据分页显示。

范例1-13:统计数据量,使用COUNT()函数。

1.5  批处理与事务处理

范例1-14:执行批处理(以Statement接口操作为例)。

范例1-15:利用事务处理。


第一章:Java数据库编程

1.2  连接Oracle数据库

范例1-1:连接数据库。

package com.yootk.demo;

import java.sql.Connection;

import java.sql.DriverManager; 

public class TestDemo {

    private static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;

    private static final String DBURL = "jdbc:oracle:thin:@localhost:1521:yootk" ;

    private static final String USER = "scott" ;

    private static final String PASSWORD = "tiger" ;

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

        // 第一步:加载数据库驱动程序,此时不需要实例化,因为会由容器自己负责管理

        Class.forName(DBDRIVER) ;

        // 第二步:根据连接协议、用户名、密码连接数据库

        Connection conn = DriverManager.getConnection(DBURL, USER, PASSWORD) ;

        System.out.println(conn); // 输出数据库连接

        conn.close(); // 第四步:关闭数据库

    }

}

1.3  Statement接口

范例1-2:编写数据库创建脚本。

DROP TABLE member PURGE ;

DROP SEQUENCE myseq ;

CREATE SEQUENCE myseq ;

CREATE TABLE member(

    mid NUMBER ,

    name VARCHAR2(20) ,

    birthday DATE DEFAULT SYSDATE ,

    age NUMBER(3) ,

    note CLOB ,

    CONSTRAINT pk_mid PRIMARY KEY(mid)

) ;

范例1-3:数据增加。增加数据SQL语法:INSERT INTO 表名称 (列,列,...) VALUES (值, 值,....)。

package com.yootk.demo;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.Statement;

public class TestDemo {

    private static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;

    private static final String DBURL = "jdbc:oracle:thin:@localhost:1521:yootk" ;

    private static final String USER = "scott" ;

    private static final String PASSWORD = "tiger" ;

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

        // 第一步:加载数据库驱动程序,此时不需要实例化,因为会由容器自己负责管理

        Class.forName(DBDRIVER) ;

        // 第二步:根据连接协议、用户名、密码连接数据库

        Connection conn = DriverManager.getConnection(DBURL, USER, PASSWORD) ;

        // 第三步:进行数据库的数据操作

        Statement stmt = conn.createStatement() ;

        // 在编写SQL的过程里面,如果太长需要增加换行,一定要前后加上空格

        String sql = " INSERT INTO member(mid,name,birthday,age,note) VALUES "

            + " (myseq.nextval,'优拓',TO_DATE('1987-09-15','yyyy-mm-dd'),17,'www.yootk.com')" ;

        int len = stmt.executeUpdate(sql) ; // 执行SQL返回更新的数据行

        System.out.println("影响的数据行:" + len);

        // 第四步关闭数据库

        stmt.close(); // 本操作是可选的在数据库连接已关闭下自动关闭

        conn.close();

    }

}

范例1-4:数据修改。修改数据SQL语法:UPDATE 表名称 SET 字段=值 , .... WHERE 更新条件(s)。

package com.yootk.demo;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.Statement;

public class TestDemo {

    private static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;

    private static final String DBURL = "jdbc:oracle:thin:@localhost:1521:yootk" ;

    private static final String USER = "scott" ;

    private static final String PASSWORD = "tiger" ;

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

        // 第一步:加载数据库驱动程序,此时不需要实例化,因为会由容器自己负责管理

        Class.forName(DBDRIVER) ;

        // 第二步:根据连接协议、用户名、密码连接数据库

        Connection conn = DriverManager.getConnection(DBURL, USER, PASSWORD) ;

        // 第三步:进行数据库的数据操作

        Statement stmt = conn.createStatement() ;

        // 在编写SQL的过程里面,如果太长需要增加换行,一定要前后加上空格

        String sql = "UPDATE member SET name='李兴华',birthday=SYSDATE,age=30 "

               + " WHERE mid IN(3,5,7,9,11)";

        int len = stmt.executeUpdate(sql) ; // 执行SQL返回更新的数据行

        System.out.println("影响的数据行:" + len);

        // 第四步:关闭数据库

        stmt.close(); // 本操作是可选的,在数据库连接已关闭自动关闭

        conn.close();

    }

}

范例1-5:删除数据。删除数据SQL语法:DELETE FROM 表名称 WHERE 删除条件(s)。

package com.yootk.demo;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.Statement;

public class TestDemo {

    private static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;

    private static final String DBURL = "jdbc:oracle:thin:@localhost:1521:yootk" ;

    private static final String USER = "scott" ;

    private static final String PASSWORD = "tiger" ;

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

        // 第一步:加载数据库驱动程序,此时不需要实例化,因为会由容器自己负责管理

        Class.forName(DBDRIVER) ;

        // 第二步:根据连接协议、用户名、密码连接数据库

        Connection conn = DriverManager.getConnection(DBURL, USER, PASSWORD) ;

        // 第三步:进行数据库的数据操作

        Statement stmt = conn.createStatement() ;

        // 在编写SQL的过程里面,如果太长需要增加换行,一定要前后加上空格

        String sql = "DELETE FROM member WHERE mid IN(3,5,7,9,11)";

        int len = stmt.executeUpdate(sql) ; // 执行SQL返回更新的数据行

        System.out.println("影响的数据行:" + len);

        // 第四步关闭数据库

        stmt.close(); // 本操作是可选的在数据库连接已关闭自动关闭

        conn.close();

    }

}

范例1-6:实现数据的查询。

package com.yootk.demo;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.Statement;

import java.util.Date;

public class TestDemo {

    private static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;

    private static final String DBURL = "jdbc:oracle:thin:@localhost:1521:yootk" ;

    private static final String USER = "scott" ;

    private static final String PASSWORD = "tiger" ;

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

        // 第一步:加载数据库驱动程序,此时不需要实例化,因为会由容器自己负责管理

        Class.forName(DBDRIVER) ;

        // 第二步:根据连接协议、用户名、密码连接数据库

        Connection conn = DriverManager.getConnection(DBURL, USER, PASSWORD) ;

        // 第三步:进行数据库的数据操作

        Statement stmt = conn.createStatement() ;

        // 在编写SQL的过程里面,如果太长需要增加换行,一定要前后加上空格

        String sql = "SELECT mid,name,age,birthday,note FROM member" ;

        ResultSet rs = stmt.executeQuery(sql) ; // 实现数据查询

        while (rs.next()) { // 循环取出返回的每一行数据

            int mid = rs.getInt("mid") ; // 取出mid字段内容

            String name = rs.getString("name") ; // 取出name字段内容

            int age = rs.getInt("age") ; // 取出age字段内容

            Date birthday = rs.getDate("birthday") ; // 取出birthday字段内容

            String note = rs.getString("note") ; // 取出note字段内容

            System.out.println(mid + "," + name + "," + age + "," + birthday + "," + note);

        }

        rs.close();

        stmt.close();

        conn.close(); // 第四步:关闭数据库

    }

}

范例1-7:修改ResultSet读取数据的方法(代码片段。

        ResultSet rs = stmt.executeQuery(sql) ; // 实现数据查询

        while (rs.next()) { // 循环取出返回的每一行数据

            int mid = rs.getInt(1) ; // 取出mid字段内容

            String name = rs.getString(2) ; // 取出name字段内容

            int age = rs.getInt(3) ; // 取出age字段内容

            Date birthday = rs.getDate(4) ; // 取出birthday字段内容

            String note = rs.getString(5) ; // 取出note字段内容

            System.out.println(mid + "," + name + "," + age + "," + birthday + "," + note);

        }

1.4  PreparedStatement接口

范例1-8:以数据增加操作为例观察Statement接口的问题。

package com.yootk.demo;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.Statement;

public class TestDemo {

    private static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;

    private static final String DBURL = "jdbc:oracle:thin:@localhost:1521:yootk" ;

    private static final String USER = "scott" ;

    private static final String PASSWORD = "tiger" ;

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

        String name = "Mr'SMITH" ; // 增加的name数据

        String birthday = "1998-10-10" ; // 增加的birthday数据暂时使用String类型

        int age = 18 ; // 增加的age数据

        String note = "www.yootk.com" ; // 增加的note数据

        Class.forName(DBDRIVER) ; // 加载驱动程序

        Connection conn = DriverManager.getConnection(DBURL, USER, PASSWORD) ; // 连接数据库

        Statement stmt = conn.createStatement() ; // 创建Statement接口对象

        String sql = " INSERT INTO member(mid,name,birthday,age,note) VALUES "

               + "  (myseq.nextval,'" + name + "',TO_DATE('" + birthday + "','yyyy-mm-dd'),"

               + age + ",'" + note + "')"; // 采用拼凑SQl语句形式代码混乱

        System.out.println(sql);

        int len = stmt.executeUpdate(sql) ; // 执行SQL返回更新的数据行

        System.out.println("影响的数据行:" + len);

        conn.close(); // 关闭数据库连接

    }

}

范例1-9:改进数据增加。

package com.yootk.demo;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.util.Date;

public class TestDemo {

    private static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;

    private static final String DBURL = "jdbc:oracle:thin:@localhost:1521:yootk" ;

    private static final String USER = "scott" ;

    private static final String PASSWORD = "tiger" ;

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

        String name = "Mr'SMITH" ; // 增加的name数据

        Date birthday = new Date() ; // 增加的birthday数据使用java.util.Date

        int age = 18 ; // 增加的age数据

        String note = "www.yootk.com" ; // 增加的note数据

        Class.forName(DBDRIVER) ; // 加载驱动程序

        Connection conn = DriverManager.getConnection(DBURL, USER, PASSWORD) ; // 连接数据库

        String sql = " INSERT INTO member(mid,name,birthday,age,note) VALUES "

               + " (myseq.nextval,?,?,?,?)"; // 使用占位符设置预处理数据

        PreparedStatement pstmt = conn.prepareStatement(sql) ;

        pstmt.setString(1, name); // 设置第1个占位符“?”

        pstmt.setDate(2, new java.sql.Date(

                birthday.getTime())); // 设置第2个占位符“?”

        pstmt.setInt(3, age); // 设置第3个占位符“?”

        pstmt.setString(4, note); // 设置第4个占位符“?”

        int len = pstmt.executeUpdate() ; // 执行SQL返回更新的数据行

        System.out.println("影响的数据行:" + len);

        conn.close(); // 关闭数据库连接

    }

}

范例1-10:查询全部数据。

package com.yootk.demo;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.Date;

public class TestDemo {

    private static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;

    private static final String DBURL = "jdbc:oracle:thin:@localhost:1521:yootk" ;

    private static final String USER = "scott" ;

    private static final String PASSWORD = "tiger" ;

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

        Class.forName(DBDRIVER) ; // 加载驱动程序

        Connection conn = DriverManager.getConnection(DBURL, USER, PASSWORD) ; // 连接数据库

        String sql = "SELECT mid,name,birthday,age,note FROM member ORDER BY mid";

        PreparedStatement pstmt = conn.prepareStatement(sql) ;

        ResultSet rs = pstmt.executeQuery() ; // 数据查询不设置占位符

        while (rs.next()) {

            int mid = rs.getInt(1) ; // 取出第1个数据列内容

            String name = rs.getString(2) ; // 取出第2个数据列内容

            Date birthday = rs.getDate(3) ; // 取出第3个数据列内容

            int age = rs.getInt(4) ; // 取出第4个数据列内容

            String note = rs.getString(5) ; // 取出第5个数据列内容

            System.out.println(mid + "," + name + "," + birthday + "," + age + "," + note);

        }

        conn.close(); // 关闭数据库连接

    }

}

范例1-11:模糊查询。

package com.yootk.demo;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.Date;

public class TestDemo {

    private static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;

    private static final String DBURL = "jdbc:oracle:thin:@localhost:1521:yootk" ;

    private static final String USER = "scott" ;

    private static final String PASSWORD = "tiger" ;

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

        String keyWord = "" ; // 模糊查询关键字

        Class.forName(DBDRIVER) ; // 加载驱动程序

        Connection conn = DriverManager.getConnection(DBURL, USER, PASSWORD) ; // 连接数据库

        String sql = "SELECT mid,name,birthday,age,note FROM member "

               + " WHERE name LIKE ? ORDER BY mid"; // 此时设置了限定查询与占位符

        PreparedStatement pstmt = conn.prepareStatement(sql) ;

        pstmt.setString(1, "%" + keyWord + "%"); // 设置查询关键字

        ResultSet rs = pstmt.executeQuery() ; // 数据查询不设置占位符

        while (rs.next()) {

            int mid = rs.getInt(1) ; // 取出第1个数据列内容

            String name = rs.getString(2) ; // 取出第2个数据列内容

            Date birthday = rs.getDate(3) ; // 取出第3个数据列内容

            int age = rs.getInt(4) ; // 取出第4个数据列内容

            String note = rs.getString(5) ; // 取出第5个数据列内容

            System.out.println(mid + "," + name + "," + birthday + "," + age + "," + note);

        }

        conn.close(); // 关闭数据库连接

    }

}

范例1-12:数据分页显示。

package com.yootk.demo;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.Date;

public class TestDemo {

    private static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;

    private static final String DBURL = "jdbc:oracle:thin:@localhost:1521:yootk" ;

    private static final String USER = "scott" ;

    private static final String PASSWORD = "tiger" ;

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

        String keyWord = "" ; // 不设置关键字表示查询全部

        int currentPage = 2 ; // 当前所在页

        int lineSize = 3 ; // 每页显示行数

        Class.forName(DBDRIVER) ; // 加载驱动程序

        Connection conn = DriverManager.getConnection(DBURL, USER, PASSWORD) ; // 连接数据库

        String sql = " SELECT * FROM ("

               + " SELECT mid,name,birthday,age,note,ROWNUM rn "

               + " FROM member "

               + " WHERE name LIKE ? AND ROWNUM<=?) temp "

               + " WHERE temp.rn>? ORDER BY mid";

        PreparedStatement pstmt = conn.prepareStatement(sql) ;

        pstmt.setString(1, "%" + keyWord + "%"); // 设置查询关键字

        pstmt.setInt(2, currentPage * lineSize); // 分页参数

        pstmt.setInt(3, (currentPage - 1) * lineSize); // 分页参数

        ResultSet rs = pstmt.executeQuery() ; // 数据查询不设置占位符

        while (rs.next()) {

            int mid = rs.getInt(1) ; // 取出第1个数据列内容

            String name = rs.getString(2) ; // 取出第2个数据列内容

            Date birthday = rs.getDate(3) ; // 取出第3个数据列内容

            int age = rs.getInt(4) ; // 取出第4个数据列内容

            String note = rs.getString(5) ; // 取出第5个数据列内容

            System.out.println(mid + "," + name + "," + birthday + "," + age + "," + note);

        }

        conn.close(); // 关闭数据库连接

    }

}

范例1-13:统计数据量,使用COUNT()函数。

package com.yootk.demo;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

public class TestDemo {

    private static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;

    private static final String DBURL = "jdbc:oracle:thin:@localhost:1521:yootk" ;

    private static final String USER = "scott" ;

    private static final String PASSWORD = "tiger" ;

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

        String keyWord = "" ; // 不设置关键字表示查询全部

        Class.forName(DBDRIVER) ; // 加载驱动程序

        Connection conn = DriverManager.getConnection(DBURL, USER, PASSWORD) ; // 连接数据库

        String sql = " SELECT COUNT(mid) FROM member WHERE name LIKE ?";

        PreparedStatement pstmt = conn.prepareStatement(sql) ;

        pstmt.setString(1, "%" + keyWord + "%"); // 设置查询关键字

        ResultSet rs = pstmt.executeQuery() ; // 数据查询不设置占位符

        if (rs.next()) { // COUNT()函数一定会返回结果

           int count = rs.getInt(1) ; // 取出第一列

           System.out.println("数据记录个数为:" + count);

        }

        conn.close(); // 关闭数据库连接

    }

}

1.5  批处理与事务处理

范例1-14:执行批处理(以Statement接口操作为例)。

package com.yootk.demo;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.Statement;

import java.util.Arrays;

public class TestDemo {

    private static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;

    private static final String DBURL = "jdbc:oracle:thin:@localhost:1521:yootk" ;

    private static final String USER = "scott" ;

    private static final String PASSWORD = "tiger" ;

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

        Class.forName(DBDRIVER) ; // 加载驱动程序

        Connection conn = DriverManager.getConnection(DBURL, USER, PASSWORD) ; // 连接数据库

        Statement stmt = conn.createStatement() ; // 创建数据库操作对象

        stmt.addBatch("INSERT INTO member(mid,name) VALUES (myseq.nextval,'优拓A')");

        stmt.addBatch("INSERT INTO member(mid,name) VALUES (myseq.nextval,'优拓B')");

        stmt.addBatch("INSERT INTO member(mid,name) VALUES (myseq.nextval,'优拓C')");

        stmt.addBatch("INSERT INTO member(mid,name) VALUES (myseq.nextval,'优拓D')");

        stmt.addBatch("INSERT INTO member(mid,name) VALUES (myseq.nextval,'优拓E')");

        int result [] = stmt.executeBatch() ; // 执行批处理

        System.out.println(Arrays.toString(result));

        conn.close(); // 关闭数据库连接

    }

}

范例1-15:利用事务处理。

package com.yootk.demo;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.Statement;

import java.util.Arrays;

public class TestDemo {

    private static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver" ;

    private static final String DBURL = "jdbc:oracle:thin:@localhost:1521:yootk" ;

    private static final String USER = "scott" ;

    private static final String PASSWORD = "tiger" ;

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

        Class.forName(DBDRIVER) ; // 加载驱动程序

        Connection conn = DriverManager.getConnection(DBURL, USER, PASSWORD) ; // 连接数据库

        Statement stmt = conn.createStatement() ; // 创建数据库操作对象

        conn.setAutoCommit(false); // 取消自动提交

        try {

        stmt.addBatch("INSERT INTO member(mid,name) VALUES (myseq.nextval,'优拓A')");

        stmt.addBatch("INSERT INTO member(mid,name) VALUES (myseq.nextval,'优拓B')");

        // 此时以下语句出现了错误,由于使用了事务控制,这样所有批处理的更新语句将都不会执行

        stmt.addBatch("INSERT INTO member(mid,name) VALUES (myseq.nextval,'优拓'C')");

        stmt.addBatch("INSERT INTO member(mid,name) VALUES (myseq.nextval,'优拓D')");

        stmt.addBatch("INSERT INTO member(mid,name) VALUES (myseq.nextval,'优拓E')");

        int result [] = stmt.executeBatch() ; // 执行批处理

        System.out.println(Arrays.toString(result));

        conn.commit(); // 如果没有错误进行提交

        } catch (Exception e) {

            e.printStackTrace();

            conn.rollback(); // 如果出现异常,则进行回滚

        }

        conn.close(); // 关闭数据库连接

    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值