Java 中的 JDBC 的使用方法有哪些?
JDBC 其实一套规范(接口)
数据库厂商需要实现此接口(实现类)--数据库驱动
jdbc 的作用
可以和数据库创建链接
发送 sql 语句
接收返回值,处理结果
api 详解(java.sql 或者 javaX.sql)
DriverManager 类:
管理一组 JDBC 驱动程序的基本服务。
常用方法: registerDriver(Driver):注册驱动
查看 mysql 的 Driver 的时候有下面一段代码:
发现在类加载的时候已经注册过驱动,我们以后只需要把 Driver 加载到内存即可
类.Class
对象.getClass()
Class.forName("全限定名(包名+类名)")
以后开发中我们通过 Class.forName("com.mysql.jdbc.Driver")把驱动注册进去即可.
Connection 接口:
创建语句执行者: Connection
conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/database", "root", "123456");
常用方法:
Statement createStatement():创建 Statement -语句执行者
PreparedStatement prepareStatement(String sql) :创建一个预编译的语句执行对象
CallableStatement prepareCall(String sql) :(了解) 创建一个 CallableStatement 对象来调用数据库存储过程。 Statement 接口(容易产生 sql 注入, 后期使用 PreparedStatement. 后面会有 blog 说明这个问题)
sql 语句执行者:
Statement st=conn.createStatement();
常用方法:
ResultSet executeQuery(String sql) :执行查询语句,返回一个集合
int executeUpdate(String sql) :执行更新 插入 删除语句,返回影响行数.
boolean execute(sql):执行给定的 SQL 语句,该语句可能返回多个结果。
若返回 true ,执行是的查询语句
调用 getResultSet 获取查询结果
若返回 false,执行的是更新 插入 删除语句
调用 getUpdateCount 获取影响的行数
ResultSet 接口
返回的查询结果:
String sql = "...";
ResultSet rs=st.executeQuery(sql);
常用方法:
boolean next() :判断是否有下一条记录,并且移动到下一行
获取内容:getXXX(参数)
参数的写法:
1.字段名称 字符串
2.第几列 从 1 开始
getInt()
getString()
getObject()
实例 JDBCUtil 类的书写
(1)配置文件 jdbc.properties
drivername=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/ddatabaseName
user=root
password=1234
(2)JDBCUtil.java
1 import java.sql.Connection;
2 import java.sql.DriverManager;
3 import java.sql.ResultSet;
4 import java.sql.SQLException;
5 import java.sql.Statement;
6 import java.util.ResourceBundle;
7
8 public class JDBCUtil {
9 //ctrl + shift + x 转成大写
10 //ctrl + shift + y 转成小写
11 static final String DRIVERNAME;
12 static final String URL;
13 static final String USERNAME;
14 static final String PASSWORD;
15
16 static{
17
18 /*通过 ResourceBundle 专门用来加载 properties 文件
19 ResourceBundle bundle=ResourceBundle.getBundle("文件名称");
20
21 通过 bundle.getString(键的名字)
22 String value=bundle.getString("url");
23 */
24
25 ResourceBundle bundle=ResourceBundle.getBundle("jdbc");
26 DRIVERNAME=bundle.getString("drivername");
27 URL=bundle.getString("url");
28 USERNAME=bundle.getString("user");
29 PASSWORD=bundle.getString("password");
30 }
31
32 static{
33 try {
34 Class.forName(DRIVERNAME);
35 } catch (ClassNotFoundException e) {
36 e.printStackTrace();
37 }
38 }
39
40 //获取链接
41 public static Connection getConnection() throws SQLException{
42 return DriverManager.getConnection(URL,USERNAME,PASSWORD);
43 }
44
45 //释放资源
46 public static void closeResource(Connection conn,Statement st,ResultSet rs){
47 if (rs!=null) {
48 try {
49 rs.close();
50 } catch (SQLException e) {
51 e.printStackTrace();
52 }
53 }
54
55 if (st!=null) {
56 try {
57 st.close();
58 } catch (SQLException e) {
59 e.printStackTrace();
60 }
61 }
62
63 if (conn!=null) {
64 try {
65 conn.close();
66 } catch (SQLException e) {
67 e.printStackTrace();
68 }
69 }
70
71 }
72 }
(3)CRUDDemo, 使用 PreparedStatement 方式
1 public class PPCRUDDemo {
2 public static void main(String[] args) {
3 //插入
4 //insert("赵四","123","zhaosi@163.com");
5 //更新
6 //updateByName("赵四","尼古拉斯.赵四");
7 //获取
8 //getByName("尼古拉斯.赵四");
9 //删除
10 deleteByName("尼古拉斯.赵四");
11 }
12
13 private static void deleteByName(String string) {
14 //模版
15 Connection conn=null;
16 PreparedStatement st=null;
17 ResultSet rs=null;
18
19 try {
20 //获取链接
21 conn=JDBCUtil.getConnection();
22 //编写 sql
23 String sql="delete from user where username =?";
24 //获取预编译执行者
25 st=conn.prepareStatement(sql);
26 //设置参数
27 st.setString(1, string);
28 //执行 sql
29 int i = st.executeUpdate();
30 //处理结果
31 if (i>0) {
32 System.out.println("成功");
33 }else{
34 System.out.println("失败");
35 }
36 } catch (Exception e) {
37 e.printStackTrace();
38 }finally{
39 //释放资源
40 JDBCUtil.closeResource(conn, st, rs);
41 }
42
43 }
44
45 private static void getByName(String string) {
46
47 Connection conn=null;
48 PreparedStatement st=null;
49 ResultSet rs=null;
50
51 try {
52 conn=JDBCUtil.getConnection();
53 String sql="select * from user where username=? limit 1";
54 st=conn.prepareStatement(sql);
55
56 st.setString(1, string);
57 rs=st.executeQuery();
58 if (rs.next()) {
59 System.out.println(rs.getInt(1)+":"+rs.getString(2)+":"+rs.getObject(3)+":"+rs.getObject(4));
60 }
61 } catch (Exception e) {
62 // TODO: handle exception
63 e.printStackTrace();
64 }finally{
65
66 JDBCUtil.closeResource(conn, st, rs);
67 }
68
69 }
70
71 private static void updateByName(String oldName, String newName) {
72 Connection conn=null;
73 PreparedStatement st=null;
74 ResultSet rs=null;
75
76 try {
77 conn=JDBCUtil.getConnection();
78 String sql="update user set username = ? where username = ?";
79 st=conn.prepareStatement(sql);
80 st.setString(1, newName);
81 st.setString(2, oldName);
82
83 int i=st.executeUpdate();
84 //处理结果
85 if (i>0) {
86 System.out.println("成功");
87 }else{
88 System.out.println("失败");
89 }
90
91 } catch (Exception e) {
92 e.printStackTrace();
93 }finally{
94 JDBCUtil.closeResource(conn, st, rs);
95 }
96
97
98 }
99
100 private static void insert(String username, String password, String email) {
101 Connection conn=null;
102 PreparedStatement st=null;
103 ResultSet rs=null;
104
105 try {
106 //获取链接
107 conn=JDBCUtil.getConnection();
108 //编写 sql
109 String sql="insert into user values(null,?,?,?)";
110 //获取预编译语句执行者
111 st=conn.prepareStatement(sql);
112 //设置参数
113 st.setString(1, username);
114 st.setString(2, password);
115 st.setString(3, email);
116 //执行 sql
117 int i=st.executeUpdate();
118 //处理结果
119 if (i>0) {
120 System.out.println("成功");
121 }else{
122 System.out.println("失败");
123 }
124 } catch (Exception e) {
125 e.printStackTrace();
126 }finally{
127 JDBCUtil.closeResource(conn, st, rs);
128 }
129 }
130
131 }
这里没有多么高深的东西在,都要靠熟能生巧!
评论