java 代码笔记 2010-06-23 对ResultSet()的几个常用操作,实例。

/*注意:

红字字体那儿是一些路问题,还有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,SQL,SQL,Server,MySQL,JDBC)