版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiaojie119120/article/details/73123759
这几天正好在学oracle数据库,而且我发现我已经忘了jdbc连接数据库的步骤了,所以写篇博客记录一下。这里使用Oracle数据库驱动,MySQL类似。
jdbc连接数据库六步:
- 加载驱动
- 获取数据库连接
- 创建statement
- 执行SQL语句
- 获取结果集
- 释放资源(关闭statement和连接)
贴上代码:
//1、加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//2、获取数据库连接
String url = "jdbc:oracle:thin:@localhost:1521:XE";
String user = "xiaojie119120";
String password = "xiaojie119120";
Connection conn = DriverManager.getConnection(url,user,password);
//3、创建statement
Statement st = conn.createStatement();
//4、执行SQL语句
String sql = "select * from db_test";
ResultSet rs = st.executeQuery(sql);
//5、获取结果集
List<User> users = new ArrayList<User>();
User u = null;
while (rs.next()){
u = new User();
u.setId(rs.getInt("id"));
u.setInfo(rs.getString("info"));
users.add(u);
}
System.out.println(users);
//6、释放资源(关闭statement和连接)
st.close();
conn.close();
以上是使用Statement执行SQL语句,Statement传递参数是靠拼接字符串的,这会导致sql注入,所以最好采用PreparedStatement,代码如下:
//1、加载驱动
Class.forName("oracle.jdbc.driver.OracleDriver");
//2、获取数据库连接
String url = "jdbc:oracle:thin:@localhost:1521:XE";
String user = "xiaojie119120";
String password = "xiaojie119120";
Connection conn = DriverManager.getConnection(url,user,password);
//3、创建statement
String sql = "select * from db_test where id=?";
PreparedStatement pst = conn.prepareStatement(sql);
pst.setString(1, "1");
//4、执行SQL语句
ResultSet rs = pst.executeQuery();
//5、获取结果集
List<User> users = new ArrayList<User>();
User u = null;
while (rs.next()){
u = new User();
u.setId(rs.getInt("id"));
u.setInfo(rs.getString("info"));
users.add(u);
}
System.out.println(users);
//6、释放资源(关闭statement和连接)
pst.close();
conn.close();
两者区别如下:
1>PreparedStatement用于处理动态SQL语句,在执行前会有一个预编译过程,这个过程是有时间开销的,虽然相对数据库的操作,该时间开销可以忽略不计,但是PreparedStatement的预编译结果会被缓存,下次执行相同的预编译语句时,就不需要编译,只要将参数直接传入编译过的语句执行代码中就会得到执行,所以,对于批量处理可以大大提高效率。
2>Statement每次都会执行SQL语句,相关数据库都要执行SQL语句的编译。
作为开发者,应该尽可能以PreparedStatement代替Statement,其原因如下:
(1)可以提高代码的可读性和可维护性。;
(2)PreparedStatement能够尽最大可能提高性能。
(3)PreparedStatement极大的提高了安全性(防止SQL注入)。