一、关于JDBC
JDBC:就是一组类和方法,掌握了JDBC就可以操作所有的数据库
就像在学校可能会遇到“统计同学信息”这样的情况,每个班的班长统计出来的格式都不一样,班主任就约定号一个固定的格式,让各个班班长都按照这个格式来统计
这里的JDBC就相当于这个固定格式
二、JDBC的使用
1、插入操作
前提:
先在MySQL中创建一个java102的数据库,
在java102里创建一个student表,student里包含的类型有id和name
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource; import javax.sql.DataSource;// javax.sql JDBC提供的类和方法都在这个包里,其中DataSource就是其中的一个重要的类(接口) import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; public static void main(String[] args) throws SQLException {//getConnection建立连接失败就会抛出异常 //1、创建好数据源,相当于描述了菜鸟驿站的位置 DataSource dataSource=new MysqlDataSource();//DataSource是JDBC自带的接口,MysqlDataSource是来自于下载好的jar包,里面提供的一个实现DataSource接口的类 //设置数据库所在地址 ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java102?characterEncoding=utf8&useSSL=false"); //设置登陆数据库的数据名 ((MysqlDataSource)dataSource).setUser("root");//都是root //设置登陆数据库的密码 ((MysqlDataSource)dataSource).setPassword("111111");//数据库密码 //2、让代码和数据库建立连接,相当于到了菜鸟驿站 Connection connection= dataSource.getConnection();//Connection一定是JDBC的Connection->import java.sql.Connection; //3、操作数据库, //插入数据 //构造一个SQL语句 //在JDBC中构造SQL不必带上; //;只是在命令行中用来区分不同的语句,现在是直接在代码中操作 String sql="insert into student values(1,'张三')"; //此处光是一个String类型的sql还不行,需要把这个String包装成一个“语句对象” PreparedStatement statement=connection.prepareStatement(sql);//把字符串风格的sql转成了一个JDBC里面的对象 //4、执行SQL,相当于扫码取件 //SQL里面如果是insert,update,delete,都使用executeUpdate方法 //SQL里面如果是sekect,则使用executeQuery方法 //返回值表示这个操作,影响到了几行,就相当于在控制台里输入sql之后,得到的数字 int ret = statement.executeUpdate(); System.out.println(ret); //5、此时SQL已经执行完毕,还需要释放资源 statement.close();//后创建的先释放 connection.close();//先创建的后释放 }
执行之后在MySQL中查看表,发现已经插入进
2、灵活的处理插入操作
因为上面的插入的数据是将一条指定的插入语句写死,每次插入都只能插入一样的,要想实现每次插入的都是可以改变的需要做出如下调整
public static void main(String[] args) throws SQLException {//getConnection建立连接失败就会抛出异常 //1、创建好数据源,相当于描述了菜鸟驿站的位置 DataSource dataSource=new MysqlDataSource(); //设置数据库所在地址 ((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java102?characterEncoding=utf8&useSSL=false"); //设置登陆数据库的数据名 ((MysqlDataSource)dataSource).setUser("root");//都是root //设置登陆数据库的密码 ((MysqlDataSource)dataSource).setPassword("111111");//数据库密码 //2、让代码和数据库建立连接,相当于到了菜鸟驿站 Connection connection= dataSource.getConnection(); //让用户通过控制台输入一下待插入的数据 Scanner scanner=new Scanner(System.in); System.out.println("请输入学号:"); int id=scanner.nextInt(); System.out.println("请输入姓名:"); String name=scanner.next(); //3、操作数据库, String sql="insert into student values(?,?)"; PreparedStatement statement=connection.prepareStatement(sql); //执行替换操作 statement.setInt(1,id);//下标从1开始计算,将下标为1的?替换为id的值 statement.setString(2,name);//将下标为2的?替换为name的值 System.out.println("statement:"+statement);//打印一下,看看拼好的sql长什么样子 //4、执行SQL,相当于扫码取件 int ret = statement.executeUpdate(); System.out.println(ret); //5、此时SQL已经执行完毕,还需要释放资源 statement.close();//后创建的先释放 connection.close();//先创建的后释放 }
执行后手动分别输入要插入的数据
如果想一次插入多条:
然后再执行替换
3、删除操作
public static void main(String[] args) throws SQLException {
//删除数据库中的记录
//让用户输入一个id,根据id来删除
//1、创建数据源
DataSource dataSource=new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java102?characterEncoding=utf8&useSSL=false")
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("111111");
//2、建立连接
Connection connection=dataSource.getConnection();
//3、用户输入id
Scanner scanner=new Scanner(System.in);
System.out.println("请输入一个要删除的id:");
int id=scanner.nextInt();
//4、拼装sql语句
String sql="delete from student where id=?";
PreparedStatement statement=connection.prepareStatement(sql);
statement.setInt(1,id);
//5、执行sql
int ret=statement.executeUpdate();
System.out.println("ret="+ret);
//6、回收释放资源
statement.close();
connection.close();
}
4、修改操作
public static void main(String[] args) throws SQLException {
//根据id来修改学生姓名,让用户输入要修改的id,以及对应的修改后的名字
//1、创建数据源
DataSource dataSource=new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java102?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("111111");
//2、和数据源建立连接
Connection connection=dataSource.getConnection();
//3、输入信息
Scanner scanner=new Scanner(System.in);
System.out.println("请输入要修改学生id:");
int id=scanner.nextInt();
System.out.println("请输入要修改的学生姓名");
String name=scanner.next();
//4、拼装sql
String sql="update student set name=?where id=?";
PreparedStatement statement=connection.prepareStatement(sql);
statement.setString(1,name);
statement.setInt(2,id);
System.out.println("ststement:"+statement);
//5、执行sql
int ret=statement.executeUpdate();
System.out.println("ret="+ret);
//6、回收资源
statement.close();
connection.close();
}
5、查找操作(需要对结果进行遍历)
public static void main(String[] args) throws SQLException {
//1、创建数据源
DataSource dataSource=new MysqlDataSource();
((MysqlDataSource)dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java102?characterEncoding=utf8&useSSL=false");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("111111");
//2、建立连接
Connection connection=dataSource.getConnection();
//3、拼装sql
String sql="select*from student";
PreparedStatement statement=connection.prepareStatement(sql);
//4、执行sql,对于查询操作使用executeQuery()
//查询操作返回的不是一个int,是一个临时表
//使用resultSet表示这个表
ResultSet resultSet=statement.executeQuery();
//5、遍历结果集合(返回的临时表),先获取每一行,再获取到杂贺一航中的若干列
// next方法表示获取到一行记录,同时把光标往后移一行
//如果遍历到表的结束位置,此处的naxt直接返回false
/*+------+--------+
| id | name |
+------+--------+
| 2 | 赵六 |
| 3 | dd |
+------+--------+
*/
while(resultSet.next()){//获取每一行
//针对这一行获取其中的列
int id=resultSet.getInt("id");//获取整数的列
String name=resultSet.getString("name");//获取字符串这样的列
System.out.println("id="+id+",name="+name);
}
//6、释放资源
resultSet.close();
statement.close();
connection.close();
}