MySQL的JDBC编程(Java)
1.创建项目
2.2.引入依赖~ JDBC编程需要用到mysql的驱动包. (驱动包就是把mysql自身的api给转换成jdbc风格的.)驱动包是mysql官方提供的.
1)下载驱动包,可以去mysql官方网站下载,但是最好的选择可以去maven中央仓库来下载.
地址: Maven Repository: mysql jdbc (mvnrepository.com)
2)导入到项目中
a)创建个目录,随便起个名字,例如叫做lib
b)把刚才下载的jar文件拷贝到刚才的目录中~
c)右键刚才的目录,有一个选项,叫做add as library
点击这个选项,才能把这个jar
引入到项目中.此时项目才会从jar
里面读取内部的.class
.否则,代码就找不到jar中的一些类了
扫描二维码关注公众号,回复:
14673066 查看本文章
2.编写代码
1)插入数据操作
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
* JDBC编程 初始模板1
* DriverManager这种写法,相比于DataSource来说,没有DataSource好用~~
* 体现的一个关键要点DataSource内置了连接池~~在频繁创建/断开连接的时候,
* 这里的DataSource就要比DriverManager的方式更加高效~
*/
public class TestJDBC {
public static void main(String[] args) throws SQLException {
//1.创建好数据源
DataSource dataSource = new MysqlDataSource();
//这个写法是向下转型,相关参数的类型也是DataSource类型,将来转换数据库代码几乎不用改动
//设置数据库所在的地址
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java_0514?characterEncoding=utf8&useSSL=false");
//设置登录数据库的用户名
((MysqlDataSource) dataSource).setUser("root");
//设置登录数据库的密码
((MysqlDataSource) dataSource).setPassword("tu110");
//2.让代码和数据库服务器建立连接
Connection connection = dataSource.getConnection();
//3.操作数据库,以插入数据为例
// 关键所在就是构造一个SQL语句,在JDBC中构造SQL可以不带上';', ';'只是在命令行中用来区分不同的语句
String sql = "insert into student1 values(1, '张三')";
//此处光是一个String类型的sql还不行,需要把这个String包装成一个"语句对象"
PreparedStatement statement = connection.prepareStatement(sql);
//4.执行SQL
// SQL里面如果是 insert, update, delete都是用executeUpdate方法
// SQL里面如果是 select, 则使用 executeQuery方法
// 返回值就表示这个操作影响到了几行(相当于控制台里执行完SQL命令后返回的数值一样)
int ret = statement.executeUpdate();
System.out.println(ret);
//5.此时SQL已经执行完毕后,需要释放资源(先创建的后释放,后创建的先释放)
statement.close();
connection.close();
}
}
上面代码插入的数据是固定的,改进一下由用户手动输入数据
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
/**
* JDBC编程 初始模板2
* 数据不写死,让用户灵活输入数据
*/
public class TestJDBC2 {
public static void main(String[] args) throws SQLException {
Scanner scanner = new Scanner(System.in);
//1.创建好数据源
DataSource dataSource = new MysqlDataSource();
//这个写法是向下转型,相关参数的类型也是DataSource类型,将来转换数据库代码几乎不用改动
//设置数据库所在的地址
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java_0514?characterEncoding=utf8&useSSL=false");
//设置登录数据库的用户名
((MysqlDataSource) dataSource).setUser("root");
//设置登录数据库的密码
((MysqlDataSource) dataSource).setPassword("tu110");
//2.让代码和数据库服务器建立连接
Connection connection = dataSource.getConnection();
/*System.out.print("你要插入几条数据:");
int n = scanner.nextInt();*/
//2.1让用户通过控制台输入一下待插入的数据
System.out.print("请输入学号: ");
int id = scanner.nextInt();
System.out.print("请输入姓名: ");
String name = scanner.next();
//3.操作数据库,以插入数据为例
// 关键所在就是构造一个SQL语句,在JDBC中构造SQL可以不带上';', ';'只是在命令行中用来区分不同的语句
//String sql = "insert into student1 values(1, '张三')";
//使用?告诉java程序目前还不知道字段的值,先占个位置
String sql = "insert into student1 values(?,?)";
//此处光是一个String类型的sql还不行,需要把这个String包装成一个"语句对象"
PreparedStatement statement = connection.prepareStatement(sql);
//对?进行替换操作
statement.setInt(1, id);
statement.setString(2, name);
System.out.println("statement" + statement);
//4.执行SQL
// SQL里面如果是 insert, update, delete都是用executeUpdate方法
// SQL里面如果是 select, 则使用 executeQuery方法
// 返回值就表示这个操作影响到了几行(相当于控制台里执行完SQL命令后返回的数值一样)
int ret = statement.executeUpdate();
System.out.println(ret);
//5.此时SQL已经执行完毕后,需要释放资源(先创建的后释放,后创建的先释放)
statement.close();
connection.close();
}
}
2)删除操作
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
/**
* JDBC编程的删除操作
*/
public class TestJDBCDelete {
public static void main(String[] args) throws SQLException {
Scanner scanner = new Scanner(System.in);
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java_0514?characterEncoding=utf8&useSSL=false");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("tu110");
Connection connection = dataSource.getConnection();
System.out.print("请输入要删除的id: ");
int id = scanner.nextInt();
String sql = "delete from student1 where id = ?";
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, id);
System.out.println("statement" + statement);
int ret = statement.executeUpdate();
System.out.println("ret= " + ret);
statement.close();
connection.close();
}
}
3)修改操作
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;
/**
* JDBC编程修改操作
* 根据用户输入的Id来修改对应的名字
*/
public class TestJDBCUpdate {
public static void main(String[] args) throws SQLException {
Scanner scanner = new Scanner(System.in);
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java_0514?characterEncoding=utf8&useSSL=false");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("tu110");
Connection connection = dataSource.getConnection();
System.out.print("请输入要修改的学生id: ");
int id = scanner.nextInt();
System.out.print("请输入学生名字: ");
String name = scanner.next();
String sql = "update student1 set name = ? where id = ?";
PreparedStatement statement= connection.prepareStatement(sql);
statement.setString(1,name);
statement.setInt(2,id);
System.out.println("statement" + statement);
int ret = statement.executeUpdate();
System.out.println("ret " + ret);
statement.close();
connection.close();
}
}
4)查询操作
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* JDBC编程的查询操作
*/
public class TestJDBCSelect {
public static void main(String[] args) throws SQLException {
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java_0514?characterEncoding=utf8&useSSL=false");
((MysqlDataSource) dataSource).setUser("root");
((MysqlDataSource) dataSource).setPassword("tu110");
Connection connection = dataSource.getConnection();
String sql = "select * from student1";
PreparedStatement statement = connection.prepareStatement(sql);
//执行SQL的查询操作,就需要使用executeQuery
//查询操作返回的不是int而是一个"临时表",使用ResultSet表示这个表
ResultSet resultSet = statement.executeQuery();
//遍历结果集合(返回的临时表),先获取每一行,在获取每一行中的若干列
//next()方法表示获取到一行的记录,同时把光标往后移动一行
//如果遍历到表的结束位置都没找到,则会返回false
// +------+--------+
// | id | name |
// +------+--------+
// | 1 | 张三 |
// | 2 | 赵六 |
// | 3 | 王五 |
// | 1 | 张三 |
// +------+--------+
while(resultSet.next()){
//固定写法,不可以for each来遍历
//针对当前这一行来获取当前的列
int id = resultSet.getInt("id");
String name = resultSet.getString("name");
System.out.println("id= " + id + ", name= " + name);
}
//释放资源
resultSet.close();
statement.close();
connection.close();
}
}