JDBC
JDBC(全称:Java Data Base Connectivity)是java数据库连接简称 ,提供连接各种数据库的能力。
JDBC API主要的功能:
- 与数据库建立连接
- 执行SQL语句
- 处理结果
JDBC关键字的使用:
- DriverManager:依据数据库选择驱动
- Connection:负责连接数据库并传达数据库的任务
- Statement:由Connection产生、负责执行SQL语句
- ResultSet:负责保存Statement执行后产生的查询结果
- PreparedStatement接口:预编译SQL语句,提高SQL语句性能、代码安全性、可读性和可维护性
Statement常用方法:
- ResultSet executeQuery(String sql):执行SQL查询并且获取ResultSet对象
- Int executeUpdate(String sql):可以执行插入、删除、更新等操作,返回值是执行该操作所影响的行数
- Boolean execute(String sql):可以执行任意SQL语句,然后获得一个布尔值,表示是否返回ResultSet
- Void close():关闭ResultSet对象
PreparedStatement比Statement提高了代码的可读性和可维护性,提高了SQL语句执行的性能,提高了安全性
JDBC的操作步骤:
- 加载JDBC驱动
- 与数据库建立连接
- 创建Statement或PreparedStatement对象
- 执行SQL语句,返回结果
- 处理返回结果
- 释放资源
//驱动类
private static String driver="com.mysql.jdbc.Driver";
//数据库连接字符串
private static String url="jdbc:mysql://localhost:3306/school";
//数据库登录账户
private static String name="root";
//登录密码
private static String pwd="mysql";
//定义连接对象
private static Connection conn=null;
//打开数据库连接的方法
public static Connection getconn(){
//判断连接是否存在
if(conn==null){
//加载驱动
try {
Class.forName(driver);
//获取连接
conn=DriverManager.getConnection(url,name,pwd);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
return conn;
}
//关闭资源的方法
public static void close(PreparedStatement ps,ResultSet res){
try {
//判断对象是否不为空
if (res != null) {
res.close();
}
if (ps != null) {
ps.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {//close
e.printStackTrace();
}
}
查询语句代码示例:
public static void main(String[] args) {
//查询:请用户输入学生的姓名和年级编号 查询学生的相关信息
Scanner input=new Scanner(System.in);
System.out.println("请输入要查询的学生姓名(支持模糊查询):");
String name=input.next();
System.out.println("请输入要查询的学生的年级编号:");
int gid=input.nextInt();
//1.定义需要的对象
PreparedStatement ps=null;
ResultSet res=null;
try {
//2.定义sql
String sql = "select studentno,studentname from student where studentname like ? and gradeid=?";
//3.获取ps对象
ps = BaseDao.getconn().prepareStatement(sql);
//4.替换展位符
ps.setString(1, "%"+name+"%");
ps.setInt(2,gid);
//5.执行sql
res=ps.executeQuery();
//6.借助循环读取数据
while (res.next()) {
System.out.println(res.getInt(1)+"\t"+res.getString(2));
}
} catch (SQLException e) {
e.printStackTrace();
}
finally{
BaseDao.close(ps, res);
}
}
增删改语句代码示例(增):
public static void main(String[] args) {
//向科目表中添加数据
Scanner input=new Scanner(System.in);
System.out.println("请输入科目名称");
String name=input.next();
System.out.println("请输入课时数量:");
int ks=input.nextInt();
System.out.println("请输入年级编号:(1/2/3)");
int gid=input.nextInt();
//1.定义需要的对象
PreparedStatement ps=null;
try {
//2.创建sql
String sql="insert into subjectt values(null,?,?,?)";
//3.创建ps
ps=BaseDao.getconn().prepareStatement(sql);
//4.替换占位符
ps.setString(1,name);
ps.setInt(2, ks);
ps.setInt(3, gid);
//5.执行sql
int num=ps.executeUpdate();
//6.判断结果
if (num>0) {
System.out.println("增加成功!");
} else {
System.out.println("增加失败!");
}
} catch (SQLException e) {
e.printStackTrace();
}
finally{
BaseDao.close(ps,null);
}
}