JDBC基础知识
常见连接数据库工具:
- 图形化工具:点击、拖拽就可以操作数据库,对用户友好,简单对数据操作,复杂数据库操作爱莫能助
- JDBC(驱动程序):调用jar包接口
- 窗口(命令行):输入完整SQL语句对复杂数据库查询
JDBC:在java中就是jar包,应用通过JDBC提供的统一接口就可以实现对不同数据库(ORACLE、Mysql)的使用,让我们不需要了解他们之间的差异与具体操作。

Connection对象:代表java应用程序对后端数据库的一条物理链接,基于链接执行sql语句
Statement stmt=conn.createStatement();
Statement对象:是sql的容器,通过executeQuery承载sql语句,进行增删改查,返回ResultSet对象/int。
ResultSet rs=stmt.executeQuery("select name from student");
ResultSet对象:代表查询的结果
获取行:
.next():向后移动一行
.previous():向前移动一行
.absolute():直接移动到某一行
获取列:
.getString(ColumnName/Index)
.getInt(ColumnName/Index)
.getObject(ColumnName/Index)
package com.tao.test; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; public class jdbctest { static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/schoolweb?useUnicode=true&characterEncoding=UTF-8";
static final String USER = "root";
static final String PASSWORD = "admin"; public static void main(String[] args) throws ClassNotFoundException {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null; // 装载驱动程序
Class.forName(JDBC_DRIVER);
// 建立数据库连接
try {
conn = DriverManager.getConnection(DB_URL, USER, PASSWORD);
// 执行sql语句
stmt = conn.createStatement();
rs = stmt.executeQuery("select name from student");
// 获取执行结果
while (rs.next()) {
System.out.println(rs.getString("name"));
}
} catch (SQLException e) {
// 异常处理
e.printStackTrace();
} finally {
//释放宝贵资源
try {
if (conn != null) {
conn.close();
}
if (stmt != null) {
stmt.close();
}
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
JDBC进阶:java程序运行在JVM中,JVM也有内存。
1.查询结果条目过多,防止内存溢出,一次载入较少记录。
游标:提供一种客户端读取部分结果集的机制,分批读取。
1.在DB_URL中设置useCursorFetch=true开启游标

2.使用setFetchSize()设置每次读多少
package com.tao.test; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; public class jdbctest { static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/schoolweb?useCursorFetch=true&useUnicode=true&characterEncoding=UTF-8";
static final String USER = "root";
static final String PASSWORD = "admin"; public static void main(String[] args) throws ClassNotFoundException {
Connection conn = null;
PreparedStatement ptmt=null;
ResultSet rs = null; // 装载驱动程序
Class.forName(JDBC_DRIVER);
// 建立数据库连接
try {
conn = DriverManager.getConnection(DB_URL, USER, PASSWORD);
// 执行sql语句
ptmt = conn.prepareStatement("select name from student");
ptmt.setFetchSize(1);//每次读取一条记录
rs=ptmt.executeQuery();
// 获取执行结果
while (rs.next()) {
System.out.println(rs.getString("name"));
}
} catch (SQLException e) {
// 异常处理
e.printStackTrace();
} finally {
//释放宝贵资源
try {
if (conn != null) {
conn.close();
}
if (ptmt != null) {
ptmt.close();
}
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
2.一行存储大字段内容,比如存储博文,怎么读取?
1.流方式读取,按区间读取
package com.tao.test; import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; public class jdbctest { static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/schoolweb?useCursorFetch=true&useUnicode=true&characterEncoding=UTF-8";
static final String USER = "root";
static final String PASSWORD = "admin";
static final String FILE_URL = "./text.txt"; public static void main(String[] args) throws ClassNotFoundException,
IOException {
Connection conn = null;
PreparedStatement ptmt = null;
ResultSet rs = null; // 装载驱动程序
Class.forName(JDBC_DRIVER);
// 建立数据库连接
try {
conn = DriverManager.getConnection(DB_URL, USER, PASSWORD);
// 执行sql语句
ptmt = conn.prepareStatement("select name from student");
ptmt.setFetchSize(1);// 每次读取一条记录
rs = ptmt.executeQuery();
// 获取执行结果
while (rs.next()) {
InputStream in = rs.getBinaryStream("name");
File f = new File(FILE_URL);
FileOutputStream out = new FileOutputStream(f);
int temp = 0;
while ((temp = in.read()) != -1)
out.write(temp);
out.close();
in.close();
}
} catch (SQLException e) {
// 异常处理
e.printStackTrace();
} finally {
// 释放宝贵资源
try {
if (conn != null) {
conn.close();
}
if (ptmt != null) {
ptmt.close();
}
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
3.一次插入多条数据
1.批处理Statement
addBatch() //将sql打包为Batch
executeBatch() //执行sql
clearBatch() //清空Batch
package com.tao.test; import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; public class jdbctest { static final String JDBC_DRIVER = "com.mysql.jdbc.Driver";
static final String DB_URL = "jdbc:mysql://localhost:3306/schoolweb?useCursorFetch=true&useUnicode=true&characterEncoding=UTF-8";
static final String USER = "root";
static final String PASSWORD = "admin";
static final String FILE_URL = "./text.txt";
static final String[] users = {"张三","李四"}; public static void main(String[] args) throws ClassNotFoundException,
IOException {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null; // 装载驱动程序
Class.forName(JDBC_DRIVER);
// 建立数据库连接
try {
conn = DriverManager.getConnection(DB_URL, USER, PASSWORD);
// 执行sql语句
stmt=conn.createStatement();
for(String user:users)
{
stmt.addBatch("insert into student(name) values('"+user+"')");
}
stmt.executeBatch();
stmt.clearBatch();
} catch (SQLException e) {
// 异常处理
e.printStackTrace();
} finally {
// 释放宝贵资源
try {
if (conn != null) {
conn.close();
}
if (stmt != null) {
stmt.close();
}
if (rs != null) {
rs.close();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
4.中文问题
数据库: 实例、dabase、表、字段 级别内置编码(优先级从小到大)
JDBC编码:DB_URL+characterEncoding=utf-8
JDBC基础知识的更多相关文章
- Java数据库连接——JDBC基础知识(操作数据库:增删改查)
一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...
- JDBC 基础知识总结
1. 何谓JDBC --- Java Database Connectivity. 由Sun 公司提供的访问数据库的一组java类和接口,用来对数据库进行链接.发送SQL语句.处理返回结果,为开发 ...
- Java数据库连接--JDBC基础知识(操作数据库:增删改查)
一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...
- Java JDBC 基础知识
一.JDBC常用接口.类介绍 JDBC提供对独立于数据库统一的API,用以执行SQL命令.API常用的类.接口如下: DriverManager 管理JDBC驱动的服务类,主要通过它获取Connect ...
- Java JDBC的基础知识(五)
本文主要记录JDBC基础知识之后的部分内容.另外,我看到<Java核心基础2>中第四章是主要介绍数据库编程的.里面有一些说明和应用特别灵活,有些部分也太容易理解,建议大家看一下.这篇是依然 ...
- JDBC基础教程
本文实例讲述了JDBC基础知识与技巧.分享给大家供大家参考.具体分析如下: 1.什么是JDBC? 通俗来讲JDBC技术就是通过java程序来发送SQL语句到数据库,数据库收到SQL语句后执行,把结果返 ...
- Java JDBC的基础知识(三)
在前面的Java JDBC的基础知识(二)和(三)中,主要介绍JDBC的原理和简单的应用过程.尤其在(二)中,可以发现代码进行多次try/catch,还有在前面创建连接等过程中好多参数我都给写定了. ...
- Java JDBC的基础知识(二)
在我的上一篇Java JDBC的基础知识(一)中,最后演示的代码在关闭资源的时候,仅仅用了try/catch语句,这里是有很大的隐患的.在程序创建连接之后,如果不进行关闭,会消耗更多的资源.创建连接之 ...
- Spring基础知识
Spring基础知识 利用spring完成松耦合 接口 public interface IOutputGenerator { public void generateOutput(); } 实现类 ...
- maven基础知识
1.maven基础知识 1.1maven坐标 maven坐标通常用冒号作为分割符来书写,像这样的格式:groupId:artifactId:packaging:version.项目包含了junit3. ...
随机推荐
- 科技助力上亿用户隐私安全保护,合合信息两款产品再获CCIA PIA星级标识
随着互联网技术的飞速发展,个人信息的收集.存储.使用和传输变得日益频繁,其泄露和滥用的风险也随之增加,个人信息保护已成为社会共同关注的热点议题.近期,"中国网络安全产业联盟(CCIA)数据安 ...
- CSS – initial, Inherit, unset, revert
参考 Understanding the "Initial", "Inherit" and "Unset" CSS Keywords [译] ...
- CSS & JS Effect – FAQ Accordion & Slide Down
效果 参考: Youtube – Responsive FAQ accordion dropdown | HTML and CSS Tutorial 几个难点 1. 如何 align left for ...
- [Tkey] [IOI 2018] werewolf
注意看,我耗时五个小时 AK 了 IOI 题意 给你一个图,每次给定若干询问 \((s,t,l,r)\),请你完成下述要求: 定义 \(S\) 为到 \(s\) 的最短路径不小于 \(l\) 的点构成 ...
- crypt.h:No such file or directory 报错处理
crypt.h:No such file or directory 报错处理 前言:本文初编辑于2024年9月28日 CSDN主页:https://blog.csdn.net/rvdgdsva 博客园 ...
- /proc/slabinfo 介绍
slabinfo - version: 2.1 # name <active_objs> <num_objs> <objsize> <objperslab&g ...
- DWC3和XHCI的区别
DWC3(DesignWare USB 3.0 Controller)和XHCI(eXtensible Host Controller Interface)都是与USB控制器相关的技术,但它们的作用和 ...
- 神经网络之卷积篇:详解残差网络(ResNets)(Residual Networks (ResNets))
详解残差网络 ResNets是由残差块(Residual block)构建的,首先解释一下什么是残差块. 这是一个两层神经网络,在\(L\)层进行激活,得到\(a^{\left\lbrack l + ...
- error loading sources list: ('The read operation timed out',)解决办法!!
一.灵魂四问 1.为什么叫rosdepc? rosdepc,c指的是China中国,主要用于和rosdep区分. 2.rosdepc和rosdep功能一致吗? rosdep官方最新版源码直接修改的,小 ...
- CSS动画效果(炫酷登录页面)
1.整体效果 https://mmbiz.qpic.cn/sz_mmbiz_gif/EGZdlrTDJa6ibiceejK9loT70yREYASOhuSRaI6vQtQ42zN48oafaWDzdn ...