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();
分享到:
相关推荐
Apache Commons DBUtils是Java开发中一个非常实用的工具库,它极大地简化了JDBC(Java Database Connectivity)的使用。这个库是Apache Commons项目的一部分,旨在提供一个简单且异常安全的方式来处理数据库操作,...
在jdbc中,我们可以使用Statement、PreparedStatement和CallableStatement三个接口来执行SQL语句。 jdbc连接数据库 在jdbc中,我们可以使用DriverManager来加载数据库驱动程序,例如mysql的驱动程序...
这两种类型用于存储大量的文本数据(CLOB)和二进制数据(BLOB),例如图片、文档或音频文件。在JDBC(Java Database Connectivity)中,我们可以使用特定的方法来操作这些类型的数据。 首先,我们需要建立与数据库...
例如,对于增、删、改操作,我们可以使用PreparedStatement,因为它支持预编译的SQL语句,能防止SQL注入攻击: ```java public void insert(String sql, Object... params) { try (Connection conn = JdbcUtils.get...
4. PreparedStatement使用:PreparedStatement是JDBC提供的预编译SQL语句接口,可以用来执行预编译的SQL语句。它支持SQL语句中的参数化,并可以防止SQL注入。在JdbcUtils类中,PreparedStatement被用于执行插入、...
6. **DataSourceUtils** 和 **JdbcUtils**:这两个工具类提供了数据库连接池的管理和通用的JDBC辅助方法,如关闭资源,从而帮助开发者编写更健壮的代码。 在实际使用中,Spring JDBC通常与Spring的其他模块结合,如...
- **数据类型映射**:了解JDBC中数据类型的对应关系,例如Java中的`java.sql.Date`与数据库中的`DATE`类型。 - **日期处理**: - `java.util.Date`与`java.sql.Date`的区别。 - 如何正确地设置和获取日期类型的...
总结起来,JDBC数据访问对象学习资料将引导你理解如何在MVC架构中使用JDBC进行数据访问层的封装,包括DAO设计模式的应用,JDBC的基本操作流程,以及如何在实际项目中优化和提升数据访问的效率。通过学习,你将能够更...
JdbcUtils是jdbc封装的工具, JdbcCRUDUtils借助JdbcUtils实现对实体的增删改查(分页).尤其是分页,最终结果可实现只需给方法传两个参数即可取得分页数据.那两个参数分别是[显示页数]\[每页显示数] ----------...
本教程将详细介绍如何在MyBatis中利用第三方库Druid来创建数据连接池,并以SQL Server为例进行配置和使用。 首先,我们需要理解MyBatis和Druid的基本概念。MyBatis是一个轻量级的ORM(对象关系映射)框架,它可以将...
1. **JDBC API**: Java标准版(Java SE)中的`java.sql`包提供了JDBC API,包括`Connection`、`Statement`、`PreparedStatement`、`ResultSet`等接口和类,它们是Java程序连接数据库的基础。通常,这部分API无需额外...
在Java编程领域,数据库操作是不可或缺的一部分,而`JDBCUtils`则是开发者为了简化JDBC(Java Database Connectivity)操作常用的一种工具类。标题中的“JDBCUtils_JDBCutils_”和描述中的“自己封装的dbutils工具类...
JDBC工具类JdbcUtils的封装对于简化数据库操作、提高代码可读性和可维护性至关重要。本篇文章将深入探讨如何创建一个针对MySQL的JdbcUtils工具类,并进行测试应用。 首先,JdbcUtils的核心功能是管理数据库连接。...
JavaWeb新版教程Servlet-1目-JdbcUtils工具类的编写和测试.avi
JDBC(Java Database Connectivity)是一种用于执行SQL语句的Java API,它可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种标准的API,使得Java应用程序能够与各种类型的...
另外,“jdbcutils”通常是一个实用工具类或包,包含了处理数据库连接、预编译SQL语句、执行查询和事务管理等常用功能,使得代码更加简洁、易读和可维护。“工具类”可能包含了各种通用功能,如日志记录、异常处理或...
现在的数据层的开发,大多会使用如MyBatis或JPA之类的开发工具。这些开发工具给我们的开发过程中带来了极大的便利。 但是在一些极端的场景下往往原生的jdbc方式操作数据库更灵活,性能更高。由于部分场景下MyBatis或...
JdbcUtils通常包含一系列静态方法,用于数据库连接的创建、管理以及关闭,以及预编译SQL语句的处理。通过提供便捷的数据库操作接口,开发者可以避免直接处理低级的JDBC API,减少错误的可能性,并且使代码更易读。...
开发时使用JDBC时所用到的JDBCUTILS工具类方便开发人员使用简化代码
Sybase官方的JDBC驱动程序——jConnect 驱动类名:com.sybase.jdbc3.jdbc.SybDriver 连接URL:jdbc:sybase:Tds:host:port/database?property_name=value