JDBC
原生JDBC
package com.jdbc.test; import com.jdbc.model.Person; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; public class JdbcTest { public static void main(String[] args) throws Exception { //第一步,加载、注册驱动 //mysql驱动:com.mysql.jdbc.Driver Class.forName("com.mysql.jdbc.Driver"); //连接参数 //mysql连接:jdbc:mysql://ip/port/数据库名 String url = "jdbc:mysql://192.168.1.101:3306/mytest?characterEncoding=utf-8"; String userName = "root"; String password = "root"; //第二步,获取连接 Connection connection = DriverManager.getConnection(url, userName, password); //执行sql,?作为占位符 String sql = "select t.* from person t where t.id = ? and t.name = ?"; //第三步,获取语句执行者 //statement: 1. 参数直接嵌入sql执行,会引发sql注入;2. 执行效率低,每次执行都需要编译 //Statement statement = connection.createStatement(); //preparedStatement:1. 会对sql进行预编译,防止sql注入;2. 执行效率高,sql只会编译一次 PreparedStatement preparedStatement = connection.prepareStatement(sql); //第四步,设置参数,替换占位符,注意:占位符角标从1开始 int id = 1; String name = "张三"; preparedStatement.setObject(1, id); preparedStatement.setObject(2, name); //第五步,执行sql,获取结果集 ResultSet resultSet = preparedStatement.executeQuery(); //第六步,解析结果集 List<Person> list = new ArrayList(); while (resultSet.next()) { int resultId = resultSet.getInt("id"); String resultName = resultSet.getString("name"); int resultAge = resultSet.getInt("age"); int resultSex = resultSet.getInt("sex"); list.add(Person.builder().id(resultId).name(resultName).age(resultAge).sex(resultSex).build()); } System.out.println(list); //连接释放 resultSet.close(); preparedStatement.close(); connection.close(); } }
问题局限
1. 数据库配置信息硬编码问题 2. 频繁创建数据库连接 3. 需要手动释放连接 4. sql语句、参数设置、获取结果集参数存在硬编码 5. 需要手动封装进行结果集解析
解决方式
1. 配置文件 --解决--> 数据库配置信息硬编码问题 2. 连接池 --解决--> 解决频繁创建数据库连接;需要手动释放连接 3. 反射、内省创建结果实体 --解决--> sql语句、参数设置、获取结果集参数存在硬编码;需要手动封装进行结果集解析
JDBC原生操作
标签:mys nec array 编码 build HERE username select cti
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did117520