JDBC连接MySQL数据库
- 导入jar包,根据安装的MySQL版本,选择导入不同版本的jar包,常用的有MySQL5的jar:mysql-connector-java-5.1.7-bin.jar。可以根据自己安装的MySQL版本到Maven仓库中下载。
- 加载驱动,一般的方法是Class.forNam(“com.mysql.jdbc.Driver”);这是5版本的连接方式,如果是更高版本的话,可能需要将字符串改成"com.mysql.cj.jdbc.Driver"。
- 获取连接对象,使用静态类DriverManager的getConnection(url, user, password)方法获得Connection连接对象,其中,url的为"jdbc:mysql://localhost:3306/数据库名?characterEncoding=utf-8";如果更高版本可能需要设置时区,如url = “jdbc:mysql://localhost:3306/数据库名?characterEncoding=utf-8&serverTimezone=GMT”.
- 获取数据库操作对象,使用连接对象的方法获得preparedStatement 对象。
- 执行SQL语句并获得结果集ResultSet,查询执行的方法为executeQuery(),增删改执行的方法为executeUpdate()。
- 关闭连接。
使用JDBC实现对MySQL的增删改查
查询数据
public class JDBCDemo1 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstt = null;
ResultSet rs = null;
try {
//1.加载驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.管理驱动并获取Connection连接
String url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf-8&serverTimezone=GMT";
String user = "root";
String password = "123456";
conn = DriverManager.getConnection(url, user, password);
//3.通过Connection获取PrepareStatement对象
String sql = "select * from dept limit 0,3";
pstt = conn.prepareStatement(sql);
//4.执行SQL语句得到结果集resultSet
rs = pstt.executeQuery(); //executeQuery() 用于查询
while (rs.next()) {
//(1)按编号获取第几列的数据
System.out.println("(1)" + rs.getInt(1) + " "
+ rs.getString(2) + " "
+ rs.getString(3));
//(2)按列的名称获取指定列的数据,列的名称是逻辑表的名称
System.out.println("(2)" + rs.getInt("deptno") + " "
+ rs.getString("dname") + " "
+ rs.getString("loc"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//5.关闭接口
try {
if (rs != null) {
rs.close();
}
if (pstt != null) {
pstt.close();
}
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
增删改数据
public class JDBCDemo2 {
public static void main(String[] args) {
Connection conn = null;
PreparedStatement pstt = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/test?serverTimezone=GMT&characterEncoding=utf-8";
String user = "root";
String password = "123456";
conn = DriverManager.getConnection(url, user, password);
//增删改SQL
//? 表示占位符,防止SQL注入,在预编译后通过pstt对象给对应的占位符赋值
String sql1 = "insert into user values(?, ?, ?, ?)";
String sql2 = "update user set password = ? where uid = ?";
String sql3 = "delete from user where uid = ?";
pstt = conn.prepareStatement(sql3);
//增
// pstt.setInt(1, 1);
// pstt.setString(2, "xiaohu");
// pstt.setString(3, "123");
// pstt.setInt(4, 1);
//改
// pstt.setString(1, "456");
// pstt.setInt(2, 1);
//删
pstt.setInt(1, 1);
int i = pstt.executeUpdate();
System.out.println("更新了" + i + "条数据");
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (pstt != null){
pstt.close();
}
if (conn != null){
conn.close();
}
} catch (Exception e){
e.printStackTrace();
}
}
}
}