JDBC

JDBC

在这里插入图片描述

JDBC常用接口

1.Driver接口:

在这里插入图片描述

加载驱动类

Class.forName(“com.mysql.jdbc.Driver”);

MySQL 8.0修改为:

Class.forName(“com.mysql.cj.jdbc.Driver”);

2.DriverManager接口:

在这里插入图片描述

3.Connection接口:

在这里插入图片描述

  • 建立连接(连接对象内部其实包含了Socket对象,是一个远程的连接。比较耗时!这是Connection对象管理的一个要点!)
    真正开发中,为了提高效率,都会使用连接池来管理连接对象!
String url = "jdbc:mysql://localhost:3306/testjdbc";
//jdbc:mysql://主机名:端口号/数据库名
String user = "root";
String password = "123456";	
Connection con = DriverManager.getConnection(url, user, password);

MySQL 8.0需要添加时区

String url = "jdbc:mysql://localhost:3306/testjdbc?serverTimezone=UTC";
String user = "root";
String password = "123456";	
Connection con = DriverManager.getConnection(url, user, password);

4.Statement接口:

在这里插入图片描述

测试Statement接口的用法,执行SQL语句,以及SQL注入问题

Statement stmt = conn.createStatement();
//容易发生SQL注入
String sql = "insert into t_user (username,pwd,regTime) values ('eee',2333,now())";
stmt.execute(sql);		
String id = "5 or 1=1";//后者相当于true
String sql1 = "delete from t_user where id ="+id; //发生SQL注入,全部删除
stmt.execute(sql1);

测试PreparedStatement的基本用法

String sql = "insert into t_user (username,pwd) values (?,?)";
PreparedStatement ps = con.prepareStatement(sql);
//方法一、设置对应类型
ps.setString(1,"aaa");
ps.setString(2,"123456");
//方法二、设置为Object类
ps.setObject(1, "aaa");
ps.setObject(2, "123456");

//ps.execute();
int count = ps.executeUpdate(); //返回更新的行数

5.ResultSet接口:

测试ResultSet结果集的基本用法

String sql = "select id,username,pwd from t_user where id>?";//?占位符
PreparedStatement ps = con.prepareStatement(sql);
ps.setInt(1, 2);//id大于2的取出来
ResultSet rs = ps.executeQuery();
while(rs.next()) {
	System.out.println(rs.getInt(1)+"----"+rs.getString(2)+"----"+rs.getString(3));
}
  • 依序关闭使用之对象与连接,后开的先关闭,resultset–>statment–>connection,一定要将三个try-catch块,分开写!

6.批处理Batch:

在这里插入图片描述
测试批处理的基本用法

con.setAutoCommit(false);	//设为手动提交
//尽量使用Statement		
Statement stmt = con.createStatement();	
for (int i = 0; i < 20000; i++) { //提交2w条数据
	String sql = "insert into t_user (username,pwd,regTime) values ('gao"+i+"',666666,now())";
	stmt.addBatch(sql);
}			
stmt.executeBatch();
con.commit(); //提交

7.事务:

在这里插入图片描述

DML(data manipulation language)数据操纵语言:UPDATE、INSERT、DELETE

DDL(data definition language)数据库定义语言:CREATE、ALTERL:修改、DROP

DCL(Data Control Language)数据库控制语言:GRANT:授权、ROLLBACK:回滚、COMMIT:提交

DQL(Data Query Language)数据库查询语言:SELECT


事务隔离级别从低到高:

  1. 数据未提交(Read Uncommitted)
  2. 读取已提交(Read Committed)
  3. 可重复读(Repeatable Read)
  4. 序列化(serializable)
con.setAutoCommit(false);// JDBC默认为自动提交事务

ps1 = con.prepareStatement("insert into t_user (username,pwd) values (?,?)");
ps1.setObject(1, "Ming");
ps1.setObject(2, "123456");
ps1.execute();
System.out.println("插入一个用户,小明");

//执行失败,两条语句均执行失败
ps2 = con.prepareStatement("insert into t_user (username,pwd) values (?,?,?)");

ps2.setObject(1, "Gang");
ps2.setObject(2, "123456");
ps2.execute();
System.out.println("插入一个用户,小刚 ");

con.commit();

con.rollback();   //回滚 

8.时间类型

在这里插入图片描述

ps.setDate(3, date);

ps.setTimestamp(4, stamp);

9.CLOB

在这里插入图片描述
输出:

PreparedStatement ps = con.prepareStatement("insert into t_user (username,myInfo) values (?,?)");
ps.setString(1, "abc");
//将文本文件内容输入到数据库中
ps.setClob(2, new FileReader(new File("F:\\JAVA\\CLOB.txt")));
//将字符串输入到数据库中
ps.setClob(2, new BufferedReader(new InputStreamReader(new ByteArrayInputStream("aaa".getBytes()))));44

输入 :

PreparedStatement ps = con.prepareStatement("select * from t_user where id=?");
ps.setObject(1, 2021);//读取id为2021的
ResultSet rs = ps.executeQuery();
while(rs.next()) {
	Clob c= rs.getClob("myInfo");
	Reader r = c.getCharacterStream();
	int len = 0;
	while((len=r.read())!=-1) {
		System.out.println((char)len);
	}
}

10.BLOB

在这里插入图片描述
输出:

PreparedStatement ps = con.prepareStatement("insert into t_user (username,headIMG) values (?,?)");
ps.setString(1, "abc");
ps.setBlob(2, new FileInputStream(new File("F:\\JAVA\\BLOB.jpeg")));

输入:

PreparedStatement ps = con.prepareStatement("select * from t_user where id=?");
ps.setObject(1, 2022);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
	Blob b = rs.getBlob("headIMG");
	InputStream is = b.getBinaryStream();
	OutputStreamos = new FileOutputStream(new File("F:\\JAVA\\BLOB_saved.jpeg"));
	int len = 0;
	while((len=is.read())!=-1) {
		os.write(len);
	}
}

ORM(Object Relationship Mapping)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值