/*注意:
红字字体那儿是一些路问题,还有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/),一起讨论,学习。呵呵。
*/