核心api_JDBC_使用步骤总结
JDBC使用步骤总结1. 注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");2. 获取链接
Connection connection =
DriverManager.getConnection(url,user,password);3. 创建statement
//静态:
Statement statement = connection.createStatement();
//动态:
PreparedStatement preparedstatement = connection.preparedStatement();
//编写sql语句,其中动态值用 ? 代替
String sql = "";4. 占位符赋值
//下标从1开始
preparedStatement.setObject(index,value);5. 发送sql语句获取结果集
//非DDL语句
int i = preparedStatement.executeUpdate();
//DDL语句
ResultSet = preparedStatement.executeQuery();6. 查询结果解析结果集
/*
resulset看成一个表格,里面有行有列,其中含有一个游标,初始指向第1行之前
可以通过next()方法遍历
getObject(columName):获取当前行此列名的对象
resulset 包含 MetaData对象
*/
//构建metaData对象
ResultSetMetaData metaData = resultSet.getMetaData();
//调用方法获取列数
int columnCount = metaData.getColumnCount();
ArrayList<Map> list = new ArrayList<>();
while (resultSet.next()){//遍历行
Map map = new HashMap();
for (int i = 1; i <= columnCount; i++) {//遍历列
Object value = resultSet.getObject(i);
//要用columLabel 不要用 columName,因为columName获取的是真名,无法获取别名
String columnLabel = metaData.getColumnLabel(i);
map.put(columnLabel,value);
}
list.add(map);
}4.当sql语句含有动态值的时候,为什么不适合用statement
.close();例如:
此方法会注册两次驱动
1.DriverManger.registerDriver() 方法本身会注册一次
2.Driver.static{DriverManager.registerDriver()} 静态代码块也会注册一次5.为什么说preparedStatement 不会发生注入攻击?
因为生成preparedStatement的时候,先传输一遍sql语句的结构,无法通过动态值来混淆,改变sql语句的结构。
6.遍历结果集的方法
1.加载: class文件-->jvm的class对象
2. 连接: 验证(语法错误,文件类型) --> 准备(静态变量默认值) --》 解析(触发静态代码块)
3. 初始化(静态属性赋真实值)7.要用columLabel 不要用 columName
因为columName获取的是真名,无法获取别名
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页:
[1]