Java-JDBC编程
使用JDBC连接访问数据库需要经过以下几个步骤:
1、加载数据库驱动
JDBC是由两部分与数据库独立的接口组成,一部分是面向程序程序开发人员的JDBC API,另一部分是面向底层的JDBC Driver API。而JDBC驱动程序就是由实施了这些接口的类组成,主要用于与数据库服务器交换信息
Class.forName("com.mysql.cj.jdbc.Driver");
老版的数据库驱动则为"com.mysql.jdbc.Driver";
2、建立与数据库的连接
通常使用DriverManager类的getConnection()方法来获取数据库的连接对象,只有创建对象之后才可以对数据进行相关操作。它的获取方法如下:
DriverManager.getConnection(String URL, String USER, String PASSWORD);
其中:
1)URL——数据库连接字符串,不同的数据库虽有区别但都遵循“JDBC协议+IP地址或域名+端口+数据库名称”的格式,其中MySQL数据库的URL一般是"jdbc:mysql://localhost:3306/test"
2)USER——链接数据库的用户名
3)PASSWORD——链接数据库的密码
如果数连接失败,请先确认数据库的服务是否开启,只有数据库的服务处于开启状态才能成功地与数据库建立连接
此外还应该使用try-catch语句将连接语句包围起来捕获异常
3、向数据库发送SQL命令
向数据库进行操作和访问的是Statement对象,而该对象不是通过Statement类直接创建的,而是通过Connection对象所提供的方法,如:
1)createStatement()方法:用于创建一个基本的Statement对象,该对象主要用于执行静态SQL语句
2)prepareStatement(String sql)方法:根据参数化的SQL语句创建一个预编译的PrepareStatement对象,该对象主要用于执行动态SQL语句
3)prepareCall(String sql)方法:根据SQL语句来创建一个CallableStatement对象,该对象主要用于执行数据库存储操作
获取Statement对象后,就可以通过调用它的不同方法来执行不同的SQL语句,如:
1)ResultSet executeQuery(String sql):专门用于查询
2)int executeUpdate(String sql):执行DDL、DML语句,前者返回0,后者返回受影响行数
4、处理数据库返回的结果集
SQL的查询结果都是经过ResultSet封装的,ResultSet结果集包含满足SQL查询语句的所有行,读取其数据的方法主要是getXXX(),它的参数可以是用来表示第几列(从1开始)的整型,也可以是列名,返回的是对应的XXX类型的值
getString()可以返回所有列的值,不过返回的都是字符串类型
getArray(int colindex/String columnname)可以获得当前行中,colindex所在列的元素组成的对象的数组
5、断开与数据库的连接
1)关闭结果集,如rs.close()
2)关闭statement对象,如stmt.close()
3)关闭连接,如con.close()
6、示例
package com.demo; import java.sql.*; public class JdbcDemo { public static void main(String[] args) { try { //加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); //连接数据库,创建数据库连接对象 Connection conn = DriverManager.getConnection("jdbc:mysql://192.168.247.129/myscore", "root", "123456"); //创建访问和操作数据库的对象 Statement st = conn.createStatement(); //定义sql语句 String sql = "select * from ScoreNow"; //使用sql语句操作数据库并放回结果集rs ResultSet rs = st.executeQuery(sql); //处理得到的结果 while(rs.next()){ int id = rs.getInt(1); String subject = rs.getString("Subject"); double score = rs.getDouble("Score"); int rank = rs.getInt("Rank"); System.out.println("第" + id + "场考试——" + "考试科目为" + subject + ",我取得了" + score +"分," + "在班级排名第" + rank + "名"); } rs.close();//关闭结果集对象 st.close();//关闭statement对象 conn.close();//关闭数据库连接 } catch (Exception e) { e.printStackTrace(); } } }