常见连接数据库工具:

  1. 图形化工具:点击、拖拽就可以操作数据库,对用户友好,简单对数据操作,复杂数据库操作爱莫能助
  2. JDBC(驱动程序):调用jar包接口
  3. 窗口(命令行):输入完整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基础知识的更多相关文章

  1. Java数据库连接——JDBC基础知识(操作数据库:增删改查)

    一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...

  2. JDBC 基础知识总结

    1.  何谓JDBC  --- Java Database Connectivity. 由Sun 公司提供的访问数据库的一组java类和接口,用来对数据库进行链接.发送SQL语句.处理返回结果,为开发 ...

  3. Java数据库连接--JDBC基础知识(操作数据库:增删改查)

    一.JDBC简介 JDBC是连接java应用程序和数据库之间的桥梁. 什么是JDBC? Java语言访问数据库的一种规范,是一套API. JDBC (Java Database Connectivit ...

  4. Java JDBC 基础知识

    一.JDBC常用接口.类介绍 JDBC提供对独立于数据库统一的API,用以执行SQL命令.API常用的类.接口如下: DriverManager 管理JDBC驱动的服务类,主要通过它获取Connect ...

  5. Java JDBC的基础知识(五)

    本文主要记录JDBC基础知识之后的部分内容.另外,我看到<Java核心基础2>中第四章是主要介绍数据库编程的.里面有一些说明和应用特别灵活,有些部分也太容易理解,建议大家看一下.这篇是依然 ...

  6. JDBC基础教程

    本文实例讲述了JDBC基础知识与技巧.分享给大家供大家参考.具体分析如下: 1.什么是JDBC? 通俗来讲JDBC技术就是通过java程序来发送SQL语句到数据库,数据库收到SQL语句后执行,把结果返 ...

  7. Java JDBC的基础知识(三)

    在前面的Java JDBC的基础知识(二)和(三)中,主要介绍JDBC的原理和简单的应用过程.尤其在(二)中,可以发现代码进行多次try/catch,还有在前面创建连接等过程中好多参数我都给写定了. ...

  8. Java JDBC的基础知识(二)

    在我的上一篇Java JDBC的基础知识(一)中,最后演示的代码在关闭资源的时候,仅仅用了try/catch语句,这里是有很大的隐患的.在程序创建连接之后,如果不进行关闭,会消耗更多的资源.创建连接之 ...

  9. Spring基础知识

    Spring基础知识 利用spring完成松耦合 接口 public interface IOutputGenerator { public void generateOutput(); } 实现类 ...

  10. maven基础知识

    1.maven基础知识 1.1maven坐标 maven坐标通常用冒号作为分割符来书写,像这样的格式:groupId:artifactId:packaging:version.项目包含了junit3. ...

随机推荐

  1. 机器学习--决策树算法(CART)

    CART分类树算法 特征选择 ​ 我们知道,在ID3算法中我们使用了信息增益来选择特征,信息增益大的优先选择.在C4.5算法中,采用了信息增益比来选择特征,以减少信息增益容易选择特征值多的特征的问题. ...

  2. DVI与VGA有什么区别?

    DVI接口:DVI(Digital Visual Interface),即数字视频接口.DVI接口速度快.画面清晰.支持HDCP协议. VGA接口:VGA(Video Graphics Array)即 ...

  3. 论文解读 -TongGu:专注于文言文的大模型

    一.简要介绍 文言文是通往中国古代丰富遗产和智慧的门户,但其复杂性给大多数没有专业知识的现代人构成了巨大的理解障碍.虽然大型语言模型(LLM)在自然语言处理(NLP)方面显示出了显著的能力,但它们在文 ...

  4. JavaScript – Set and Map

    参考 Set 和 Map 数据结构 Set 介绍和使用 Set 很像 Array, 但其实它是一个 Iteralbe 对象. 用于保存多个值, 而且具有 unique 特性 (1 个 set 里面不会 ...

  5. Asp.net Core – CSS Isolation

    前言 ASP.NET Core 6.0 Razor Pages 新功能, 我是用 webpack 做打包的, 所以这个对我没有什么帮助. 但是了解一下是可以的. 希望 .NET 会继续发展的更好, 多 ...

  6. Hugging Face NLP课程学习记录 - 0. 安装transformers库 & 1. Transformer 模型

    Hugging Face NLP课程学习记录 - 0. 安装transformers库 & 1. Transformer 模型 说明: 首次发表日期:2024-09-14 官网: https: ...

  7. 升讯威在线客服系统如何高性能同时支持 MySQL 和 SQL Server

    升讯威在线客服与营销系统是基于 .net core / WPF 开发的一款在线客服软件,宗旨是: 开放.开源.共享.努力打造 .net 社区的一款优秀开源产品. 前段时间我发表了一系列文章,开始介绍基 ...

  8. 分析ueventd Coldboot耗时问题

    安卓go平台启动时间发现如下ueventd耗时1.907s问题: 01-11 00:20:02.854 0 0 I init : Parsing file /odm/etc/init... 01-11 ...

  9. Linux 进程调度之schdule主调度器

    考虑到文章篇幅,在这里我只讨论普通进程,其调度算法采用的是CFS(完全公平)调度算法. 至于CFS调度算法的实现后面后专门写一篇文章,这里只要记住调度时选择一个优先级最高的任务执行 一.调度单位简介 ...

  10. python处理nii文件

    第一步安装nibabel,可以使用命令:pip install nibabel 之后: from nibabel.viewers import OrthoSlicer3D as osdimport n ...