本文共 8418 字,大约阅读时间需要 28 分钟。
@author StormWangxhu@date 2017/12/10
通常,JDBC的使用可以按照以下几个步骤进行:
DriverManager.registerDriver(Driver driver);或Class.forName("DriverName");
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中数据库名称。
(1)createStatement(): 创建基本的Statement对象。
(2)prepareStatement():创建PreparedStatement对象。 (3)preparedCall():创建CallableStatement对象。 以创建基本Statement对象为例:Statement stmt = conn.createStatement();
所有的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) ;
若执行SQL语句是查询语句,执行结果将返回一个ResultSet对象,该对象里保存了SQL语句查询的结果。程序可以通过操作该ResultSet对象来获取查询结果。
每次操作操作数据库结束后,都要关闭数据库连接,释放资源,包括关闭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/