JDBC简介:

 

今天我们学习了使用JAVA程序操作数据库的工具JDBC

JDBC程序

搭建环境

在数据库中创建库、表、插入数据.

Java工程导入驱动

在程序中加载驱动

DriverManager.registerDriver(driver)

建立连接

Connection conn = DriverManager.getConnection(url, user, password)

创建Statement对象

Statement st = conn.createStatement()

执行SQL语句获取ResultSet

ResultSet rs = st.executeQuery(sql)

Result中获取数据显示

rs.next()

rs.getObject(columnLabel)

释放资源

rs.close()

st.close()

conn.close()

注册驱动

Class.forName("com.mysql.jdbc.Driver");

获取连接、URL地址

DriverManager通过已注册的驱动获取Connection, 这个Connection是java.sql.Connection的实现类

具体返回的是哪个类由驱动决定也就是说我们注册的是MySQL的驱动返回的就是MySQLConnection. 查看源码.

DriverManager在获取连接的时候需要URL地址地址的语法为:

jdbc:mysql://ip:port/sid[?参数名=参数值][&参数名=参数值]

jdbc:mysql: 是协议和子协议

ResultSet

ResultSet除了大量get方法外还有一些控制指针移动的方法

boolean next()

尝试将指针向后移动一行返回是否成功

boolean previous()

尝试将指针向前移动一行返回是否成功


boolean absolute(int row)

尝试将指针移动到指定行返回是否成功

void beforeFirst()

将指针移动到第一行以前

void afterLast()

将指针移动到最后一行以后

释放资源

在程序运行结束以后和数据库相关的资源不会被自动释放掉我们需要手动释放ResultSet, Statement, Connection

尤其Connection是非常宝贵的资源使用结束之后应该尽早释放. 

为了确保释放资源的代码一定会执行到我们通常将它们放在finally

CRUD操作

  CRUD是指在做计算处理时的增加(Create)、查询(Retrieve)(重新得到数据)、更新(Update)和删除(Delete)几个单词的首字母简写。主要被用在描述软件系统中数据库或者持久层的基本操作功能。 

  C reate new records 

  R etrieve existing records 

  U pdate existing records 

D elete existing records.

PreparedStatement

1. PreparedStatementStatement的子类具有预编译的功能可以将SQL语句编译之后再发送到数据库.  具有以下优点

a) 由于编译之后才发送解决了SQL注入问题提高程序安全性.

b) 由于编译之后才发送减轻了服务器压力提高了程序性能.

c) 由于可以设置占位符使代码结构更清晰提高代码可读性.

2. 使用方式

Connecion类中PreparedStatement prepareStatement(String sql)方法预编译SQL语句获得一个PreparedStatement

SQL语句中可以使用问号预设占位符

PreparedStatement类中多个setXxx()方法可以设置占位符的值注意占位符从1开始

PreparedStatement类中int executeUpdate() 可以运行预设SQL语句进行更新操作返回影响行数注意不要加参数

PreparedStatement类中ResultSet executeQuery() 可以运行预设SQL语句进行查询操作返回结果集

3. 查询代码示例

PreparedStatement st = conn.prepareStatement("select id,name,password,email,birthday from user where name=?");

st.setString(1, name);

ResultSet rs = st.executeQuery();

4.更新代码示例

PreparedStatement st = conn.prepareStatement("insert into user(name,password,email,birthday) values(?,?,?,?)");

st.setString(1, user.getName());

st.setString(2, user.getPassword());

st.setString(3, user.getEmail());

st.setDate(4, new Date(user.getBirthday().getTime()));

st.executeUpdate();

大文本和二进制操作

MySQLVARCHAR上限为65535个字节如果超出这个范围需要设置为TEXT. 

LONGTEXT最大可以4G

存储TEXT

PreparedStatement ps = conn.prepareStatement("insert into clob(file) values(?)");

File file = new File("src/cn/itcast/jdbc1/clob_blob/ClobDemo.java");

Reader reader = new FileReader(file);

ps.setCharacterStream(1, reader, (int) file.length());

ps.executeUpdate()

也可以使用ps.setString()直接设置但如果字符串太大有可能超出虚拟机内存

读取TEXT

PreparedStatement ps = conn.prepareStatement("select file from clob");

ResultSet rs = ps.executeQuery();

if (rs.next()) {

Reader reader = rs.getCharacterStream(int columnIndex);

}

也可以使用rs.getString(), 在字符串太大的情况下同样有可能超出虚拟机内存

BLOB

BLOB用来存储大段的二进制数据例如图片音频视频. LONGBLOB最大4G

存储BLOB

PreparedStatement ps = conn.prepareStatement("insert into big_binary(file) values(?)");

File file = new File("src/cn/itcast/jdbc1/clob_blob/IMG_0007.jpg");

InputStream in = new FileInputStream(file);

ps.setBinaryStream(1, in, (int) file.length());

ps.executeUpdate();

读取BLOB

PreparedStatement ps = conn.prepareStatement("select file from big_binary");

ResultSet rs = ps.executeQuery();

if (rs.next()) {

InputStream in = rs.getBinaryStream(1);

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值