/*注意:
红字字体那儿是一些路问题,还有mysql的user和password。这个可能大家都不一样,所以需要相应的修改。
知识点:
一,JDBC 连接,操作数据库
二,ResultSet()几个常用的操作
三,mysql中 bolb类型,存入图片+获取图片
四,JDBC 批处理。
*/
package test20100623_resultset_blob;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class jay_x_resultset_method {
Properties p2 = new Properties();
void connect_properties() {
FileInputStream inputFile;
try {
inputFile = new FileInputStream(
"src/test20100623_resultset_blob/p2.properties");
try {
p2.load(inputFile);
} catch (IOException e) {
//
e.printStackTrace();
}
} catch (FileNotFoundException e2) {
//
e2.printStackTrace();
}
}
public String getValue(String key) {
if (p2.containsKey(key)) {
String value = p2.getProperty(key);// 得到某一属性的值
return value;
} else
return "没有该属性";
}
public Connection getConnection2() {
String url = "jdbc:mysql://localhost:3306/test_jdbc?useUnicode=true&characterEncoding=gbk";
this.connect_properties();
String user = this.getValue("user");
String DbPassword = this.getValue("password");
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url, user, DbPassword);
} catch (SQLException e) {
System.out.println("SQL 异常");
e.printStackTrace();
} catch (ClassNotFoundException e) {
System.out.println("数据库没有找到");
e.printStackTrace();
}
return conn;
}
public void getAllStudent_info() {
Connection conn = this.getConnection2();
Statement comm = null;
ResultSet rs;
try {
comm = conn.createStatement();
String sql2 = "select * from student";
rs = comm.executeQuery(sql2);
while (rs.next()) {
String name = rs.getString("sname");
System.out.print(name);
System.out.println(" rs.getRow():" + rs.getRow());
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public void test_ResultSet() {
Connection conn = this.getConnection2();
Statement comm = null;
ResultSet rs;
try {
comm = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
ResultSet.CONCUR_UPDATABLE);
String sql2 = "select * from student";
rs = comm.executeQuery(sql2);
rs.next();
if (rs.isFirst()) {
System.out.println("当前是第一行");
}
rs.absolute(5);
String name = rs.getString("sname");
System.out.println("rs.absolute(5):" + name);
System.out.println("rs.getRow():当前的行数" + rs.getRow());
rs.last();
System.out.println("ResultSet的总大小大小" + rs.getRow());
if (rs.last()) {
System.out.println("当前是最后一行");
}
System.out.println("ResultSet获取大小:"+rs.getFetchSize());
System.out.println("rs.getRow():当前的行数" + rs.getRow() + " name:"
+ rs.getString("sname") + "编号 "
+ String.valueOf(rs.getInt("sid")));
System.out.println("修改信息:");
rs.first();
// rs.moveToInsertRow();//把这句话 注释掉了后,就能实现了数据库数据的更新。
rs.updateString("sname", "科比");
rs.updateRow();
rs.moveToCurrentRow();
System.out.println("当前的行数" + rs.getRow() + " name:"
+ rs.getString("sname") + "编号 "
+ String.valueOf(rs.getInt("sid")));
} catch (SQLException e) {
e.printStackTrace();
}
}
public void test_Batch() {
Connection conn = this.getConnection2();
Statement comm = null;
try {
comm = conn.createStatement();
String sql2 = "insert into student values('11','易建联','9')";
String sql = "delete from student where sid=11";
comm.addBatch(sql);
comm.addBatch(sql2);
int[] results = comm.executeBatch();
// 批处理。一次执行多个sql语句,提高效率。减少读取磁盘的次数。
for (int i = 0; i < results.length; i++) {
System.out.println(results[i]);// 影响的行数
}
} catch (SQLException e) {
e.printStackTrace();
}
}
// 往数据库存入图片。
public void test_image() {
Connection conn = this.getConnection2();
String s = "src/test20100623_resultset_blob/湖人队标.png";
//String s = "src/test20100623_resultset_blob/2560-1600-8.jpg";
/*
* Packet for query is too large (3859293 > 1048576). You can change
* this value on the server by setting the max_allowed_packet' variable.
*/
// String sql = "insert into image_blob(image) values(?) ";
String sql = "insert into image_blob values(?,?) ";
File file = new File(s);
FileInputStream fis = null;
BufferedInputStream bis = null;
try {
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
PreparedStatement pstmt = null;
try {
pstmt = conn.prepareStatement(sql);
try {
pstmt.setInt(1, 4);
//Duplicate entry '2' for key 1
pstmt.setBinaryStream(2, bis, bis.available());
pstmt.execute();
} catch (IOException e) {
e.printStackTrace();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
// 把一个 InputStream的内容传递到FileOutputStream里面。
public void read_blob() {
Connection conn = this.getConnection2();
Statement comm = null;
String s = "src/test20100623_resultset_blob/湖人队标2.png";
String sql = "SELECT * FROM image_blob;";
Blob b;
File file = new File(s);
FileOutputStream fos = null;
InputStream is = null;
InputStreamReader isr=null;
BufferedInputStream bis = null;
BufferedReader br=null;
ResultSet rs;
try {
comm = conn.createStatement();
rs = comm.executeQuery(sql);
rs.next();
b = rs.getBlob(2);
/* java.sql.SQLException: Before start of result set */
is = b.getBinaryStream();
bis=new BufferedInputStream(is);
isr=new InputStreamReader(is);
br=new BufferedReader(isr);
//br.readLine();
// 从数据库 获取到了 图片 InputStream类型的。
try {
fos = new FileOutputStream(file);
byte[] buf = new byte[2048];
// 从 图片 InputStream里读出 字节。
int num = 0;
try {
num = is.read(buf);
} catch (IOException e) {
e.printStackTrace();
}
while (num != (-1)) {// 是否读完所有数据
try {
fos.write(buf, 0, num);
// 写入
}
catch (IOException e) {
e.printStackTrace();
}// 将数据写往文件
try {
num = is.read(buf);
} catch (IOException e) {
e.printStackTrace();
}// 继续从网络中读取文件
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
jay_x_resultset_method a = new jay_x_resultset_method();
a.getAllStudent_info();
a.test_ResultSet();
a.getAllStudent_info();
a.test_Batch();
a.test_image();
a.read_blob();
}
}
/*
drop database test_jdbc;
create database test_jdbc;
use test_jdbc;
create table student
(sid int not null,
sname varchar(50),
spassword varchar(20),
primary key(sid)
);
insert into student values('1','科比','24');
insert into student values('2','加内特','5');
insert into student values('3','艾弗森','23');
insert into student values('11','德罗巴','24');
insert into student values('12','罗尼','5');
insert into student values('13','克里斯蒂亚诺 诺那尔多','23');
insert into student values('21','梅西','24');
insert into student values('22','比利亚','5');
insert into student values('23','哈维','23');
insert into student values('31','麦孔','24');
insert into student values('32','埃弗拉','5');
insert into student values('33','费尔南德斯','23');
insert into student values('41','维迪奇','24');
insert into student values('42','卡西利亚斯','5');
insert into student values('43','詹姆斯','23');
insert into student values('51','韦德','24');
insert into student values('52','姚明','5');
insert into student values('53','邓肯','23');
*/
/*
以上是我最近学习Java记录的笔记和自己参照书本和老师所讲编写的
代码和注释。
有错误的地方,希望大家帮我指出。然后
1422942883
这是我的QQ,欢迎各位学习编程的同学加我好友,
或者给我的个人主页留言
(http://jayxigua.iteye.com/),一起讨论,学习。呵呵。
*/
分享到:
相关推荐
这份"java开发笔记.doc"文档涵盖了几个关键的Java Web开发技术,包括Servlet、JDBC、Hibernate以及Struts 1.X,还有JavaScript的基础知识。以下是对这些知识点的详细解释: 1. **Servlet**:Servlet是Java EE平台中...
在实际操作中,学习JDBC主要包括以下几个步骤: 1. **建立数据库连接**:使用DriverManager.getConnection()方法,需要提供数据库URL、用户名和密码。 2. **创建Statement或PreparedStatement对象**:Statement用于...
让我们通过以下几个关键知识点来深入探讨Java: 1. **Java简介**:Java是由Sun Microsystems(现为Oracle公司)于1995年发布的面向对象的编程语言。它的设计目标是“一次编写,到处运行”,通过Java虚拟机(JVM)...
在Java Web开发中,我们常常会涉及到以下几个关键知识点: 1. JSP基础: - `<%@ %>` 指令:这是JSP的指令标签,用于引入Java类或者设置页面属性。 - `<% %>`:小脚本,可以在这里编写Java代码,直接执行。 - `<%...
Java JDBC (Java Database Connectivity) 是Java平台中用于与数据库交互的标准API,它允许Java程序员使用SQL语句来访问和操作数据库。DbUtils是Apache Commons的一个模块,它为JDBC提供了一个简单实用的工具库,旨在...
无状态Bean每次请求都会创建一个新的实例,而有状态Bean会在整个会话期间保持状态。 2. **Entity Beans**:代表持久化的数据,实现了对象/关系映射(O/R Mapping),与数据库表对应。它们的生命周期与数据库记录...
Java数据库连接(JDBC)是Java程序访问数据库的标准接口,它允许Java应用程序通过Java代码执行SQL语句,从而实现对数据库的读写操作。本学习笔记主要介绍了使用Java连接Microsoft SQL Server数据库并进行数据查询的...
在探讨《Java经典笔记》这一主题时,我们深入解析了几个关键知识点,这些知识点涵盖了Servlet容器、类加载路径、数据库连接、以及Java图形用户界面(GUI)编程中的文本绘制等重要概念。 ### 1. ServletContext与...
Java视频教程通常会涵盖以下几个关键部分: 1. **环境搭建**:包括下载JDK(Java Development Kit),配置JAVA_HOME环境变量,以及设置PATH和CLASSPATH,这些都是初学者需要掌握的基础步骤。 2. **基础语法**:...
在JDBC中,有几个核心接口和类: 1. `Driver`接口:定义了数据库驱动程序的规范,每个数据库厂商都需要为其数据库实现这个接口。 2. `DriverManager`类:管理数据库驱动程序,负责加载和注册数据库驱动,建立与...
JDBC学习笔记通常会涵盖以下几个关键知识点: 1. **JDBC基础概念**:JDBC是Sun Microsystems开发的Java API,它为Java程序员提供了一种标准的、通用的接口,用于与不同的数据库系统通信。JDBC允许开发者执行SQL语句...
在【源代码】部分,我们可以期待看到以下几个关键模块的代码: 1. 数据库连接模块:这部分通常使用JDBC(Java Database Connectivity)来实现,包括数据库的连接、查询、插入、更新和删除操作。可能使用了...
### 我的JDBC课堂笔记 #### 第一章:JDBC 概述 - **ODBC**:全称为 Open Database Connectivity(开放数据库互连),是由微软提出的用于 C 程序与不同数据库进行通信的标准接口。它使得 C 程序能够通过标准的方式...
这本书涵盖了以下几个关键知识点: 1. **Java基础**:包括Java的历史、环境配置、程序结构、基本数据类型、变量、运算符、流程控制语句(如if-else、switch、for、while)等。 2. **面向对象编程**:深入讲解类、...
- 使用单例模式确保只有一个实例存在。 - 在静态代码块中自动注册 MySQL JDBC 驱动。 - 提供 `getConnection()` 方法获取数据库连接。 - 提供 `free()` 方法来关闭所有的资源。 通过这种方式,可以更方便地在项目中...
下面对这几个配置文件解释下: 1.Configuration.xml 是 mybatis 用来建立 sessionFactory 用的,里面主要包含了数据库连接相关东西,还有 java 类所对应的别名,比如 ...