JDBC中的核心类有:DriverManager、Connection、Statement,和ResultSet!mysql
DriverManger(驱动管理器)的做用有两个:sql
l 注册驱动:这可让JDBC知道要使用的是哪一个驱动;Class.forName(“com.mysql.jdbc.Driver”)数据库
l 获取Connection:若是能够获取到Connection,那么说明已经与数据库链接上了。mybatis
Connection con = DriverManager.getConnection(“jdbc:mysql://localhost:3306/mydb1”,”root”,”123”);学习
Connection对象表示链接,与数据库的通信都是经过这个对象展开的:spa
l Connection最为重要的一个方法就是用来获取Statement对象;对象
Statement是用来向数据库发送SQL语句的,这样数据库就会执行发送过来的SQL语句:utf-8
l void executeUpdate(String sql):执行更新操做(insert、update、delete等);资源
l ResultSet executeQuery(String sql):执行查询操做,数据库在执行查询后会把查询结果,查询结果就是ResultSet;get
(后面咱们使用的都是PrepareStatement:预编译的语句,它的好处有三点,防止sql的攻击,提升代码可读性,提升效率)
PreparedStatement最大的好处就是在于重复使用同一模板,给予其不一样的参数来重复的使用它。这才是真正提升效率的缘由。
ResultSet对象表示查询结果集,只有在执行查询操做后才会有结果集的产生。结果集是一个二维的表格,有行有列。操做结果集要学习移动ResultSet内部的“行光标”,以及获取当前行上的每一列上的数据:
public static void main(String[] args) {
Connection connection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;
try {
//一、加载数据库驱动
Class.forName("com.mysql.jdbc.Driver");
//二、经过驱动管理类获取数据库连接
connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8", "root", "password");
//三、定义sql语句 ?表示占位符
String sql = "select * from user where username = ?";
//四、获取预处理statement
preparedStatement = connection.prepareStatement(sql);
//五、设置参数,第一个参数为sql语句中参数的序号(从1开始),第二个参数为设置的参数值
preparedStatement.setString(1, "王五");
//六、向数据库发出sql执行查询,查询出结果集
resultSet = preparedStatement.executeQuery();
//七、遍历查询结果集
while(resultSet.next()){
System.out.println(resultSet.getString("id")+" "+resultSet.getString("username"));
}
} catch (Exception e) {
e.printStackTrace();
}finally{
//八、释放资源
if(resultSet!=null){
try {
resultSet.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(preparedStatement!=null){
try {
preparedStatement.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(connection!=null){
try {
connection.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}