博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JDBC--使用步骤、练习
阅读量:4140 次
发布时间:2019-05-25

本文共 8418 字,大约阅读时间需要 28 分钟。

@author StormWangxhu@date 2017/12/10

通常,JDBC的使用可以按照以下几个步骤进行:

(1)加载并注册数据库驱动

DriverManager.registerDriver(Driver driver);或Class.forName("DriverName");

(2)通过DriverManager获取数据库连接

Connection conn = DriverManager.getConnection(String url,String username,String password);

说明:getConnection()方法中有三个参数,分别表示连接数据库的地址、登录数据库的用户和密码。以MySql为例。

其地址书写方式如下:

jdbc:mysql://hostname:port/databasename

说明:jdbc:mysql:是固定的写法,mysql指的是MySql数聚库hostname指的是主机的名称(若主机在本机中,hostname为localhost或127.0.0.1;若要连接的主机在其他计算机上,则hostname为所要连接计算机的IP)。port指的是端口,Mysql默认端口为3306。databasename为MySql中数据库名称。

(3)通过Connection对象获取Statement对象

Connection对象创建Statement的方式有如下几种:

(1)createStatement(): 创建基本的Statement对象。

(2)prepareStatement():创建PreparedStatement对象。
(3)preparedCall():创建CallableStatement对象。
以创建基本Statement对象为例:

Statement stmt = conn.createStatement();

(4)使用Statement执行SQL语句

所有的Statement都有如下3种执行SQL语句的方法。

(1)exeecute(): 可执行任何SQL语句。
(2)executeQuery(): 通常执行查询语句,执行后返回代表结果集得ResultSet对象
(3)executeUpdate():主要执行DML语句和DDL语句。执行DML语句,如insert,update,delete时,返回受SQL语句的行数,执行DDL语句返回0。

//执行SQL语句,获取结果集ResultSetResultSet rs =stmt.executeQuery(sql) ;

(5)操作ResultSet结果集

若执行SQL语句是查询语句,执行结果将返回一个ResultSet对象,该对象里保存了SQL语句查询的结果。程序可以通过操作该ResultSet对象来获取查询结果。

(6)关闭连接,释放资源

每次操作操作数据库结束后,都要关闭数据库连接,释放资源,包括关闭ResultSet,Statement,和Connection等资源。


练习:

前期准备:

(1)搭建数据库环境

(2)创建项目环境
鼠标右击—-new—-folder,命名为lib,将下载好的MySql数据库驱动文件复制到项目的lib中,并使用鼠标右键单击该jar包,build path ——add to bulid path
(3)编写JDBC程序


