Java 之 数据库编程(JDBC)
1.JDBC
a.定义:是一种用于执行SQL语句的Java API,它由一组用Java 语言编写的类和接口组成
b.操作步骤:
①加载驱动——告诉驱动管理器我们将使用哪一个数据库的驱动包
Class.forName("com.mysql.jdbc.Driver"); // try - catch
②操作JDBC API完成数据库动作
常用方法:Connection:连接
Statement:语句对象
ResultSet:查询语句返回的结果集
//2-1、获取连接 Connection con = null; try { con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test134" + "?useUnicode=true&characterEncoding=utf8&useSSL=false", "root", "root"); //2-2、书写SQL语句---字符串拼接、 String sql = "insert into t_class(f_classname,f_teacher) values('"+className+"','"+teacherName+"')"; //2-3、获取语句对象---Statement对象 Statement state = con.createStatement(); //2-4、执行语句对象---所有的DML语句,全部执行executeUpdate()方法 int row = state.executeUpdate(sql); //返回的int代表影响了多少行! } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally{ //2-5、关闭连接 if(con != null){ try { con.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
注:以上是 增、删、改 的方法,查询需要用到一下语句
ResultSet rs = state.executeQuery(sql);
c. url:
①定义:统一资源定位符
②样式:协议 : // ip地址 : 端口号 / 服务
jdbc:mysql://127.0.0.1:3306/test134
2.PreparedStatement——预编译语句
a.特点:①可以完全替代statement,执行executeUpdate()和executeQuery()
②解决SQL注入问题
③因为在执行之前就把语句和String SQL绑定上(交给数据库预先编译了),执行时不能再改变SQL的结构
b.注意:①?是用来替代语句中的数据值的位置,不能替代跟结构有关的任何内容
②使用?替代字符串值的时候,不能打引号
③不要滥用预编译,预编译语句过多也会影响数据库性能;当数据值是由外部文本输入的时候,才用它
String sql = "select * from t_user where f_username=? and f_password=?";
PreparedStatement ps = con.prepareStatement(sql); ps.setString(1,name); ps.setString(2, pwd);
ResultSet rs = ps.executeQuery();
3.事务——Transaction
a.定义:是JDBC中的一种,让多条SQL语句作为一个整体,必须整体成功或整体失败
b.作用:主要控制的是DML语句,需要保证数据的完整性;DQL语句可以不参与事务
c.步骤:事务操作分为三步——这三步都由一个对象完成——Connection
1.开启事务——设置自动提交为假
con.setAutoCommit( false );
2.整体提交
con.commit();
3.在Catch块中,整体回滚
con.rollback;