搭桥——造车——发车——销毁
//1.注册驱动;有多种方法
//方法1;会注册两次驱动。因为静态代码块会注册一次,使用这个类第一次就会加载静态代码块
//DriverManager.registerDriver(new Driver());
//方法2;原理加载一次这个类从而加载一次静态代码块
Class.forName("xxxxx");
//2.获取连接
//方式1
Connection connection=DriverManger.getConnection("jdbc:数据库厂商://IP地址:port/数据库名?user=xxx&password=xxx")
//方式2
//Connection connection=DriverManger.getConnection("jdbc:数据库厂商://IP地址:port/数据库名","xxx","xxx")
//方式3
//Connection connection=DriverManger.getConnection("jdbc:数据库厂商://IP地址:port/数据库名",properties)
//方式4:用于批量操作
//Connection connection=DriverManger.getConnection("jdbc:数据库厂商://IP地址:port/数据库名?rewriteBathchedStatements=true","xxx","xxx")
//需要事务时写
//connection.setAutoCommit(false);
//3.创建statement
//方式1;适应于静态代码块
//Statement statement=connection.createStatement();
//方式2; 通用;常用方式
PreparedStatement statement=connection.preparedStatement(sql);
//方式3; 用于主键回显
//PreparedStatement statement=connection.preparedStatement(sql,Statement.RETURN_GENTATED_KEYS);
//4.填写占位符;如果创建statement时用的是方式1则跳过
方式1;常用情形
statement.setObject(xxx);//xxx表示占位符从左到右的第几个,从1开始数
//方式2 ;用于批量操作情形
//statement.setObject(xxx);
//... ...
//statement.addBatch();
//statement.setObject(xxx);
//... ...
//statement.addBatch();
try {
//5.发送sql获取结果
//5.1 发送sql
//方式1;用于创建statement时用的是方式1时且sql语句为非查询操作
//int i = statement.executeUpdata(sql);//返回修改行数
//方式2;用于创建statement时用的是方式1时且sql语句为查询操作
//ResultSet resultSet= statement.executeQuery(sql);//返回结果集
//方式3;用于创建statement时用的非方式1时且sql语句为非查询操作
//int i = statement.executeUpdata();//返回修改行数
//方式4;用于创建statement时用的非方式1时且sql语句为查询操作
ResultSet resultSet= statement.executeQuery();//返回结果集
//方式5;用于执行批量操作情形
//statement.executeBatch();
//5.2获取结果并解析;查询操作返回结果集情形
//若结果只有一条
//if(resultSet.next()) {
//}
//若结果可能有多条,只有几列
while(resultSet.next()) {
//获取列值信息
//方式1
//get类型(int 列的下角标(从1开始));
//方式2
get类型(String 列名或列别名);
}
//若结果可能有多条,且列有多个操作繁琐情形
//获取列信息
//ResultSetMetaData resultSetMetaData = resultSet.getMetaData();
//获取列的数量
//int columnCount = resultSetMetaData.getColumnCount();
//while(resultSet.next()) {
// for(int i = 0;i<columnCount;i++) {
//获取列信息
//获取列名
//String columnName = resultSetMetaData.getColumnLabel(i);
// 获取列值
//get类型(String 列名或列别名);
// }
//}
//用于插入后获取主键情形
//if(i>0){
//用于插入后获得主键值
// ResultSet generateKeys = statement.getGenerateKeys();
// resultSet.next();
// int id = resultSet.getInt(1);
//}
//提交;开启事务写
//connection.commit();
} catch(Exception e) {
//回滚;开启事务写
//connection.rollback();
throw e;
}
finally {
//6.关闭资源,用了就要关原则
resultSet.close();
statement.close();
connection.close();
}