注册驱动
注册驱动的两种方法(mysql为例)
1、
//通过实例化对象,注册驱动
Driver driver = new com.mysql.cj.jdbc.Driver();
DriverManager.resgisterDriver(dirver);
2、
//通过反射机制,注册驱动
Class.forName("com.mysql.cj.jdbc,Driver");
获取连接
//获取连接
//useSSL:如果服务器提供安全验证则需要修改为true
//mysql 8 的版本需要添加时区控制:serverTimezone=UTC
String url = "jdbc:mysql://IP地址:端口号/数据库名称?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&useSSL=false";
String username = "数据库登录用户名";
String password = "密码";
//conn是一个Connection类型的变量
Connection conn = DriverManager.getConnection(url,username,password);
获取操作sql的对象
数据库操作对象有Statement和PreparedStatement,前者执行的是完整的sql,后者可预编译含有占位符的sql,然后再进行传值
//获取操作sql的Statement对象
Statement stmt = conn.createStatement();
//获取操作sql的PreparedStatement对象
//这里的sql是含有占位符的sql
String sql = "delete from 表名称 where 列名=?";
PreparedStatement pstmt = conn.prepareStatement(sql);
//对占位符传值
//1、2、3.. 代表占位符索引,即第一个占位符,值 即需要传入的值
pstmt.setString(1,"值");
执行sql
这里已删除为例,通过Statement和PreparedStatement两的对象来执行sql
//通过Statement对象执行sql
String sql = "delete from 表名 where 列=值";
//获取返回值:被影响的行数
int count = stmt.executeUpdate(sql);
// 通过PreparedStatement对象执行sql
//获取返回值:被影响的行数
int count = pstmt.executeUpdate();
以Statement对象为例,处理查询sql
//这里sql以查询列名为例
String sql = "select 列1,列2 from 表 where 列=值";
//通过ResultSet集合,来接收查询返回结果集
ResultSet rst = stmt.executeQuery(sql);
处理结果集
处理上述返回的ResultSet结果集
//通过while循环打印
while(rst.next()){
String s1 = rst.getString("列1");//这个方法不管数据库存入是什么类型,都以String类型返回
String s2 = rst.getString("列2");
System.out.println("s1:"+s1+" s2:"+s2);
}
关闭资源
//关闭资源遵循从小到大关闭
rst.close();
stmt.colse();
conn.colse();
一种例子的完整代码
public class JDBCTest{
public static void main(String[] args) throws Exception{
Connection conn = null;
Statement stmt = null;
try {
// 1、注册驱动
//通过反射机制注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");// 不需要接收返回值,只需要这个动作发生
// 2、获得连接
String url = "jdbc:mysql://localhost:3306/jdbctest?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&useSSL=false";
String username = "root";
String password = "123456";
conn = DriverManager.getConnection(url, username, password);
System.out.println("获取链接成功:" + conn);
// 3、获得操作sql的对象
stmt = conn.createStatement();
// 4、执行sql
String sql = "select tnum,tname,tage,text from test_jdbc";
// 5、处理结果集
//获取结果集对象
ResultSet rst = stmt.executeQuery(sql);
//通过对象的next()方法判断,并循环打印输出
while (rst.next()) {
//getString()方法也可以吧数据库中的数字类型一String类型输出
int tnum = rst.getInt("tnum");//根据查询时的列名,来获取对应的值
String tname = rst.getString("tname");
int tage = rst.getInt("tage");
String text = rst.getString("text");
//通过拼接字符串,打印获取的数据
System.out.println("tnum:" + tnum + " tname:" + tname + " tage:" + tage + " text:" + text);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 6、关闭资源
try {
if (rst != null) {
rst.close();
System.out.println("关闭rst!");
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (stmt != null) {
stmt.close();
System.out.println("关闭stmt!");
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if (conn != null) {
conn.close();
System.out.println("关闭conn!");
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}