JDBC学习笔记(mysql)

时间:2021-11-27 09:14:13
* JDBC:Java DataBase ConnectiveJava连接数据库
* 概念:
* 使用Java代码操作数据库
* JDBC其实就是一套操作数据库的规范(接口)
* 快速入门:
1.导入驱动jar包
2.注册驱动
3.创建连接对象 Connection
4.定义sql  String sql = "insert into stu values('zhangsan',23,'男');
5.获取执行sql的对象  Statement
6.执行sql
7.处理结果

8.释放资源。

// 1.导入jar 包
// 2.注册驱动
Class.forName("com.mysql.jdbc.Driver");


// 3.获取数据库连接对象
Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/shopping", "root", "123456");

(本机为localhost或者本机ip地址都是可以的,端口号在安装mysql数据库的时候可以看到为3306)

注意:如果是本机操作,ip和端口号是可以省略的

// 获取执行sql语句的对象
String sql = "insert into tea values (null,'abcdef')";
Statement stat = conn.createStatement();


// 执行sql
int i = stat.executeUpdate(sql);


System.out.println(i);
//释放资源
conn.close();
stat.close();

* 详解各个类:
* DriverManager:驱动管理类
* 功能:
* 注册驱动:
* Class.forName("com.mysql.jdbc.Driver");
  在Driver类中有静态代码块,随着类的加载而执行。
  static {
try {
java.sql.DriverManager.registerDriver(new Driver());//注册驱动
} catch (SQLException E) {
throw new RuntimeException("Can't register driver!");
}
  }


  * 拓展:mysql5之后的驱动jar包,注册驱动这行代码可以省略

因为你不写的话mysql5以上版本会自己找到这个路径,然后加载这个路径:

JDBC学习笔记(mysql)

* 获取Connection对象:
* Connection conn = DriverManager.getConnection(url,user,password);
* url:访问数据库的路径
jdbc:     mysql://    192.168.3.100:     3306          /day04
     主协议      子协议 ip地址         端口号    数据库名称


* 细节:如果连接的是本地的数据库,则ip和端口可以省略
jdbc:mysql:/

* Connection:数据库连接对象
* 创建执行sql的对象
* createStatement:创建Statement对象
* prepareStatement:创建preparedStatement对象
* 可以防止sql注入,提高执行效率
* prepareCall: 创建preparedCall对象
* 执行存储过程的。




* 管理事务:事务指一件事,这件事一般包含多个步骤,这些步骤要么同时成功,要么同时失败。
* setAutoCommit():开启事务
* commit():提交事务
* rollback():回滚事务


try{
开启事务setAutoCommit(false):
1.查询
2.-我卡里的钱
3.+张三卡里的钱
提交事务 commit()
}catch(Exception e){
回滚事务rollback()
}






* Statement:执行sql的对象
* 方法:
* executeUpdate(sql):执行DML语句  (增、删、改)
* 返回值:int,代表影响的行数
* executeQuery(sql):执行DQL语句 (查询)
* 返回值:ResultSet对象  结果集对象,对结果集的封装


* execute(sql):执行任意语句
* 返回值:boolean,执行成功与否


* ResultSet:结果集对象
* 方法:
* next():判断是否有下一条记录,如果有,则将游标向下移动一行
* getXxx(参数):获取数据
* 参数类型:
String:列的名称
int:列的序号  从1开始


* PreparedStatement:执行sql的对象
* 登陆:
如果使用statement,可能发生sql注入。


* 功能:
* 预防sql注入


* 使用方式:
1.定义sql时,所有的参数位置 需要 使用 ? 作为占位符
2.Connection对象获取执行sql 对象 prepareStatement(sql)
3.给占位符 ? 赋值
* setXxx(参数1,参数2):
* 参数1:?出现的位置 从1开始
* 参数2:?对应的值
4.执行sql时,使用不带参数的方法




* 注意:一般都采用该对象来执行sql




   获取自增长列的编号
// 连接
con = JdbcUtil.getConnection();
// 【一、需要指定返回自增长标记】
pstmt = con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);




// 设置参数
pstmt.setString(1,'zs');
pstmt.setString(2,30);
// 执行1
pstmt.executeUpdate();


// 2  注意执行顺序【二、获取上面保存的部门子增长的主键】
rs =  pstmt.getGeneratedKeys();//拿到结果集合
// 3 得到返回的自增长字段的值
if (rs.next()) {
int deptId = rs.getInt(1);
}