1 Jdbc DML 操作
2 Statement:静态SQL操作
3 每次操作都会将sql语句提交到数据库执行一次,性能比较低
4 // 1.加载驱动程序
5 Class.forName(driverName);
6 // 2.获取数据库连接
7 Connection conn = DriverManager.getConnection(url, user, password);
8 // 3.构建SQL语句
9 String sql = "insert into t_user(userid,username,password)values(seq_t_user.nextval,'abc','123456')";
10 // 4.执行SQL语句
11 Statement sts = conn.createStatement();
12 // 返回的结果是影响的行数
13 int count = sts.executeUpdate(sql);
14 System.out.println("影响的行数:" + count);
15 // 5.关闭资源
16 sts.close();
17 conn.close();
18
19
20 Jdbc DML 操作
21 PrepareStatement:动态sql操作 预编译操作
22 优点:性能比Statement高
23 Statement对象能做的操作Preparedstatement都能做
24 Preparedstatement能做的Statement不一定能做
25 通过PrepareStatement对象更新用户数据
26 execute:DDL操作
27 executeUpdate:DML操作
28 executeQuery:DQL操作
29 executeBatch:批量处理 一次性执行多条sql语句
30
31 // 1.加载驱动程序
32 Class.forName(driverName);
33 // 2.获取数据库的连接通道
34 Connection conn = DriverManager.getConnection(url, user, password);
35 // 3.构建SQL语句
36 String sql = "update t_user set password=? where userid=?";
37 // 4.执行sql语句
38 // 获取Statement对象
39 PreparedStatement ps = conn.prepareStatement(sql);
40 ps.setString(1, "hehe");
41 ps.setInt(2, 3);
42 int count = ps.executeUpdate();
43 System.out.println("影响的行数:"+count);
44 // 关闭资源
45 ps.close();
46
47
48 Jdbc查询:
49 // 1.加载驱动程序
50 Class.forName(driverName);
51 // 2.获取数据库连接通道
52 Connection conn = DriverManager.getConnection(url, user, password);
53 // 3.构建SQL语句
54 String sql = "select * from t_user order by userid";
55 // 4.执行SQL语句获取查询结果
56 PreparedStatement ps = conn.prepareStatement(sql);
57 // 执行查询 ResultSet 类似于我们讲的游标 迭代器
58 ResultSet rs = ps.executeQuery();// 其实并没有获取到数据,而是指向了第一条数据之前
59 // 判断是否有下一条记录并把该记录保存到ResultSet对象中
60 while(rs.next()){// 每循环一次取出一条新的记录
61 //int id = rs.getInt("userid");
62 int id = rs.getInt(1); // 通过列的下标取字段内容,从1开始
63 String userName = rs.getString("username");
64 String userPassword = rs.getString("password");
65 System.out.println(id+" "+userName+" "+userPassword);
66 }
67 // 5.关闭相关的资源
68 rs.close();
69 ps.close();
70 conn.close();
71
72
73 批处理:
74 /**
75 * 通过Statement执行批处理操作
76 * 适用于执行多条不同的sql语句
77 * @throws Exception
78 */
79 @Test
80 public void testStatementBatch() throws Exception {
81 conn = DbUtils.getConnection();
82 Statement sts = conn.createStatement();
83 sql1 = "insert into t_user(userid,username,password)values(seq_t_user.nextval,'a','b')";
84 sql2 = "update t_user set password='111' where userid=43";
85 // 添加批处理的sql语句
86 sts.addBatch(sql1);
87 sts.addBatch(sql2);
88 sts.executeBatch();
89 DbUtils.close(sts, conn);
90
91 }
92
93 /**
94 * 通过PreparedStatement对象执行批处理操作
95 * @throws Exception
96 * @throws ClassNotFoundException
97 */
98 @Test
99 public void testPreparedStatement() throws Exception {
100 conn = DbUtils.getConnection();
101 sql = "insert into t_user(userid,username,password)values(seq_t_user.nextval,?,?)";
102 PreparedStatement ps = conn.prepareStatement(sql);
103 /*ps.setString(1, "a1");
104 ps.setString(2, "b1");
105 ps.addBatch();
106 ps.setString(1, "a2");
107 ps.setString(2, "b3");
108 ps.addBatch();*/
109 for(int i = 0 ; i < 10 ; i++){
110 ps.setString(1, "a"+i);
111 ps.setString(2, "b"+i);
112 ps.addBatch();
113 }
114
115 ps.executeBatch();
116 DbUtils.close(ps, conn);
117 }