JDBC小结1
1.JDBC:java数据库连接技术
sun公司只提供接口与抽象类,具体实现由各大数据库厂商实现
各大厂商的实现称为驱动
sun公司提供的接口和抽象类:
1.DriverManger 驱动管理器
2.Connection 连接数据库
3.Statement 执行SQL语句
4.ResultSet 结果集
步骤
- 1.加载驱动
- 2.连接数据库
- 3.通过Statement对象执行SQL
- 4.通过ResultSet获取结果集
package com.kang;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
/*
* 1.加载驱动
* 2.连接数据库
* 3.通过Statement对象执行SQL
* 4.通过ResultSet获取结果集
*/
public class MyJDBC {
public static void main(String[] args) throws SQLException, ClassNotFoundException {
// Driver driver = new com.mysql.cj.jdbc.Driver();//创建了一个驱动
// DriverManager.registerDriver(driver);//加载
//以上两行代码在Driver类中的静态代码块,通过反射机制加载类,自然会执行静态代码块中的代码,而且只执行一次,只会加载一次驱动
Class.forName("com.mysql.cj.jdbc.Driver");
String url= "jdbc:mysql://localhost:3306/jdbc1?characterEncoding=UTF8&&serverTimezone=UTC";
String user="root";
String password="123456";
Connection connection =
DriverManager.getConnection(url, user, password);
String sql="create table student(id integer primary key auto_increment,"
+ "name varchar(30),"
+ "sex varchar(5),"
+ "age integer)charset=utf8";
Statement statement = connection.createStatement();
//返回值代表有没有结果集,有为true,没有false(查询语句有结果集)
boolean rt = statement.execute(sql);
System.out.println("rt = "+ rt);
}
}
//通過java来创建Student这张表
表1
增加一条记录###
String sql = "insert into student (name,sex,age) values ('张三','男','23')";
Statement statement = connection.createStatement();
boolean rt= statement.execute(sql);
if(!rt) {//进来表示rt为false,为非查询语句
//获取受影响的行数,对增、删、改是有效,如果是查询,返回值为-1,如果是执行DDL(数据库定义语言 对数据库、表结构进行操作
//建库、建表、修改表结构、删库、删表等等)返回0
//所以返回结果不能作为成功失败的条件
int uc = statement.getUpdateCount();
System.out.println("uc = "+ uc);
}
}
}
//返回为1
查询验证:表2
根据列号获取记录的字段值
String sql = "insert into student (name,sex,age) values ('张三','男','23')";
String sql = "select * from student";
Statement statement = connection.createStatement();
boolean rt= statement.execute(sql);
if(!rt) {
int uc = statement.getUpdateCount();
System.out.println("uc = "+ uc);
}else {
ResultSet rs = statement.getResultSet();
/*
* 返回值是一个boolean值,true代表还有记录,
* false代表已经获取完成
*/
// rs.next();
// rs.beforeFirst();
while(rs.next()) {
//每执行一次循环体,就获取到了一条记录,获取记录的字段值
int id =rs.getInt(1);
System.out.println("id = "+id);
String name = rs.getString(2);
System.out.println("name = "+ name);
String sex = rs.getString(3);
System.out.println("sex = "+sex);
int age = rs.getInt(4);
System.out.println("age = "+ age);
}
}
结果:
按照字段名获取
while(rs.next()) {
//每执行一次循环体,就获取到了一条记录,获取记录的字段值
//如果有别名,此处应该使用别名
int id =rs.getInt("id");
System.out.println("id = "+id);
String name = rs.getString("name");
System.out.println("name = "+ name);
String sex = rs.getString("sex");
System.out.println("sex = "+sex);
int age = rs.getInt("age");
System.out.println("age = "+ age);
}
//执行DDL和DML的方法(没有结果集的)
//DDL返回值为0 DML返回受影响的行数
int rowCount=statement.executeUpdate(sql);
//执行有结果集的方法(查询)
rs =statement.executeQuery(sql);