概念:Java DataBase Connectivity,Java数据库连接,JDBC本质:是官方定义的一套操作所有关系型数据库的规则,即接口
操作步骤
- 导入驱动mysql-connector-java-5.1.47.jar包
- 注册驱动
- 获取数据库连接对象Connection
- 定义SQL
- 获取预处理对象Statement/PrepareStatement
- 封装结果集对象ResultSet
- 处理结果
- 释放资源
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 2.'注册驱动' Class.forName("com.mysql.jdbc.Driver"); 3.'获取数据库连接对象Connection' Connection conn = DricverManager.getConnection("jdbc:mysql://127.0.0.1:3306/jtx?useSSL=true&characterEncoding=UTF-8", "root", "root密码"); 4.'定义SQL' String sql = "update stu set balance = 500 where id = 1"; 5.'获取预处理对象Statement' Statement stmt = conn.createStatement(); 6.'执行SQL,接收返回结果' int count = stmt.executeUpdate(sql); 7.'处理结果' System.out.println(count); 8.'释放资源' stmt.close(); conn.close();
|
对象详解
DriverManager:驱动管理对象
- 注册驱动:告诉程序应该使用哪一个数据库驱动jar
1
| Class.forName("com.mysql.jdbc.Driver");
|
- 获取数据库连接
- 方法:static Connection getConnection(String url,String user, String password)
- url语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
- 如果连接的是本机mysql服务器,并且mysql服务默认端口为3306,url可以简写为:jdbc:mysql:///数据库名称
1
| Connection conn = DriverManager.getConnection("jdbc:mysql:///jtx?useSSL=true", "数据库用户名", "数据库密码");
|
- 注意:MySQL5之后的驱动jar包可以省略注册驱动的步骤
Connection:数据库连接对象
- 获取执行SQL的对象
- Statement createStatement()
1
| Statement stmt = conn.createStatement();
|
- PrepareStatement prepareStatement(String sql)
- 管理事务
- 开启事务:setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即开启事务
- 提交事务:commit()
- 回滚事务:rollback()
Statement:预处理对象
- 执行SQL
- boolean ececute(String sql):可以执行任意的SQL语句
- int executeUpdate(String sql):执行DML(insert、update、delete)语句、DDL(create、alter、drop)语句
- ResultSet executeQuery(String sql):执行DQL(select)语句
1
| ResultSet res = stmt.executeQuery(sql);
|
ResultSet:结果集对象
- boolean **next()**:游标向下移动一行,判断当前行是否是最后一行末尾,如果是返回false
- **getXxx(参数)**:获取数据
- Xxx:代表数据类型,如:int getInt()
- 参数:
- int:代表列的编号,从1开始,如:getInt(1);
- String:代表列名称,如:getDouble(balance);
- 使用步骤:
- 游标向下移动一行
- 判断是否有数据
- 获取数据
1 2 3 4 5 6 7 8 9
| while (res.next()) { int id = res.getInt(1); String name = res.getString("uname"); double balance = res.getDouble(3); System.out.println(id + "---" + name + "---" + balance); }
|
PrepareStatement:预处理对象
- 解决SQL注入问题
- 预编译SQL:参数使用?作为占位符
- 给**?**赋值
- 注意:在web项目中,如果出现classNotFound异常,则应该把jdbc的lib包放在webconten>web-inf>lib里面
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
static { try { Properties pro = new Properties(); pro.load(JDBCUtil.class.getClassLoader().getResourceAsStream("jdbc.properties")); url = pro.getProperty("url"); username = pro.getProperty("username"); password = pro.getProperty("password"); driver = pro.getProperty("driver"); Class.forName(driver); } catch (Exception e) { e.printStackTrace(); } } 获取连接 public static Connection getConnection() { try { Connection conn = DriverManager.getConnection(url,username,password); return conn; } catch (SQLException e) { e.printStackTrace(); } return null; } 释放资源 public static void close(Connection conn,PreparedStatement ps,ResultSet rs) { try { if(conn!=null) { conn.close(); } if(ps!=null) ps.close(); if(rs!=null) rs.close(); } catch (SQLException e) { e.printStackTrace(); } }
|
1 2 3 4 5 6 7 8 9
| conn = JDBCUtil.getConnection();
String sql = "insert into userinfo values(null,'"+userName+"','"+passWord+"')";
ps = conn.prepareStatement(sql);
ps.executeUpdate();
|
JDBC控制事务
- 事务:一个包含多个步骤的业务操作。如果这个业务操作被事务管理,则多个步骤要么同时成功,要么同时失败
- 操作
- 使用Connection对象来管理事务
- 开启事务:setAutoCommit(boolean autoCommit):调用该方法设置参数为false,即开启事务
- 提交事务:commit()
- 回滚事务:rollback()
DBUtils
- 作用:简化JDBC操作
- 实现:需要导入commons-dbutils-1.7.jar和mysql-connector-java-5.1.47.jar的包
- 常用组件:
- QueryRunner 执行各种sql语句
- BeanHandler:将结果集中的第一行数据封装到一个对应的JavaBean(实体类/vo/dto/pojo)实例中。对象
- BeanListHandler:将结果集中的每一行数据都封装到一个对应的JavaBean实例中,存放到List里。
- KeyedHandler:将结果集中的每一行数据都封装到一个Map里,然后再根据指定的key把每个Map再存放到一个Map里。 用户查询多条数据
- MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。(用于查询单个)
- MapListHandler:将结果集中的每一行数据都封装到一个Map里,然后再存放到List。用户查询多条数据 List<Map<String,Object>>
- ScalarHandler:将结果集中某一条记录的其中某一列的数据存成Object。 (自增的id,表记录数 select count())
- ArrayHandler:把结果集中的第一行数据转成对象数组。
- ArrayListHandler:把结果集中的每一行数据都转成一个对象数组,再存放到List中。
- ColumnListHandler:将结果集中某一列的数据存放到List中。
- KeyeHandler:将结果集中的每一行数据都封装到一个Map里,然后再根据指定的key把每个Map再存放到一个Map里。
- MapHandler:将结果集中的第一行数据封装到一个Map里,key是列名,value就是对应的值。
相关文章
JAVA基础
JAVA多线程
JUC