`

jdbc---JdbcUtils,PreparedStatement,sqlDate,Clob数据

    博客分类:
  • JDBC
阅读更多
static void template(){
   Connection comm = null;
   Statement st = null;
   ResultSet rs = null ; //因为我们是和接口打交道,所以我们这里选的是java.sql.ResultSet这个,我们要接口不要实现

  try{
	   Class.forName("com.mysql.jdbc.Driver"); //驱动只应该注册一次
	   Connection conn = DriverManager.getConnection(url,user,pwd);
   }finally{
   }
   

}

public final class JdbcUtils{ //因为工具类是直接使用的,所以不允许继承,所以写final

    private static String url = "jdbc:mysql://localhost:3306/jdbc";  //能够私有,尽量私有,因为你修改不会对别人造成影响,被人根本就不可能使用你的赛
    private static String user = "root";
    private static String password = "";
    private JdbcUtils(){} //因为工具类是不需要实例的,所以不允许new
    static{
      try{
       Class.forName("com.mysql.jdbc.Driver"); //因为静态代码块只会在加载到jvm中被执行一次,所以我们把只要注册一次的东西放到这里
      }catch(Exception e){
         throw new Exception(e);
      }
    }
    
    public static Connection getConnection(){
        return DriverManager.getConnection(url,user,password);
    }
    
    public static void free(ResultSet rs,Statement st,Connection conn){
       try{
          if(rs != null){//判断空是因为,如果某个地方出错,这里很可能就是空
          rs.close();
        }catch(Exception e){
           
        }finally{
           try{
	           if(st != null)
	           st.close();
           }catch(Exception e){
             
           }finally{
             try{
	              if(conn != null){
	                 conn.close();
	              }
              }catch(Exception e){
              	
              }
           }
        }
        
    }
  
}
ResultSet rs = st.executeQuery(sql);
int i = st.executeUpdate(sql); //这个方法是 insert和update,delete都可以用,是插入和更新语句的通用方法
如果在数据库中插入成功,那么返回1,其实意思是有一条记录受到了改语句的影响
如果是插入呢?
sql = "update user set money = money+10";
int i = st.executeUpdate(sql); //这个i当然也是被影响的行数啦

String sql = "select id,name,money,birthday from user where name ='"+name+"'"; //这样写的毛病
如果 name = " ' or 1 or ' ";那么会把所有的数据都查出来,为什么呢?因为 name=" ",因为两个单引号之间什么也没有,当然是空, 这个当然没有, or 1 表示  or true,这样就把所有的记录都查询出来了
所以拼串很不安全,(但是如果输入的是int ,拼字符串也是可以的)那么怎么办呢?

使用预处理的车子哈。。。他会过滤掉一些系统的保留字,还会对sql做些优化。。,可以解决sql注入哈
PreparedStatement ps = null;
ps = conn.prepareStatement(sql); //这里是在构造这个车子的时候就给他了哈,所以才叫预处理嘛。。
rs = ps.executeQuery(sql); //他是能调用Statement的所有方法。。这个方法就是。。因为PreparedStatement是从Statement继承过来的
rs = ps.executeQuery(); //我们一般用这个

Statement会使数据库频繁编译sql,可能造成数据库缓冲区溢出

所以,只要带有参数的sql,一定要用PreparedStatement,不带参数的就不要用了

java.util.Date date = rs.getDate(); //这个Date是java.sql.Date,而我们通常用的是java.util.Date , 他们的关系是java.sql.Date是继承了java.util.Date
//java.util.Date 是既有日期又有时间的,而java.sql.Date 只有日期没有时间,如果想转行也可以,赋值就可以了
ps.setDate(2,java.sql.Date); //如何将java.util.Date转化成java.sql.Date....  new java.sql.Date(birthday.getTime());----通过毫秒来转

注意:java.sql.Date做了些格式化的工作,所以他们输出的结果是 : 2008-09-24这样的字符串

注意: mysql中的text字段是大的文本串类型,这种大文本的专业术语是: clobText
因为是字符流,当然用字符流的读取器
BufferedReader reader = new BufferedReader(new FileReader(new File("src/cn/itcast/jdbc/JdbcUtils.java")));
ps.setCharacterStream(1,reader,(int)file.length); //使用字符流处理大文本、
或者可以ps.setString(1,new String(buf,0,len)); //可以用字符流,难道还不可以用字符串啊。。。


Writer writer = new BufferedWriter(new FileWriter(new File("XXXX.java")));
Clob clob = rs.getClob(1);//这个可以读取大文本
或者最好是 rs.getString(1); //这样也可以拿出来大文本
Reader reader  = clob.getCharacterStream(); //也可以直接使用rs.getCharacterStream();
char[] buff = new char[1024];
int len;
while((len = reader.read(buff))>0){
   writer.write(buff,0,len);
}
writer.close();
reader.close();
分享到:
评论

相关推荐

    commons-utils简化JDBC使用(文档+示例)

    Apache Commons DBUtils是Java开发中一个非常实用的工具库,它极大地简化了JDBC(Java Database Connectivity)的使用。这个库是Apache Commons项目的一部分,旨在提供一个简单且异常安全的方式来处理数据库操作,...

    jdbc-增删改查和封装增删改查.docx

    在jdbc中,我们可以使用Statement、PreparedStatement和CallableStatement三个接口来执行SQL语句。 jdbc连接数据库 在jdbc中,我们可以使用DriverManager来加载数据库驱动程序,例如mysql的驱动程序...

    Oracle clob和blob在jdbc的应用

    这两种类型用于存储大量的文本数据(CLOB)和二进制数据(BLOB),例如图片、文档或音频文件。在JDBC(Java Database Connectivity)中,我们可以使用特定的方法来操作这些类型的数据。 首先,我们需要建立与数据库...

    java中MySQL的环境配置及数据库增删改查模板代码-工具包-工具类JdbcUtils模板代码

    例如,对于增、删、改操作,我们可以使用PreparedStatement,因为它支持预编译的SQL语句,能防止SQL注入攻击: ```java public void insert(String sql, Object... params) { try (Connection conn = JdbcUtils.get...

    04-完整JdbcUtils工具类.pdf

    4. PreparedStatement使用:PreparedStatement是JDBC提供的预编译SQL语句接口,可以用来执行预编译的SQL语句。它支持SQL语句中的参数化,并可以防止SQL注入。在JdbcUtils类中,PreparedStatement被用于执行插入、...

    spring对jdbc的支持jar包

    6. **DataSourceUtils** 和 **JdbcUtils**:这两个工具类提供了数据库连接池的管理和通用的JDBC辅助方法,如关闭资源,从而帮助开发者编写更健壮的代码。 在实际使用中,Spring JDBC通常与Spring的其他模块结合,如...

    JDBC学习笔记

    - **数据类型映射**:了解JDBC中数据类型的对应关系,例如Java中的`java.sql.Date`与数据库中的`DATE`类型。 - **日期处理**: - `java.util.Date`与`java.sql.Date`的区别。 - 如何正确地设置和获取日期类型的...

    JDBC数据访问对象学习资料

    总结起来,JDBC数据访问对象学习资料将引导你理解如何在MVC架构中使用JDBC进行数据访问层的封装,包括DAO设计模式的应用,JDBC的基本操作流程,以及如何在实际项目中优化和提升数据访问的效率。通过学习,你将能够更...

    jdbc封装(实现对实体的增删改查[分页]).zip

    JdbcUtils是jdbc封装的工具, JdbcCRUDUtils借助JdbcUtils实现对实体的增删改查(分页).尤其是分页,最终结果可实现只需给方法传两个参数即可取得分页数据.那两个参数分别是[显示页数]\[每页显示数] ----------...

    MyBatis 通过第三方Druid数据连接池连接SQL server 简单例子

    本教程将详细介绍如何在MyBatis中利用第三方库Druid来创建数据连接池,并以SQL Server为例进行配置和使用。 首先,我们需要理解MyBatis和Druid的基本概念。MyBatis是一个轻量级的ORM(对象关系映射)框架,它可以将...

    JDBCUtils所需jar包

    1. **JDBC API**: Java标准版(Java SE)中的`java.sql`包提供了JDBC API,包括`Connection`、`Statement`、`PreparedStatement`、`ResultSet`等接口和类,它们是Java程序连接数据库的基础。通常,这部分API无需额外...

    JDBCUtils_JDBCutils_

    在Java编程领域,数据库操作是不可或缺的一部分,而`JDBCUtils`则是开发者为了简化JDBC(Java Database Connectivity)操作常用的一种工具类。标题中的“JDBCUtils_JDBCutils_”和描述中的“自己封装的dbutils工具类...

    JDBC 工具类JdbcUtils封装与测试应用(针对mysql)

    JDBC工具类JdbcUtils的封装对于简化数据库操作、提高代码可读性和可维护性至关重要。本篇文章将深入探讨如何创建一个针对MySQL的JdbcUtils工具类,并进行测试应用。 首先,JdbcUtils的核心功能是管理数据库连接。...

    JavaWeb新版教程Servlet-1目-JdbcUtils工具类的编写和测试.avi

    JavaWeb新版教程Servlet-1目-JdbcUtils工具类的编写和测试.avi

    学JDBC,这一篇就够了.pdf

    JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,它可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种标准的API,使得Java应用程序能够与各种类型的...

    自己搭建的jdbc+mysql项目供新手学习使用(完整项目,包含相关需要的jar包,jdbcutils,工具类)

    另外,“jdbcutils”通常是一个实用工具类或包,包含了处理数据库连接、预编译SQL语句、执行查询和事务管理等常用功能,使得代码更加简洁、易读和可维护。“工具类”可能包含了各种通用功能,如日志记录、异常处理或...

    SpringBoot中封装jdbc工具类

    现在的数据层的开发,大多会使用如MyBatis或JPA之类的开发工具。这些开发工具给我们的开发过程中带来了极大的便利。 但是在一些极端的场景下往往原生的jdbc方式操作数据库更灵活,性能更高。由于部分场景下MyBatis或...

    JdbcUtils项目文件打包.rar

    JdbcUtils通常包含一系列静态方法,用于数据库连接的创建、管理以及关闭,以及预编译SQL语句的处理。通过提供便捷的数据库操作接口,开发者可以避免直接处理低级的JDBC API,减少错误的可能性,并且使代码更易读。...

    JdbcUtils2.java

    开发时使用JDBC时所用到的JDBCUTILS工具类方便开发人员使用简化代码

    JDBC driver

    Sybase官方的JDBC驱动程序——jConnect 驱动类名:com.sybase.jdbc3.jdbc.SybDriver 连接URL:jdbc:sybase:Tds:host:port/database?property_name=value

Global site tag (gtag.js) - Google Analytics