jdbc连接数据库主要有以下几个步骤:
1.加载相应数据库的驱动包(到各数据库官网下载)
// 1.加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
2.获取连接
// 2.获取连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
//为了避免出现乱码问题:jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8
3.创建statement或prepareStatement对象
// 3.创建statement对象
stmt = conn.createStatement();
// pstmt = conn.prepareStatement(sql);预编译sql语句
// pstmt.setString(1,var1);注意参数从1开始
这里说明一下prepareStatement与statement的区别:
- PreparedStatement可以写动态参数化的查询
- PreparedStatement可以防止SQL注入式攻击
- PreparedStatement比 Statement 效率更好
4.执行sql语句
// 4.执行sql语句
String sql = "SELECT `id`,`name` FROM `pet`";
rs = stmt.executeQuery(sql);
这里简单说明一下execute(),executeQuery(),executeUpdate()
- execute():可用于执行任何SQL语句,返回一个boolean值,表明执行该SQL语句是否返回了ResultSet。如果执行后第一个结果是ResultSet,则返回true,否则返回false。
- executeQuery():这个方法被用来执行 SELECT 语句,但也只能执行查询语句,执行后返回代表查询结果的ResultSet对象。
- executeUpdate():用于执行 INSERT、UPDATE 或 DELETE 语句以及 SQL DDL(数据定义语言)语句。executeUpdate 的返回值是一个整数(int),指示受影响的行数(即更新计数)。对于 CREATE TABLE 或 DROP TABLE 等不操作行的语句,executeUpdate 的返回值总为零。
5.处理ResultSet的结果
// 5.处理ResultSet的结果
while(rs.next()){
System.out.print(rs.getInt("id"));
System.out.println(rs.getString("name"));
}
6.关闭连接
// 6.关闭连接
if (conn != null) {
conn.close();
}
完整代码如下:
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
// 1.加载驱动
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
// 2.获取连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "root", "root");
// 3.创建statement对象
stmt = conn.createStatement();
// 4.执行sql语句
String sql = "SELECT `id`,`name` FROM `pet`";
rs = stmt.executeQuery(sql);
// 5.处理ResultSet的结果
while(rs.next()){
System.out.print(rs.getInt("id"));
System.out.println(rs.getString("name"));
}
// 6.关闭连接
if (conn != null) {
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}