Java之JDBC

Java之JDBC

什么是JDBC

  • JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,(java.sql,javax.sql)使用这些类库可以以一种标准的方法、方便地访问数据库资源。
  • JDBC为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些细节问题。
  • JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。

获取JDBC链接

要想使用JDBC连接数据库,首先要有与数据库对应的驱动:

  • Oracle的驱动:oracle.jdbc.driver.OracleDriver
  • mySql的驱动: com.mysql.cj.jdbc.Driver

直接上代码:

// 连接信息
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "passwd";
// 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");

// 获取链接
Connection conn = DriverManager.getConnection(url,user,password);
System.out.println(conn);
// 关闭链接
conn.close();

数据库操作

增删改

可以通过Statement接口去操作数据库,但由于其存在一些问题,如SQL注入,所以我们都用PreparedStatement

PreparedStatement 接口是 Statement 的子接口,它表示一条预编译过的 SQL 语句

PreparedStatement 对象所代表的 SQL 语句中的参数用问号(?)来表示,调用 PreparedStatement 对象的 setXxx() 方法来设置这些参数,其中Xxx表示参数的类型,setXxx() 方法有两个参数,第一个参数是要设置的 SQL 语句中的参数的索引(从 1 开始),第二个是设置的 SQL 语句中的参数的值,也可以使用通用的setObject

例如

// 连接信息
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "passwd";
// 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");

// 获取链接
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);

// 定义sql语句
String sql = "insert into student(sno,sname,age) values(?,?,?)";
// 预编译sql
PreparedStatement ps = conn.prepareStatement(sql);
// 填充占位符,注意:从1开始
ps.setString(1, "1000");
ps.setString(2, "张三");
ps.setInt(3, 18);
// 执行sql
ps.execute();// 当执行select语句时,返回true,否则返回false
// 关闭资源
ps.close();
conn.close();

对于执行sql之前的部分,和增删改操作一样

使用executeQuery,可以执行查询语句,同时获取查询结果,查询结果保存在ResultSet对象中

使用ResultSet对象的next方法,可以判断还有没有数据,有返回true,并将指针下移,没有就返回false

类似于SetXxx,使用GetXxx获取对于位置的字段值,也可以通过别名获取字段值

// 连接信息
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "passwd";
// 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");

// 获取链接
Connection conn = DriverManager.getConnection(url, user, password);

// 定义查询
String sql = "select * from student where age<=?";
// 预编译sql
PreparedStatement ps = conn.prepareStatement(sql);
// 填充占位符,注意:从1开始
ps.setObject(1, 18);
// 执行查询语句,获取结果集
ResultSet resultSet = ps.executeQuery();
// 如果还有数据,next返回true,并将指针下移,否则返回false,指针不会下移
while (resultSet.next()){
    // 获取一条数据里的字段,注意:从1开始
    Object no = resultSet.getObject(1);
    Object name = resultSet.getObject(2);
    Object age = resultSet.getObject(3);
    System.out.println("[no:"+no+"  name:"+name+"  age:"+age+"]");
}
// 关闭资源
ps.close();
conn.close();

ResultSetMetaData

ResultSetMetaData类主要存放结果集的字段属性,使用结果集对象的getMetaData可以获得ResultSetMetaData对象

常用方法如下:

  1. int getColumnCount()

    获取结果集的字段数

  2. String getColumnName(int index)

    获取结果集index位置的字段名(不是别名),同样index从1开始,不推荐使用

  3. String getColumnLabel(int index)

    获取结果集index位置的别名(如果没有起别名,获取的就是字段名),推荐使用

Java和SQL类型对应

Java类型SQL类型
booleanBIT
byteTINYINT
shortSMALLINT
intINTEGER
longBIGINT
StringCHAR,VARCHAR,LONGVARCHAR
byte arrayBINARY , VAR BINARY
java.sql.DateDATE
java.sql.TimeTIME
java.sql.TimestampTIMESTAMP

PreparedStatement对象常用方法

  1. executeUpdate():返回更新数据的条数,如果是查询,则返回0

  2. addBatch(),executeBatch(),clearBatch():这几个是用来进行批处理的,功能分别是:添加sql到缓存中,执行缓存中所有的sql,清空缓存。

    注意:在使用这几个之前,由于mysql默认是不支持进行批处理操作的,需要修改连接url,让其支持,在url后添加参数rewriteBatchedstatements=true,例如jdbc:mysql://localhost:3306/test?rewriteBatchedstatements=true

Connection对象常用方法

  1. setAutoCommit(boolean autoCommit):设置是否自动提交,默认是true。当需要进行批处理操作时,可以关闭自动提交,如conn.setAutoCommit(false),当所有sql都执行完成后,再调用conn.commit()一次性提交(写入数据库),这样可以提高效率,但有风险
  2. commit():提交数据
  3. rollback():回滚数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值