java中的jdbc
来源:互联网 发布:服务器坏了 raid 数据 编辑:程序博客网 时间:2024/05/18 00:58
java中的jdbc
最基本的链接数据库的方式:贾琏预执事
1. 贾 加载数据库驱动
2. 琏 创建链接对象
3. 预 创建语句对象
4. 执 执行sql语句
5. 事 释放资源
//加载数据库驱动 (贾) Class.forName("com.mysql.jdbc.Driver"); //创建链接对象 参数是String类型 (琏) Connection conn = new Connection(URL,uesr,password); //创建预处理对象 语句对象 (预) PreparedStatement ps = null; ps = conn.prepareStatement(sql); ps.setInt(1, studen.getId()); ps.setString(2, studen.getName()); ps.setInt(3, studen.getAge()); //执行sql (执) ps.executeUpdate(); ps.close(); conn.close();
再加载数据库驱动时会抛出:ClassNotFoundException
创建对象,释放资源时会抛出:SQLException
jdbcUtil工具类的创建:
注意:每次操作数据库都要加载数据库,创建何释放资源 ,
抽取出数据库操作的链接和释放资源 解除代码中的硬编码 URL ,userName,password
properties 文件以key和values的形式存储数据 空格也会被储存;
以MySQL为例:
#key=valres(注释)driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/databaseNameusername=rootpassword=admin
注意:当用到 链接池 时properties 文件中的key 必须对应相应的属性 即key值是固定的
public class jdbcUtil { private static DataSource ds = null;//创建链接池对象 static{ Properties p = new Properties();//创建properties文件对象 try { ClassLoader loader = Thread.currentThread().getContextClassLoader(); InputStream inputStream = loader.getResourceAsStream("ds.Properties"); p.load(inputStream); } catch (Exception e) { throw new RuntimeException("文件加载失败", e); } try { //使用druid(德鲁伊)连接池创建一个链接池对象 参数:properties文件对象 ds = DruidDataSourceFactory.createDataSource(p); } catch (Exception e) { throw new RuntimeException("连接池失败", e); } } /** * 用DataSource创建一个Connection对象并返回 * @return */ public static Connection getConn() { try { // 连接数据库 Connection connection = ds.getConnection();//得到一个connection对象 return connection; } catch (SQLException e) { e.printStackTrace(); } return null; } //释放资源 public static void close(ResultSet rs, Statement st, Connection conn) { try { if (rs != null) { rs.close(); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (st != null) { try { if (st != null) { st.close(); } } catch (Exception e) { e.printStackTrace(); } finally { try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } } //防止创建对象 private jdbcUtil() {}}
创建公用的DML模板
DML 指的是MySQL中的增删改操作 它们都不需要处理结果集;
所以可以将它们抽出一个相同的模版出来
//参数的type和value由调用者确定public int dmlUtil(String sql,Object...obj){ try{ Connection conn= jdbcUtil.getConn(); PreparedStatement ps = conn.prepareStatement(sql); for(int i = 0;i<obj.length;i++){ ps.setObject(i+1,obj[i]); } int rows = ps.executeUpdate(); return rows; }catch (SQLException e) { e.printStackTrace(); } return 0;}
DQL指的是sql中的查询操作,不同于DML ,DQL需要处理结果集
DQL返回的数据有可能是一行,也有可能是多行
但是其处理结果集的方式是一样的;
这里以最基本的查询select*from tb_table;,select*from tb_table where id = 1;
结果集处理(处理一行):
public class ResultSetHandler { public static <T> T ResultSet(Class<T> classType,ResultSet rs) throws Exception{ T t = classType.newInstance(); try { // 通过内行机制 给给对像赋值 BeanInfo info = Introspector.getBeanInfo(classType, Object.class); PropertyDescriptor[] pds = info.getPropertyDescriptors(); for (PropertyDescriptor pd : pds) { String propertName = pd.getName();//得到 属性名 字段名 成员变量的名字 propertName="id"; Method wMethod = pd.getWriteMethod(); wMethod.invoke(t,rs.getObject(propertName)); } return t; } catch (SQLException e) { e.printStackTrace(); } return null; }}
返回多条的 查询:
public static <T> List<T> DQLsTemplate(String sql, Class<T> classType) throws Exception{ T t = classType.newInstance(); List<T> list = new ArrayList<>(); Connection conn = jdbcUtil.getConn(); PreparedStatement ps; try { ps = conn.prepareStatement(sql); ResultSet rs = ps.executeQuery(); while (rs.next()) { t = ResultSetHandler.ResultSet(classType, rs); list.add(t); } jdbcUtil.close(rs, ps, conn); return list; } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }
返回一条 查询:
public int DQLTemplate(String sql,Object...obj){ try{ Connection conn = jdbcUtil.getConn(); PreparedStatement ps = conn.prepareStatement(sql); for(int i = 0;i<obj.length;i++){ ps.setObject(i+1,obj[i]); } int rows = ps.executeUpdate(); return rows; }catch (SQLException e) { e.printStackTrace(); } return 0; }
阅读全文
0 0
- 【Java】Java中的JDBC
- java中的jdbc编程
- java中的JDBC
- 浅谈Java中的jdbc
- java中的jdbc
- Java中的JDBC是怎么回事?
- Java中的jdbc连sqlserver
- Java中的JDBC数据库操作
- Java中的JDBC驱动类型
- java 中的 jdbc 中的数据库查询
- Java SE 6中的JDBC 4.0增强
- Java SE 6中的JDBC 4.0增强
- Java SE 6中的JDBC 4.0增强
- Java SE 6中的JDBC 4.0增强
- Java SE 6中的JDBC 4.0增强
- Java SE 6中的JDBC 4.0增强
- Java SE 6中的JDBC 4.0增强
- Java中的JDBC常用的连接字符串
- C++静态库与动态库
- HOJ 1004 回文素数
- Training Set
- android多渠道,多环境打包
- 傻杯1.0
- java中的jdbc
- java中的内存泄漏
- HDU-6249-Alice’s Stamps
- RevitAPI之创建文字和注释【比目鱼原创】
- hdu 5510 KMP+暴力
- [DP] TopCoder SRM548 Div1 450. KingdomAndDice
- 微信公众号插入地图及地图搜索资源的前端处理(坐标系转码,自动定位等业务实现)
- 剑指offer—构建乘积数组
- 服务器端的应用及服务,监控管理