JDBC是一个Java应用程序接口,作用是封装了对数据库的各种操作。JDBC由类和接口组成,使用Java开发数据库应用都需要4个主要的接口:Driver、Connection、Statement、ResultSet,这些接口定义了使用SQL访问数据库的一般架构。
1、JDBC相关类和API
JDBC是一个Java应用程序接口,作用是封装了对数据库的各种操作。JDBC由类和接口组成,使用Java开发数据库应用都需要4个主要的接口:Driver、Connection、Statement、ResultSet,这些接口定义了使用SQL访问数据库的一般架构。
Driver接口是所有JDBC程序必须实现的接口,该接口专门提供给数据库厂商使用。编写JDBC程序时,必须制定数据库驱动程序或类库加载到项目classpath中。
DriverManager用于加载JDBC驱动并创建与数据库的连接。其中定义了2个重要的静态方法:1 DriverManager.registerDriver(Driver driver) // 用于向DeriverManager注册给定的JDBC驱动程序2 DriverManager.getConnection(String url, String user, String pwd) // 建立与数据库的连接,返回表示连接的Connection对象
Connection代表与数据库的连接,其中定义了一系列的方法:1 Connection.getMetaData(); // 返回表示数据库元数据的DatabaseMetaData对象2 Connection.createStatement(); // 创建一个Statement对象3 Connection.prepareStatement(String sql); // 创建一个PreparedStatement对象4 Connection.prepareCall(String sql); // 创建一个CallableStatement对象来调用数据库存储过程
Statement接口用于向数据库发送SQL语句。1 Statement.execute(String sql); // 执行各种SQL语句,返回一个boolean类型值,true表示执行的SQL语句具备查询结果,可通过Statement.getResultSet()方法获取2 Statement.executeUpdate(String sql); // 执行SQL中的insert/update/delete语句,返回一个int值,表示受影响的记录的数目3 Statement.executeQuery(String sql); // 执行SQL中的select语句,返回一个表示查询结果的ResultSet对象
1 ResultSet.next(); // 将游标由当前位置移动到下一行2 ResultSet.getString(String columnName); // 获取指定字段的String类型值3 ResultSet.getString(int columnIndex); // 获取指定索引的String类型值4 ResuleSet.previous(); // 将游标由当前位置移动到上一行
2、程序示例
数据库IP 192.168.1.150,数据库名称为test,数据表名称persion,表结构为: 表中原有数据 JDBC连接MySQL程序示例 1 package server; 23 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.Statement; 78 public class DemoJDBC { 9 public static void main(String[] args) throws Exception {10 // 加载驱动类11 Class.forName("com.mysql.jdbc.Driver");12 13 // 通过DriverManager获取数据库连接14 String url = "jdbc:mysql://192.168.1.150/test";15 String user = "teamtalk";16 String password = "123456";17 Connection connection = (Connection) DriverManager.getConnection(18 url, user, password);19 20 // 通过Connection对象获取Statement对象、Statement执行SQL语句21 Statement statement = (Statement) connection.createStatement();22 ResultSet resultSet = statement.executeQuery("select * from persion");23 24 // 操作ResultSet结果集25 while (resultSet.next()) {26 // 第一种获取字段方式27 System.out.println(resultSet.getString(1) + " " + 28 resultSet.getString(2) + " " + resultSet.getString(3));29 System.out.print("---- ");30 // 第二种获取字段方式31 System.out.println(resultSet.getString("id") + " " +32 resultSet.getString("name") + " " + resultSet.getString("age"));33 }34 35 int ret = statement.executeUpdate("insert persion (name, age) value ("bobo", 24)");36 if (ret > 0) {37 System.out.println("insert ok");38 resultSet = statement.executeQuery("select * from persion");39 40 while (resultSet.next()) {41 System.out.println(resultSet.getString(1) + " " + 42 resultSet.getString(2) + " " + resultSet.getString(3));43 }44 }45 46 // 关闭数据库连接47 resultSet.close();48 statement.close();49 connection.close();50 }51 }程序运行结果为: 数据表中数据 JDBC使用PreparedStatement进行数据插入操作程序示例 1 package server; 23 import java.sql.Connection; 4 import java.sql.DriverManager; 5 import java.sql.ResultSet; 6 import java.sql.Statement; 78 import com.mysql.jdbc.PreparedStatement; 9 10 public class DemoJDBC {11 public static void main(String[] args) throws Exception {12 // 加载驱动类13 Class.forName("com.mysql.jdbc.Driver");14 15 // 通过DriverManager获取数据库连接16 String url = "jdbc:mysql://192.168.1.150/test";17 String user = "teamtalk";18 String password = "123456";19 Connection connection = (Connection) DriverManager.getConnection(20 url, user, password);21 22 PreparedStatement statement = (PreparedStatement) connection.prepareStatement(23 "insert persion (name, age) value (?, ?)");24 statement.setString(1, "hdu");25 statement.setInt(2, 21);26 statement.executeUpdate();27 28 ResultSet resultSet = statement.executeQuery("select * from persion");29 // 操作ResultSet结果集30 while (resultSet.next()) {31 // 第一种获取字段方式32 System.out.println(resultSet.getString(1) + " " + 33 resultSet.getString(2) + " " + resultSet.getString(3));34 }35 36 // 关闭数据库连接37 resultSet.close();38 statement.close();39 connection.close();40 }41 }程序输出为: 数据库中数据为:
3、小结
当程序远程访问mysql时,不能使用root账号和密码登录,这样是为了mysql的安全考虑,可以先新建一个mysql账号用来测试。如果远程MySQL主机是CentOS7的话,需要展暂时关闭防火墙,使用命令 systemctl stop firewalld.service。JDBC是一套操作数据库的接口,相当于数据库的抽象层,我们可以通过它来操作常用的数据库,进行SQL操作。当我们写程序时,对于一个表(user),可以新建其对应的类(User),其提供各种get/set方法;然后新建一个数据库操作工具类(JDBCUtils),其提供与数据库建立连接、关闭连接方法;最后新建一个对表的操作类(UserDao),其封装了对表User的添加、删除、查询和更新等操作。
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-04/129792.htm