类一:读取数据库中的users表,并将结果输出到控制台
package cn.itcast.jdbc.example;import java.sql.Date;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import com.mysql.jdbc.Connection;import com.mysql.jdbc.Statement;public class JDBCExample {
public static void main(String[] args) { Statement statement = null ; ResultSet resultSet = null ; Connection connection = null ; try { //1:注册数据库的驱动 Class.forName("com.mysql.jdbc.Driver"); //2.通过DriverManager获取数据库连接 String url = "jdbc:mysql://localhost:3306/jdbc"; //连接数据库的地址 String username = "root"; String password = "xiaohu"; connection = (Connection) DriverManager.getConnection(url, username, password); //3.通过Connection对象获取Statement对象 statement = (Statement) connection.createStatement(); //用于创建一个Statement对象,将SQL语句发送到数据库。 //4.使用Statement对象执行SQL语句 String sql ="select * from users"; resultSet =statement.executeQuery(sql); //该方法返回一个表示查询结果的ResultSet对象。 //5.操作ResultSet结果集 System.out.println("id | name | password"+"| email | birthday"); while (resultSet.next()) { int id = resultSet.getInt("id"); //通过列名获取指定字段值 String name = resultSet.getString("name"); String password1 = resultSet.getString("password"); String email = resultSet.getString("email"); Date birthday = resultSet.getDate("birthday"); System.out.println(id+" | "+name+" | "+password1+" | "+email+" | "+birthday); } } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); }finally { //6.收回数据库资源 if (resultSet != null) { try { resultSet.close(); } catch (SQLException e) { e.printStackTrace(); } resultSet = null ; } if (statement != null) { try { statement.close(); } catch (SQLException e) { e.printStackTrace(); } statement = null ; } if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } connection =null ; } } }}

注意:

(1).虽然使用DriverManager.registerDriver(new com.mysql.jdbc.Driver)方法也可以完成注册,但此方法会使数据库驱动被注册两次。这是因为Driver类的源码中,已经在静态代码块中完成了数据库的驱动注册。所以,为了避免数据库驱动被重复注册,只需要在程序中使用Class.forName()方法加载驱动类即可!(2)释放资源应该将释放资源的代码操作放在finally代码块中。

使用PreparedStatement对象对数据库进行插入操作。
package cn.itcast.jdbc.example;import java.sql.Connection;import java.sql.DriverManager;import java.sql.PreparedStatement;import java.sql.SQLException;public class JDBCExample2 {
public static void main(String[] args) { Connection connection = null ; PreparedStatement pStatement = null ; try { //加载数据库驱动 Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/jdbc"; String username = "root"; String password = "xiaohu"; //创建应用程序与数据库连接的Connectin对象 connection=DriverManager.getConnection(url, username, password); //执行SQL语句 String sql="insert into users(name,password,email,birthday)"+"values(?,?,?,?)"; //使用?通配符来代替参数,然后使用setXxx()方法为SQL语句赋值。 //1.创建执行SQL语句的PrepareedStatement对象 pStatement = connection.prepareStatement(sql); //2.为SQL语句中参数赋值 pStatement.setString(1,"stormwang" ); pStatement.setString(2, "123456"); pStatement.setString(3, "StormWangxhu@163.com"); pStatement.setString(4, "1998-05-04"); //3.执行SQL语句 pStatement.executeUpdate(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); }finally { //回收数据库资源 if (connection != null) { try { connection.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if (pStatement != null) { try { pStatement.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }}

使用ResultSet对象取出指定数据的信息。
package cn.itcast.jdbc.example;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class JDBCExampe3 {    public static void main(String[] args) {        Connection connection= null  ;        Statement statement = null ;        try {            //注册数据库驱动            Class.forName("com.mysql.jdbc.Driver");            String url="jdbc:mysql://localhost:3306/jdbc";            String username ="root";            String password="xiaohu";            //连接数据库            connection=DriverManager.getConnection(url, username, password);            //SQL语句            String sql="select * from users";            Statement statement2 = connection.createStatement(                                        ResultSet.TYPE_SCROLL_INSENSITIVE,                                        ResultSet.CONCUR_READ_ONLY);            //执行SQL语句并将获取的数据信息存放在ResultSet中            ResultSet resultSet =statement2.executeQuery(sql);            //取出ResultSet中指定的数据信息            System.out.print("第二条数据的name为:");            resultSet.absolute(2);  //将指针定位到结果集中的第2行数据            System.out.println(resultSet.getString("name"));            System.out.print("第一条数据的name值为:");//          System.out.println(resultSet.getString("name"));            resultSet.beforeFirst();   //将指针定位到结果集中第一行数据前            resultSet.next();   //将指针向后滚动            System.out.println(resultSet.getString("name"));            System.out.print("第4条数据的name值为:");            resultSet.afterLast();   //将指针定位到结果集中最后一条数据之后            resultSet.previous();  //将指针向前滚动            System.out.println(resultSet.getString("name"));        } catch (ClassNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        } catch (SQLException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }finally {            //释放资源            if (connection != null) {                try {                    connection.close();                } catch (SQLException e) {                    // TODO Auto-generated catch block                    e.printStackTrace();                }if (statement != null) {                    try {                        statement.close();                    } catch (SQLException e) {                        // TODO Auto-generated catch block                        e.printStackTrace();                    }                }            }        }    }}

转载地址:http://xyrvi.baihongyu.com/

你可能感兴趣的文章
九度:题目1017:还是畅通工程
查看>>
九度:题目1034:寻找大富翁
查看>>
第六章 背包问题——01背包
查看>>
第七章 背包问题——完全背包
查看>>
51nod 分类
查看>>
1136 . 欧拉函数
查看>>
面试题:强制类型转换
查看>>
Decorator模式
查看>>
Template模式
查看>>
Observer模式
查看>>
高性能服务器设计
查看>>
性能扩展问题要趁早
查看>>
MySQL-数据库、数据表结构操作(SQL)
查看>>
OpenLDAP for Windows 安装手册(2.4.26版)
查看>>
图文介绍openLDAP在windows上的安装配置
查看>>
Pentaho BI开源报表系统
查看>>
Pentaho 开发: 在eclipse中构建Pentaho BI Server工程
查看>>
JSP的内置对象及方法
查看>>
android中SharedPreferences的简单例子
查看>>
android中使用TextView来显示某个网址的内容,使用<ScrollView>来生成下拉列表框
查看>>