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,后者返回受影响行数
3)boolean execute(String sql):可执行任何SQL语句如果执行后第一个结果为ResultSet(即执行了查询语句)则返回true,如果执行了DDL、DML语句则返回false。如果返回结果为true,则随后可以通过该Statement对象的getResult()方法获取结果集对象,如果返回结果为false则随后可以通过getUpdateCount()方法获得受影响的行数
如果SQL运行后会产生结果集,那么Statement对象则会将结果集封装成ResultSet对象并返回,有的方法没有返回需要通过getResultSet获取
Statement的上述三种方法都会抛出SQLException异常
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();
}
}
}