JDBC连接MySql的几个主要步骤:
1. 导入外部驱动包
mysql-connector-java-8.0.18.jar
2. 加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
3. 获取数据库连接对象(Connection)
//数据库连接信息
//(报时区错误的解决办法:url + ”&serverTimezone=GMT%2B8”)
String url = "jdbc:mysql://localhost:3306/test?characterEncoding=UTF-8";
String user = "root";
String password = "1";
Connection connection = DriverManager.getConnection(url,user,password);
url :
localhost(代表本机ip,如连接其他电脑上的数据库,请改变ip)
3306(数据库端口号)
test(数据库名)
UTF-8(编码格式)
4. 创建SQL语句操作对象(PreparedStatement)
String sql = "select * from student";
PreparedStatement ps = connection.prepareStatement(sql);
PreparedStatement是Statement的子接口
PreparedStatement的优点:
- 效率高
使用PreparedStatement执行SQL命令时,命令会被数据库编译和解析,并放到命令缓冲区.以后每当执行同一个 PreparedStatement对象时,预编译的命令就可以重复使用- 代码可读性和可维护性好
- 安全性好
使用PreparedStatement可以防止SQL注入
5. 执行查询语句并获取结果集(ResultSet)
ResultSet rs = ps.executeQuery();
//遍历结果集
while (rs.next()) {
System.out.println(rs.getInt(1) + rs.getString(2) + rs.getInt(3));
}
除了查询语句是executeQuery();其他全部是executeUpdate();
Statement接口下的方法:
boolean execute(String sql) : 执行SQL语句,如果返回值是结果集则为true,否则为false
ResultSet executeQuery(String sql) : 执行SQL语句,返回值为ResultSet
int executeUpdate(String sql) : 执行SQL语句,返回值为所影响的行数
6. 关闭连接
connection.close();
ps.close();
rs.close();
增删改核心代码:
//增加记录
String sql_2 = "insert into student(id,name,age) values(?,?,?)";
PreparedStatement ps_2 = connection.prepareStatement(sql_2);
ps_2.setInt(1, 3);
ps_2.setString(2, "王五");
ps_2.setInt(3,22);
//更新数据库,返回受影响行数
int row_2 = ps_2.executeUpdate();
System.out.println("受影响的行数:"+ row_2);
//删除记录
String sql_3="delete from student where id=1";
PreparedStatement ps_3 = connection.prepareStatement(sql_3);
//更新数据库,返回受影响行数
int row_3 = ps_3.executeUpdate(sql_3);
System.out.println("受影响的行数:"+ row_3);
//修改记录
String sql_4 = "update student set age = ? where name = ?";
PreparedStatement ps_4 = connection.prepareStatement(sql_4);
ps_4.setInt(1,20);
ps_4.setString(2,"张三");
//更新数据库,返回受影响行数
int row_4 = ps_4.executeUpdate();
System.out.println("受影响的行数:"+ row_4);