一.数据库整体
0.总体概括
1.示意图
二.数据库连接
1.数据库连接描述
2.描述
导入java.sql的驱动的包
①通过读取配置信息来获取用户信息和驱动信息
InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties pros = new Properties();
pros.load(is);
String user = pros.getProperty("user");
String password = pros.getProperty("password");
String url = pros.getProperty("url");
String driverClass = pros.getProperty("driverClass");
②加载驱动并注册
Class.forName(driverClass);
//类的静态代码块注册驱动
③获取连接
Connection conn = DriverManager.getConnection(url, user, password);
三.数据库的增删改查
1.数据库的增删改示意图
- 增删改
- 查询
2.数据库增删改描述
①获取连接(同上)
②利用Connetion获取preparedStatemenr实例
-
获取实例
String sql = "insert into customers(name,email,birth) values(?,?,?)";//?占位符 PreparedStatement ps = conn.prepareStatement(sql);
-
填充占位符
ps.setString(1, "哪吒"); ps.setString(2, "enzha@qq.com"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); java.util.Date date = sdf.parse("1000-01-01"); ps.setDate(3, new Date(date.getTime()));
-
执行操作
ps.execute();
③关闭资源
ps.close();
conn.close();
3.数据库查询描述
①获取连接(同上)
②利用Connetion获取preparedStatemenr实例(同上)
String sql = "select id,name,email,birth from customers where id = ?";
ps = conn.prepareStatement(sql);
ps.setObject(1, 1);
//增删改执行ps.execute无返回,此时需要有返回结果集,调用ps.executeQuery();返回结果集
resultSet = ps.executeQuery();
③处理结果集并赋值给对象
-
通过结果集来访问每条数据
resultSet.next() Object columnvalue = resultSet.getObject(i+1);
-
获取结果集的元数据,通过结果集的元数据获取列数和获取列名,
ResultSetMetaData rsmd = resultSet.getMetaData(); int column = rsmd.getColumnCount(); String columnName = rsmd.getColumnName(index);
-
利用结果集和元数据以及类的反射初始化类属性(整体代码)
ResultSetMetaData rsmd = resultSet.getMetaData(); int column = rsmd.getColumnCount(); if(resultSet.next()){//next作用判断结果集下一条是否发有数据,有数据返回true指针下移,没有数据返回false指针不下移 Customer cust = new Customer(); for(int i = 0;i < column;i++){//处理结果集一行数据的每一个列 //获取列值 Object columnvalue = resultSet.getObject(i+1); //获取结果集中的每个列的列名 String columnName = rsmd.getColumnLable(i+1); //给cust对象指定的某个属性columnName赋值为columnvalue,通过反射 Field field = Customer.class.getDeclaredField(columnName); field.setAccessible(true); field.set(cust, columnvalue); } return cust; }
④关闭资源
rs.close();
ps.close();
conn.close();